Referencia de Allure Robot Framework
Estos son los atributos y métodos que puedes usar para integrar tus pruebas de Robot Framework con Allure Report.
En la mayoría de los casos, necesitas indicar a Allure Robot Framework que cierta propiedad debe asignarse al resultado de la prueba. La mayoría de las propiedades se pueden asignar en el archivo de suite, mediante la API de Decoradores o mediante la API de Ejecución.
Archivo de suite: usa las palabras clave
[Tags]
,Set Tags
oTest Tags
en los archivos de suite (ver Etiquetado de casos de prueba en la documentación de Robot Framework) para asignar diversos datos a las pruebas.Al usar la palabra clave
[Tags]
oTest Tags
, los datos se agregarán garantizados al resultado de la prueba, independientemente de cómo se ejecute la prueba.Al usar la palabra clave
Set Tags
, se recomienda colocarla lo más cerca posible del inicio de la prueba. De esta manera, los datos se agregarán incluso si la prueba falla temprano.Puedes usar ya sea dos puntos o un signo igual para separar el valor del nombre, por ejemplo,
allure.label.epic:Interfaz web
es idéntico aallure.label.epic=Interfaz web
.API de Decoradores: agrega un decorador de Python a un método que implementa una palabra clave de Robot Framework. Al usar este enfoque, los datos se agregarán garantizados, independientemente de cómo se ejecute la palabra clave.
API de Ejecución: usa las funciones de Allure para agregar datos al resultado de la prueba durante la ejecución de una palabra clave. Este enfoque permite construir los datos dinámicamente.
Ten en cuenta que se recomienda llamar a las funciones de Allure lo más cerca posible del inicio de la implementación, por ejemplo, en las primeras líneas de la implementación de la primera palabra clave. De esta manera, los datos se agregarán incluso si la prueba falla temprano.
Metadatos
Asigna la descripción, enlaces y otros metadatos a una prueba.
Descripción
[Documentation]
Para la descripción, Allure Robot Framework usa el [Documentation]
del escenario en el archivo de suite.
Se permite el formato Markdown. Cualquier formato HTML, si está presente, será eliminado por razones de seguridad.
*** Test Cases ***
Test Authentication
[Documentation] This test attempts to log into the website.
# ...
Owner
[Tags] allure.label.owner:⟨VALUE⟩
@allure.label('owner', value: str)
allure.dynamic.label('owner', value: str)
Establece el propietario de la prueba.
*** Test Cases ***
Test Authentication
[Tags] allure.label.owner:John Doe
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.label('owner', 'John Doe')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.label('owner', 'John Doe')
...
Tag
[Tags]
@allure.tag(*tags: str)
allure.dynamic.tag(*tags: str)
Establece los tags de la prueba.
Cualquier tag nativo de Robot Framework se agrega automáticamente a la lista de tags de la prueba, a menos que coincida con uno de los patrones conocidos para otras etiquetas.
*** Test Cases ***
Test Authentication
[Tags] UI Authentication
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.tag('UI')
@allure.tag('Authentication')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.tag('UI')
allure.dynamic.tag('Authentication')
...
Severity
[Tags] allure.label.severity:⟨VALUE⟩
@allure.severity(severity_level: str)
allure.dynamic.severity(severity_level: str)
Establece la severidad de la prueba.
Los valores permitidos son: “trivial”, “minor”, “normal”, “critical”, y “blocker”.
*** Test Cases ***
Test Authentication
[Tags] allure.label.severity:critical
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.severity('critical')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.severity('critical')
...
Label
[Tags] allure.label.⟨NAME⟩:⟨VALUE⟩
@allure.label(label_type: str, *labels: str)
allure.dynamic.label(label_type: str, *labels: str)
Establece una etiqueta arbitraria para la prueba. Esta es la implementación subyacente para muchas otras funciones de Allure.
*** Test Cases ***
Test Authentication
[Tags]
... allure.label.layer:web
... allure.label.owner:eroshenkoam
... allure.label.page:/{org}/{repo}/authentication
... allure.label.jira:AE-2
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.label('layer', 'web')
@allure.label('owner', 'eroshenkoam')
@allure.label('page', '/{org}/{repo}/authentication')
@allure.label('jira', 'AE-2')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.label('layer', 'web')
allure.dynamic.label('owner', 'eroshenkoam')
allure.dynamic.label('page', '/{org}/{repo}/authentication')
allure.dynamic.label('jira', 'AE-2')
...
Allure ID (Allure TestOps)
[Tags] allure.as_id:⟨VALUE⟩
@allure.id(id: str)
Establece el ID de la prueba.
*** Test Cases ***
Test Authentication
[Tags] allure.as_id:123
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.id('123')
def test_authentication():
...
Link
[Tags] allure.link:⟨URL⟩
[Tags] allure.link.⟨NAME⟩:⟨URL⟩
[Tags] allure.issue:⟨URL⟩
[Tags] allure.issue.⟨NAME⟩:⟨URL⟩
[Tags] allure.tms:⟨URL⟩
[Tags] allure.tms.⟨NAME⟩:⟨URL⟩
allure.dynamic.link(url: str, link_type: str = LinkType.LINK, name: str = None)
allure.dynamic.issue(url: str, name: str = None)
allure.dynamic.testcase(url: str, name: str = None)
Agrega un enlace relacionado con la prueba.
En un archivo de suite, agrega una de las etiquetas mencionadas anteriormente. Cada etiqueta indica un tipo de enlace diferente (
link
,issue
otms
), lo cual afecta el ícono mostrado en el informe de la prueba.En tu código Python, usa la función
allure.dynamic.link()
con un argumento opcionallink_type
o sus versiones abreviadas para los tipos de enlaceissue
ytms
.
*** Test Cases ***
Test Authentication
[Tags]
... allure.link.MyWebsite:https://dev.example.com/
... allure.issue.UI-123:https://issues.example.com/UI-123
... allure.tms.TMS-456:https://tms.example.com/TMS-456
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.link('https://dev.example.com/', name='Website')
allure.dynamic.issue("'https://issues.example.com'/UI-123", name='UI-123')
allure.dynamic.testcase('https://tms.example.com/TMS-456', name='TMS-456')
...
Jerarquía basada en el comportamiento
[Tags] allure.label.epic:⟨VALUE⟩
[Tags] allure.label.feature:⟨VALUE⟩
[Tags] allure.label.story:⟨VALUE⟩
@allure.epic(*epics: str)
@allure.feature(*features: str)
@allure.story(*stories: str)
allure.dynamic.epic(*epics: str)
allure.dynamic.feature(*features: str)
allure.dynamic.story(*stories: str)
Asigna nombres de epics, features o user stories a una prueba, como parte de la jerarquía basada en el comportamiento de Allure.
Cada función admite establecer uno o más valores a la vez.
*** Test Cases ***
Test Authentication
[Tags]
... allure.label.epic:Web interface
... allure.label.feature:Essential features
... allure.label.story:Authentication
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.epic('Web interface')
@allure.feature('Essential features')
@allure.story('Authentication')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.epic('Web interface')
allure.dynamic.feature('Essential features')
allure.dynamic.story('Authentication')
...
Jerarquía basada en la suite
[Tags] allure.label.parentSuite:⟨VALUE⟩
[Tags] allure.label.suite:⟨VALUE⟩
[Tags] allure.label.subSuite:⟨VALUE⟩
@allure.parent_suite(parent_suite_name: str)
@allure.suite(suite_name: str)
@allure.sub_suite(sub_suite_name: str)
allure.dynamic.parent_suite(parent_suite_name: str)
allure.dynamic.suite(suite_name: str)
allure.dynamic.sub_suite(sub_suite_name: str)
Asigna los nombres de suite principal, suite o sub-suite para una prueba, como parte de la jerarquía basada en suite de Allure.
*** Test Cases ***
Test Authentication
[Tags]
... allure.label.parentSuite:Web interface
... allure.label.suite:Essential features
... allure.label.subSuite:Authentication
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.parent_suite('Web interface')
@allure.suite('Essential features')
@allure.sub_suite('Authentication')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.parent_suite('Web interface')
allure.dynamic.suite('Essential features')
allure.dynamic.sub_suite('Authentication')
...
Jerarquía basada en paquetes
[Tags] allure.label.package:⟨VALUE⟩
[Tags] allure.label.testMethod:⟨VALUE⟩
Asigna los nombres del paquete y el método de prueba, como parte de la jerarquía basada en paquetes de Allure.
*** Test Cases ***
Test Authentication
[Tags]
... allure.label.package:org.example
... allure.label.testMethod:test_authentication()
# ...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
@allure.label('package', 'org.example')
@allure.label('testMethod', 'test_authentication()')
def test_authentication():
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
allure.dynamic.label('package', 'org.example')
allure.dynamic.label('testMethod', 'test_authentication()')
...
Pasos de prueba
@allure.step(title: str)
with allure.step(title: str)
Define un sub-paso de prueba dentro del paso actual.
Existen dos formas de definir un sub-paso.
Sub-pasos decorados
Define una función o un método que contenga un sub-paso de prueba y decóralo con
@allure.step()
.Si la función acepta argumentos, estos se mostrarán como parámetros a nivel de paso en el informe de prueba. También puedes incluir sus valores en el título del sub-paso mediante campos de reemplazo. Un campo de reemplazo es un nombre de parámetro delimitado por llaves
{}
, como lo permite el método estándarstr.format()
.Sub-pasos de contexto
Escribe un sub-paso de prueba en el lugar, pero usa la sentencia
with allure.step()
para crear su contexto.
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
navigate_to_the_website()
for login, password in [['johndoe', 'qwerty'],
['janedoe', 'pass123']]:
try_to_authenticate(login, password)
@allure.step('Navigate to the website')
def navigate_to_the_website():
...
@allure.step('Try to authenticate as {login}')
def try_to_authenticate(login, password):
...
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
with allure.step('Navigate to the website'):
...
for login, password in [['johndoe', 'qwerty'],
['janedoe', 'pass123']]:
with allure.step(f'Try to authenticate as {login}'):
...
Pruebas parametrizadas
Cuando pasas argumentos a una palabra clave en el archivo de suite, Allure los muestra como parámetros para el paso correspondiente en el informe de prueba. No se requiere configuración adicional.
Ten en cuenta que debido a un detalle de implementación, Allure Report solo puede mostrar los parámetros de la palabra clave de la misma manera en que se dan en la línea correspondiente. Esto significa que si el argumento de una palabra clave es una variable (por ejemplo, un valor producido por el bucle FOR
de Robot Framework), Allure Report mostrará el nombre de la variable, no el valor real que tiene en tiempo de ejecución.
El siguiente ejemplo evita el problema implementando una palabra clave de usuario con argumentos y luego usándola con valores literales sin bucles.
*** Keywords ***
Try To Authenticate
[Arguments] ${login} ${password}
Log To Console Trying to authenticate with ${login} and ${password}...
# ...
*** Test Cases ***
Test Authentication
Try To Authenticate [email protected] qwerty
Try To Authenticate [email protected] pass123
Archivos adjuntos
Allure Robot Framework proporciona varias formas de agregar archivos adjuntos al paso actual.
Adjuntar contenido desde variables
Attach ⟨CONTENT⟩
Attach ⟨CONTENT⟩ name=⟨NAME⟩ attachment_type=⟨TYPE⟩
allure.attach(body, name=None, attachment_type="text/plain", extension="attach")
Agrega body
como un archivo adjunto al resultado de la prueba bajo el nombre dado (por defecto, un string pseudo-aleatorio único). El body
debe ser de tipo bytes
o str
.
Para asegurar que el navegador web del lector mostrará los archivos adjuntos correctamente, se recomienda especificar el tipo de cada archivo adjunto. Hay dos formas de hacerlo:
Pasa el tipo de medio del contenido como
attachment_type
y, opcionalmente, una extensión de archivo comoextension
.Algunos tipos de medios populares son
image/png
eimage/jpeg
para capturas de pantalla y otras imágenes,application/json
para datos JSON ytext/plain
para archivos de texto. El tipo de medio afecta cómo se mostrará el dato en el informe de prueba, mientras que la extensión de archivo se agrega al nombre del archivo cuando el usuario quiera guardar el archivo.Pasa un valor de la clase
allure.attachment_type
comoattachment_type
.Esto establecerá automáticamente el tipo de medio y la extensión de archivo apropiada.
*** Settings ***
Library AllureLibrary
Library RequestsLibrary
*** Test Cases ***
Test Authentication
# ...
${response}= GET https://example.com/image.png
Attach ${response.content}
... name=Image attachment_type=PNG
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
...
png_bytes = requests.get('https://example.com/image.png').content
allure.attach(png_bytes, name='img', attachment_type=allure.attachment_type.PNG)
Leer archivos adjuntos desde archivos
Attach File ⟨FILE⟩
Attach File ⟨FILE⟩ name=⟨NAME⟩ attachment_type=⟨TYPE⟩
allure.attach.file(source, name=None, attachment_type=None, extension=None)
Lo mismo que Adjuntar contenido desde variables, pero el contenido se carga desde un archivo existente.
*** Settings ***
Library AllureLibrary
*** Test Cases ***
Test Authentication
# ...
Attach File /path/to/image.png
... name=Image attachment_type=PNG
import allure
from robot.api.deco import keyword
@keyword('Test Authentication')
def test_authentication():
...
allure.attach.file('/path/to/image.png', name='img', attachment_type=allure.attachment_type.PNG)
Adjuntar mensajes de registro
Por defecto, Allure Robot Framework crea automáticamente un archivo adjunto de texto que contiene los mensajes de registro que ocurrieron durante un sub-paso dado.
Este comportamiento puede cambiarse, consulta la variable de entorno ALLURE_MAX_STEP_MESSAGE_COUNT
.