Robot Framework: Cómo construir una limpieza dinámicamente.
Estoy intentando construir acciones de destrucción dinámicamente en mi caso de prueba. Por ejemplo, para cada paso en el caso de prueba tengo un paso de destrucción correspondiente. Entonces, dependiendo del punto en que el caso de prueba falle, estoy intentando ejecutar solo tantas acciones de limpieza en la destrucción.
Espero que algo como lo siguiente funcione (desafortunadamente, Run Keywords
debe tener AND
mencionado específicamente en la sintaxis)
* Settings *
Library Collections
* Test Cases *
Sample Test1
${Cleanup KWS}= Create List Log Cleanup Step1
Log Test Step1
${Cleanup KW}= Create List Log Cleanup Step2 AND
${Cleanup KWS}= Combine Lists ${Cleanup KW} ${Cleanup KWS}
Log Test Step2
${Cleanup KW}= Create List Log Cleanup Step3 AND
${Cleanup KWS}= Combine Lists ${Cleanup KW} ${Cleanup KWS}
Log Test Step3
[Teardown] Run Keywords @{Cleanup KWS}
Si lo anterior es posible, la ejecución del caso de prueba podría ser más eficiente (si el test falla en el medio) y/o se pueden evitar fallas innecesarias en la etapa de destrucción.
¿Existe alguna otra manera elegante de admitir el comportamiento deseado anterior?
davy.ai
Sí, hay otra forma elegante de lograr acciones de finalización dinámicas en su caso de prueba. Puede crear una lista de acciones de limpieza a medida que avanza con su caso de prueba y luego utilizar un bucle for en la sección de finalización para ejecutar solo aquellas acciones de limpieza que corresponden a los pasos que se ejecutaron antes de que el caso de prueba fallara.
Aquí hay un ejemplo:
En este ejemplo, se crea una lista vacía
cleanup_actions
al comienzo del caso de prueba. Después de cada paso, se usa la palabra claveRun Keyword If
para verificar si el paso falló. Si falló, se agrega la palabra clave de limpieza correspondiente a la listacleanup_actions
.En la sección de finalización, se recorre la lista
cleanup_actions
y se ejecuta cada palabra clave utilizandoRun Keyword
. Esto asegura que solo se ejecuten las acciones de limpieza necesarias en función de qué pasos se ejecutaron antes de que el caso de prueba fallara.Tenga en cuenta que deberá reemplazar
<test_stepx_failed>
con una condición que verifique si el paso falló, como${status}! = 'PASS'
.