在这里插入图片描述

前言

在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。在allure提供给我们的众多装饰器中,就有一个非常符合我们的需求,它就是allure.step(),它可以帮助我们在测试用例中对测试步骤进行详细的描述,本文就来介绍一下它的详细使用。

使用示例

假如我们现在有一个购物场景,步骤依次是:1.登录;2.浏览商品;3.将商品加入到购物车中;4.下单;5.支付订单;我们的测试用例如下:

# file_name: test_allure_step.py


import pytest
import allure


@allure.step
def login():
    """
    执行登录逻辑
    :return:
    """
    print("执行登录逻辑")


@allure.step
def scan_good():
    """
    执行浏览商品逻辑
    :return:
    """
    print("执行浏览商品逻辑")


@allure.step
def add_good_to_shopping_car():
    """
    将商品添加到购物车
    :return:
    """
    print("将商品添加到购物车")


@allure.step
def generator_order():
    """
    生成订单
    :return:
    """
    print("生成订单")


@allure.step
def pay():
    """
    支付订单
    :return:
    """
    print("支付订单")


def test_buy_good():
    """
    测试购买商品:
    步骤1:登录
    步骤2:浏览商品
    步骤3:将商品加入到购物车中
    步骤4:下单
    步骤5:支付
    :return:
    """
    login()
    scan_good()
    add_good_to_shopping_car()
    generator_order()
    pay()

    with allure.step("断言"):
        assert 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_allure_step.py'])

运行如下命令,执行测试,生成并打开测试报告:

pytest test_allure_step.py --clean-alluredir --alluredir=./results

allure serve results

生成的测试报告如下图:

在这里插入图片描述
从报告中可以看到,我们事先通过@allure.step()定义好的步骤都展示在测试用例test_buy_good()下了。

嵌套,step中调用step

首先,我们先创建一个step.py,内容如下:

# file_name: steps.py


import allure


@allure.step
def passing_step_02():
    print("执行步骤02")
    pass

测试用例内容如下:

import pytest
import allure

from allure_demo.step import passing_step_02




@allure.step
def passing_step_01():
    print("执行步骤01")
    pass


@allure.step
def step_with_nested_steps():
    """
    这个步骤中调用nested_step()
    :return:
    """
    nested_step()

@allure.step
def nested_step_with_arguments(arg1, arg2):
    pass

@allure.step
def nested_step():
    """
    这个步骤中调用nested_step_with_arguments(),并且传递参数
    :return:
    """
    nested_step_with_arguments(1, 'abc')


def test_with_imported_step():
    """
    测试@allure.step()支持调用从外部模块导入的step
    :return:
    """
    passing_step_01()
    passing_step_02()


def test_with_nested_steps():
    """
    测试@allure.step()支持嵌套调用step
    :return:
    """
    passing_step_01()
    step_with_nested_steps()
    passing_step_02()


if __name__ == '__main__':
    pytest.main(['-s', 'test_allure_step_nested.py'])

执行如下命令,即可运行测试及生成测试报告:

pytest test_allure_step_nested.py --clean-alluredir --alluredir=./results 
allure serve results 

测试报告如下图所示:

在这里插入图片描述

从上面的结果中可以看到:

  • @step可以先保存到其他模块中,在测试用例中需要用到的时候导入就可以了;
  • @step也支持在一个step中嵌套调用其他的step;嵌套的形式在测试报告中以树形展示出来了。

@allure.step添加描述传递参数

示例代码如下:

# file_name: test_allure_step_with_placeholder.py


import pytest
import allure


@allure.step('这是一个带描述语的step,并且通过占位符传递参数:positional = "{0}",keyword = "{key}"')
def step_title_with_placeholder(arg1, key=None):
    pass


def test_step_with_placeholder():
    step_title_with_placeholder(1, key="something")
    step_title_with_placeholder(2)
    step_title_with_placeholder(3, key="anything")


if __name__ == '__main__':
    pytest.main(['-s', 'test_allure_step_with_placeholder.py'])

运行如下命令,执行测试并生成报告:

pytest test_allure_step_with_placeholder.py --clean-alluredir --alluredir=./results

allure serve results 

生成的测试报告如下图所示:

在这里插入图片描述

总结

本文主要介绍了使用allure.step()添加测试用例步骤的方法,完善的步骤描述对于我们更好地理解测试用例,创建出清晰、详细的测试报告,帮助团队更好地理解测试执行过程,从而更容易地进行问题定位和修复。希望本文可以帮到大家!


霍格沃兹测试学院
44 声望27 粉丝