本文介绍: 在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。allure提供的装饰器@allure.step()是allure测试报告框架非常有用的功能,它能帮助我们在测试用例中对测试步骤进行详细的描述。
前言
在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。
allure提供的装饰器@allure.step()是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 --alluredir=./report/result_data
> allure serve ./report/result_data
从报告中可以看到,我们事先通过@allure.step()定义好的步骤都展示在测试用例test_buy_good()下了。
@allure.step支持嵌套,step中调用step
# file_name: steps.py
import allure
@allure.step
def passing_step_02():
print("执行步骤02")
pass
测试用例:
# file_name: test_allure_step_nested.py
import pytest
import allure
from .steps 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 --alluredir=./report/result_data
allure serve ./report/result_data
@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 --alluredir=./report/result_data
allure serve ./report/result_data
从上面的执行结果中可以看到,@allure.step()是支持输入描述的,并且支持通过占位符向描述中传递参数。
在conftest.py文件中定义@allure.step
# file_name: conftest.py
import pytest
import allure
@pytest.fixture()
def fixture_with_conftest_step():
conftest_step()
@allure.step("这是一个在conftest.py文件中的step")
def conftest_step():
pass
测试用例:
# file_name: test_allure_step_in_fixture_from_conftest.py
import pytest
import allure
@allure.step
def passed_step():
pass
def test_with_step_in_fixture_from_conftest(fixture_with_conftest_step):
passed_step()
if __name__ == '__main__':
pytest.main(['-s', 'test_allure_step_in_fixture_from_conftest.py'])
执行命令:
pytest test_allure_step_in_fixture_from_conftest.py --alluredir=./report/result_data
allure serve ./report/result_data
从运行结果中可以看到,在fixture中定义的step会在setup和teardown单独以树形结构展示出来。
原文地址:https://blog.csdn.net/m0_68405758/article/details/134539140
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_4525.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。