-
Notifications
You must be signed in to change notification settings - Fork 4
Con el objetivo de seguir lo aprendido, y el consejo "si de forma automatizada quieren datos generar, el tipo de oráculo asociado a los datos no pueden olvidar." diseñamos un sistema de generación de datos que utilizamos para implementar los tres tipos de pool de datos.
Parte de la generación de los datos a partir de un esquema, todos los esquemas están definidos en el objeto scenarios. Cada esquema está ajustado para cumplir las necesidades del escenario.
Un ejemplo de un esquema de un escenario, Nombre de máxima longitud en el formulario crear miembro:
Scenarios = {
maxlongname: {
title: 'Max long name (191)',
model: 'member',
oracle: true,
data: { name: { length: 191 } },
},
...
}
Esto especifica el título que tendrá el nombre de la prueba, el modelo (formulario) que va a ser probado, el resultado de evaluar el oráculo de la prueba, y data donde describimos el esquema de los datos. En este caso un nombre de 191 caracteres. Todos los escenarios específicos de datos se encuentran en el objeto
Para generar los datos este esquema se pasa el identificador maxlongname
a la función getData, esta por su parte los pasa a una función que da opciones por defecto y llama la función generadora correspondiente esta, estas en la mayoría de los casos llaman a otra función generadora que se encarga de que el string cumpla con las características esperadas.
De esta forma es generado los datos usando a faker.js parametrizado para contar con oráculo definido.
Usando la estrategia de parametrización delineada, la función getData recibiendo el pool type random
genera una sola tupla de datos. Estos datos son retornados y se procede a correr el escenario con ellos.
Usando la estrategia de parametrización delineada anteriormente a la ejecución generamos un data pool con un seed para cada uno de los escenarios definidos de un tamaño definido por defecto (100 alternativas). Para generar el data pool apriori se corre el comando npm run gendatapool
cuyos resultados se guardan en el archivo pool.json
Datos de este data pool son usados cuando llamados a la función getData usan pool de tipo apriori
. Siguiendo la ejecución de la función podemos ver que es leído la primera vez que se requiere un dato de este. Estos datos son retornados y se procede a correr el escenario con ellos.
Se genera de similar forma que el data pool apriori, sin embargo no se le hace seed y se genera al vuelo en el primer llamado a la función getData con tipo de pool dynamic
.
Los casos del tipo data de validación de funcionarios se encuentran en el archivo data.spec.ts como los escenarios están parametrizados se corren en un ciclo, usando la funcionalidad de parametrizar de playwright. Un paso a paso de la ejecución de un escenario.
- Se toma el objeto Scenarios donde están todos los test parametrizados.
- Se itera sobre cada uno de los escenarios
- Se escoge un datapool de manera rotativa, es decir primero de
apriori
, luegorandom
, luegodyanmic
. - El título, modelo y oráculo se utilizan para generar el nombre el escenario en una función, llamada al momento de crear el test parametrizado.
- Playwright crea todos los test, antes de correrlos.
Ahora miremos el proceso de ejecución de una prueba, ya habiendo visto como se montó la parametrización.
- Se llama la función runScenario esta se encargará de correr los métodos adecuados dependiendo a la configuración del escenario y el tipo de pool utilizdo.
- La función primeramente obtienes la tupla de datos que va a utilizar, llamando a getData usando el pool configurado, dicha información viene en un objeto Cookie que hace parte de la firma de
runScenario
. De esta forma se obtiene una tupla de datos a utilizar. - Se realiza el login.
- Dependiendo a que modelo (Member, Staff o Tag) se crear la página respectiva y se llama al método respectivo. Estos métodos tienen un diseño especial:
- Consiste en que insertan los datos de la tupla en los campos esperados y presionan guardar, y tienen un watchdog de feedbacks claros que da Ghost, determinando de esa forma muy rápidamente si se grabó exitosamente o fallo el guardado. De esta forma retornan un boolean y este es usado para comparar con el oráculo definido en la parametrización.
- De esta forma se ejecuta la prueba con datos parametrizados y oraculo definido.
Los escenarios corridos en las dos semanas anteriores, todos utilizaron datos random
. Los test se pueden encontrar en la carpeta e2e-playwright/
Los escenarios corridos en las dos semanas anteriores, todos utilizaron datos random
. Los features se encuentran en la carpeta features/
Los siguientes son los escenarios de validación realizados. Nos centramos como fue especificado en clase en los formularios y que estos presenten los datos correctamente.
Leyenda:
- Member: se refiere al formulario de creación de miembro
- Staff: se refiere al formulario de edición de perfil de staff.
- Member fun: se refiere a funcionalidad de diferentes features de member.
- Post fun: se refiere a funcionalidad de diferentes features de post.
- Tool: Esta columna especifica en que herramienta corrieron los tests.
- Pw: Playwright
- Kr: Kraken
- Pool: el tipo de data pool usado para ese escenario.
- Tipo/Clase Oráculo/Escenario (+ | -): Todos los oráculos son definidos, sin embargo El signo (+) significa escenario positivo y (-) escenario negativo.
- [BUG]: Este label en el nombre del escenario significa que este escenario debería arrojar una respuesta contraria a la que arrojó. Por esto se marcaron de esa manera.
Nuestro grupo por ser de 3 integrantes requiere 90 escenarios. Todos los escenarios incluyen realizar el login y navegar hacia la funcionalidad.
# | Tool | Pool | Nombre |
---|---|---|---|
1. | Pw | dynamic | Member: No name (+) |
2. | Pw | random | Member: Empty all fields (-) |
3. | Pw | apriori | Member: Long name (+) |
4. | Pw | dynamic | Member: Max long name (191) (+) |
5. | Pw | random | Member: Over max long name (192) (-) |
6. | Pw | apriori | Member: Very short name (+) |
7. | Pw | dynamic | Member: No email (-) |
8. | Pw | random | Member: Email normal (40) (+) |
9. | Pw | apriori | Member: Very long email: 100 (-) |
10. | Pw | dynamic | Member: Short email (+) |
11. | Pw | random | Member: Invalid email (-) |
12. | Pw | apriori | Member: No TLD email (-) |
13. | Pw | dynamic | Member: [BUG] Emoji email (-) |
14. | Pw | random | Member: [BUG] Email should allow multiple "@" (-) |
15. | Pw | apriori | Member: Email should allow multiple punctuation characters (+) |
16. | Pw | dynamic | Member: [BUG] Email should allow IP address as domain "whatever@[166.84.7.99]" (-) |
17. | Pw | random | Member: Email should not allow consecutive dots "." (-) |
18. | Pw | apriori | Member: Email should allow consecutive dots ".." if they are quoted " " (+) |
19. | Pw | dynamic | Member: Normal note (+) |
20. | Pw | random | Member: No note (+) |
21. | Pw | apriori | Member: Long note (near frontier 499 vs 500) (+) |
22. | Pw | dynamic | Member: Long note (over frontier 501 vs 500) (-) |
23. | Pw | random | Member: Long note (in frontier 500 vs 500) (+) |
24. | Pw | apriori | Member: label (1, normal) (+) |
25. | Pw | dynamic | Member: No label (+) |
26. | Pw | random | Member: Long label (in frontier 191 vs 191) (+) |
27. | Pw | apriori | Member: Long label (over frontier 192 vs 191) (-) |
28. | Pw | dynamic | Member: Many labels (50, normal length) (+) |
29. | Pw | random | Staff: No name (-) |
30. | Pw | apriori | Staff: Empty all fields (-) |
31. | Pw | dynamic | Staff: Long name (+) |
32. | Pw | random | Staff: Max long name (191) (+) |
33. | Pw | apriori | Staff: Over max long name (192) (-) |
34. | Pw | dynamic | Staff: No email (-) |
35. | Pw | random | Staff: [BUG] Emoji email (-) |
36. | Pw | apriori | Staff: [BUG] Email should allow multiple "@" (-) |
37. | Pw | dynamic | Staff: [BUG] Email should allow IP address as domain "whatever@[166.84.7.99]" (-) |
38. | Pw | random | Staff: Email should not allow consecutive dots "." (-) |
39. | Pw | apriori | Staff: Invalid email (-) |
40. | Pw | dynamic | Staff: Long bio (near frontier 199 vs 200) (+) |
41. | Pw | random | Staff: Long bio (over frontier 201 vs 200) (-) |
42. | Pw | apriori | Staff: Long bio (in frontier 200 vs 200) (+) |
43. | Pw | dynamic | Staff: Regular website (+) |
44. | Pw | random | Staff: Website without tld (e.g. no .com) (+) |
45. | Pw | apriori | Staff: Website without tld (e.g. no .com) (-) |
46. | Pw | dynamic | Staff: Long website (near frontier 1999 vs 2000) (+) |
47. | Pw | random | Staff: Long website (over frontier 2001 vs 2000) (-) |
48. | Pw | apriori | Staff: Long website (in frontier 2000 vs 2000) (+) |
49. | Pw | dynamic | Tag: Normal, valid data in all fields (+) |
50. | Pw | random | Tag: Without name tag (-) |
51. | Pw | apriori | Tag: without color tag (+) |
52. | Pw | dynamic | Tag: Color including the pound sign (#) (-) |
53. | Pw | random | Tag: Invalid color (a string) (-) |
54. | Pw | apriori | Tag: Fail tag (-) |
55. | Pw | dynamic | Tag: Empty all fields (-) |
56. | Pw | random | Tag: Only provide a name (+) |
57. | Pw | apriori | Tag: Description less than frontier (499 vs 500) (+) |
58. | Pw | dynamic | Tag: Description more than frontier (501 vs 500) (-) |
59. | Pw | random | Tag: Description in frontier (500 vs 500) (+) |
60. | Pw | apriori | Tag: Meta title less than frontier (299 vs 300) (+) |
61. | Pw | dynamic | Tag: Meta title in frontier (300 vs 300) (+) |
62. | Pw | random | Tag: Meta title over frontier (301 vs 300) (-) |
63. | Pw | apriori | Tag: Meta description less than frontier (499 vs 500) (+) |
64. | Pw | dynamic | Tag: Meta description in frontier (500 vs 500) (+) |
65. | Pw | random | Tag: Meta description over frontier (501 vs 500) (-) |
66. | Pw | apriori | Tag: Twitter title less than frontier (299 vs 300) (+) |
67. | Pw | dynamic | Tag: Twitter title in frontier (300 vs 300) (+) |
68. | Pw | random | Tag: Twitter title over frontier (301 vs 300) (-) |
69. | Pw | apriori | Tag: Twitter description less than frontier (499 vs 500) (+) |
70. | Pw | dynamic | Tag: Twitter description in frontier (500 vs 500) (+) |
71. | Pw | random | Tag: Twitter description over frontier (501 vs 500) (-) |
72. | Pw | apriori | Tag: Facebook title less than frontier (299 vs 300) (+) |
73. | Pw | dynamic | Tag: Facebook title in frontier (300 vs 300) (+) |
74. | Pw | random | Tag: Facebook title over frontier (301 vs 300) (-) |
75. | Pw | apriori | Tag: Facebook description less than frontier (499 vs 500) (+) |
76. | Pw | dynamic | Tag: Facebook description in frontier (500 vs 500) (+) |
77. | Pw | random | Tag: Facebook description over frontier (501 vs 500) (-) |
Escenarios semanas anteriores mitad playwright, mitad kraken. Todos estos escenarios utilizan datos del pool random, con faker.js
# | Tool | Pool | Nombre |
---|---|---|---|
78. | Pw | random | Member fun: Create member (+) |
79. | Pw | random | Member fun: Create member with same name (+) |
80. | Pw | random | Member fun: Create member invalid email (-) |
81. | Pw | random | Member fun: Create member without name (+) |
82. | Pw | random | Member fun: Create member duplicate email |
83. | Pw | random | Member fun: Create member retry (+) |
84. | Pw | random | Member fun: Delete member (+) |
85. | Pw | random | Member fun: Filter member (+) |
86. | Pw | random | Member fun: Filter member delete (+) |
87. | Pw | random | Member fun: Filter member remove label (+) |
88. | Pw | random | Post fun: Create post (+) |
89. | Pw | random | Post fun: Create post without content (+) |
90. | Pw | random | Post fun: Create multiple post with the same title (+) |
91. | Pw | random | Post fun: Create post and edit it (+) |
92. | Pw | random | Post fun: Create post and delete it (+) |
94. | Kr | random | Member fun: Create member (+) |
95. | Kr | random | Member fun: Create member with same name (+) |
96. | Kr | random | Member fun: Create member invalid email (-) |
97. | Kr | random | Member fun: Create member without name (+) |
98. | Kr | random | Member fun: Create member duplicate email |
99. | Kr | random | Member fun: Create member retry (+) |
100. | Kr | random | Member fun: Delete member (+) |
101. | Kr | random | Member fun: Filter member (+) |
102. | Kr | random | Member fun: Filter member delete (+) |
103. | Kr | random | Member fun: Filter member remove label (+) |
104. | Kr | random | Post fun: Create post (+) |
105. | Kr | random | Post fun: Create post without content (+) |
106. | Kr | random | Post fun: Create multiple post with the same title (+) |
107. | Kr | random | Post fun: Create post and edit it (+) |
108. | Kr | random | Post fun: Create post and delete it (+) |