Continuando con los tests de sistema, estos sirven para comprobar si el sistema totalmente integrado como producto final, cumple con todos los requisitos. Por último, los tests de aceptación son los que se realizan antes del lanzamiento del producto, probando todo el sistema o producto en un entorno y condiciones lo más parecidos a los de producción posibles. Dentro de este nivel también existen dos sub-tipos, los tests de aceptación de operación (OAT) y de usuario (UAT). Los tests de aceptación de operación son pruebas no funcionales, básicamente se enfocan en si el software es capaz de funcionar en el sistema o en el entorno de producción, mientras que las pruebas de aceptación de usuario se dedican a comprobar el cumplimiento de los requisitos de la funcionalidad del software que se había acordado en la planificación. Para finalizar, vamos a ver un pequeño ejemplo de la estructura de un test de aceptación de usuario. Las pruebas para test de aceptación de usuario se preparan con un lenguaje de alto nivel, a ser posible por los usuarios finales que no tienen porqué estar al tanto del proceso de implementación, si no de verificar si cumple con las funcionalidades de las especificaciones y/o requisitos establecidos, como se ha comentado anteriormente. El lenguaje que se utiliza para los tests de aceptación se llama Gherkin, y existen varios intérpretes de este lenguaje, el más famoso de todos es Cucumber escrito en Ruby, y otros como Jasmine para JavaScript, Concordion para Java, Kahlan para PHP, o Behave para Python, que es el utilizado en los ejemplos de código siguientes.
Vamos a detallar los elementos que aparecen en la figura anterior. Feature sería el título y la descripción del test que se está realizando, Scenario describe un caso concreto que se quiere probar, es decir, cada funcionalidad donde interactúan el usuario y el sistema sería un escenario. En el escenario se describen las precondiciones, el evento y su resultado, estos se definen con las palabras Given, When y Then. And es otra palabra dentro del escenario que puede ir en diferentes partes del mismo y dependiendo de dónde se ubique, añade mayor descripción. El escenario habrá pasado el test cuando ocurra el evento (When the user books 1 videocall), dadas ciertas precondiciones (Given a new user registered with username foo@bar.com And has 3 free videocalls) y cumpla con el resultado conocido de antemano (Then the user has 2 free videocalls left). Abajo se muestra el resultado del test en Behave:
Como se puede observar, Gherkin ayuda a que el test sea con un lenguaje natural, conciso y fácil de entender, a diferencia de otros tipos de test de más bajo nivel y para personas o equipos con conocimiento técnico. En resumen, aunque los tests parezcan pesados y poco llamativos por su extensa variedad, cada uno de ellos cumplen una función, y que aunque parezcan independientes entre unos y otros, están ligados de un nivel al próximo para garantizar el correcto funcionamiento del software, por lo que merecen que se les dé más atención y dedicación. Además, sabiendo que existen tests más amigables se puede hacer partícipe tanto a personal técnico como a no técnico en el desarrollo de software y control de calidad, ya que ambos roles juegan un papel muy importante como usuario final. 
