with test number loglevel framework else curdir python frameworks automated-tests robotframework

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:

  1. 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.

  2. Escriba sus mensajes a sys.__stdout__ en Python. Robot solo intercepta sys.stdout y sys.stderr y deja sys.__stdout__ (y sys.__stderr__ ) solo (como deberían hacerlo todos los programas de Python). Estos mensajes solo terminan en la consola, pero también puede escribirlos en sys.stdout para obtenerlos también en el archivo de registro.



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:

  1. nuevo enlace: http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Set%20Test%20Message
  2. 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 a Set Test Message que solo se envía al final del caso de prueba).