python - number - robot framework test
¿Cómo puede una prueba llamada por Robot Framework devolver información a la consola? (3)
Tengo un paquete de prueba de marco de robot que llama a un método de Python. Me gustaría que el método de python devuelva un mensaje a la consola sin fallar la prueba. Específicamente, estoy tratando de sincronizar un proceso.
Puedo usar "subir" para devolver un mensaje a la consola, pero eso simultáneamente falla la prueba.
def doSomething(self, testCFG={}):
''''''
Do a process and time it.
''''''
testCFG[''operation''] = ''doSomething''
startTime = time.time()
response=self.Engine(testCFG)
endTime = time.time()
duration = int(round(endTime-startTime))
raise "doSomething took", duration//60 , "minutes and", duration%60, "seconds."
errmsg = ''doSomething failed''
if testCFG[''code'']: raise Exception(errmsg)
O puedo usar "imprimir" para devolver un mensaje al archivo de registro e informar sin fallar la prueba, pero esa información solo está disponible en el informe, no en la consola.
def doSomething(self, testCFG={}):
''''''
Do a process and time it.
''''''
testCFG[''operation''] = ''doSomething''
startTime = time.time()
response=self.Engine(testCFG)
endTime = time.time()
duration = int(round(endTime-startTime))
print "doSomething took", duration//60 , "minutes and", duration%60, "seconds."
errmsg = ''doSomething failed''
if testCFG[''code'']: raise Exception(errmsg)
Si uso la opción "imprimir" obtengo esto:
==============================================================================
Do Something :: Do a process to a thing(Slow Process). | PASS |
------------------------------------------------------------------------------
doSomething :: Overall Results | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Lo que quiero es esto:
==============================================================================
Do Something :: Do a process to a thing(Slow Process). | PASS |
doSomething took 3 minutes and 14 seconds.
------------------------------------------------------------------------------
doSomething :: Overall Results | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Dado que estás usando Python, tienes dos posibilidades simples:
Escribe tus mensajes en el
stderr
. Estos mensajes se escriben tanto en el archivo de registro de Robot como en la consola. Una limitación es que los mensajes terminan en la consola solo después de que termina la palabra clave que está ejecutando. Una ventaja es que este enfoque funciona también con bibliotecas basadas en Java.Escriba sus mensajes a
sys.__stdout__
en Python. Robot solo interceptasys.stdout
ysys.stderr
y dejasys.__stdout__
(ysys.__stderr__
) solo (como deberían hacerlo todos los programas de Python). Estos mensajes solo terminan en la consola, pero también puede escribirlos ensys.stdout
para obtenerlos también en el archivo de registro.
Puede usar la biblioteca robot.api. Este es el documento para la biblioteca
https://robot-framework.readthedocs.org/en/latest/_modules/robot/api/logger.html
Haga que su lib devuelva una cadena, luego use Set Test Message
para mostrarla.
My Test Case [Documentation] display data returned from lib call
${r} = mylib.libfunc arg=param
Set Test Message libfunc returned ${r}
ref: http://robotframework.googlecode.com/hg/doc/libraries/BuiltIn.html#Set%20Test%20Message
Actualizaciones:
- nuevo enlace: http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Set%20Test%20Message
- el nuevo comando
Log To Console
envía a la consola en tiempo real (es decir, durante la ejecución de la prueba, en contraposición aSet Test Message
que solo se envía al final del caso de prueba).