(二)pytest自动化测试框架之添加测试用例步骤(@allure.step())

前言

在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。

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'])

执行命令:

  1. > pytest test_allure_step.py --alluredir=./report/result_data

  2. > allure serve ./report/result_data

查看测试报告展示效果:

image

从报告中可以看到,我们事先通过@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'])

执行命令:

  1. pytest test_allure_step_nested.py --alluredir=./report/result_data

  2. allure serve ./report/result_data

查看测试报告展示效果:

image

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

  • @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'])

执行命令:

  1. pytest test_allure_step_with_placeholder.py --alluredir=./report/result_data

  2. allure serve ./report/result_data

查看测试报告展示效果:

image

从上面的执行结果中可以看到,@allure.step()是支持输入描述的,并且支持通过占位符向描述中传递参数。

在conftest.py文件中定义@allure.step

conftest.py文件:


# 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'])

执行命令:

  1. pytest test_allure_step_in_fixture_from_conftest.py --alluredir=./report/result_data

  2. allure serve ./report/result_data

查看测试报告展示效果:

从运行结果中可以看到,在fixture中定义的step会在setup和teardown单独以树形结构展示出来。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值