zoukankan      html  css  js  c++  java
  • pytest结合allure添加测试用例步骤(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'])

    执行命令:

    > 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():
        """
        这个步骤中调用nested_step_with_arguments(),并且传递参数
        :return:
        """
        nested_step_with_arguments(1, 'abc')
    
    
    @allure.step
    def nested_step_with_arguments(arg1, arg2):
        pass
    
    
    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

    查看测试报告展示效果:

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

    • @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 --alluredir=./report/result_data
    
    allure serve ./report/result_data

    查看测试报告展示效果:

      从上面的执行结果中可以看到,@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'])

    执行命令:

    pytest test_allure_step_in_fixture_from_conftest.py --alluredir=./report/result_data
    
    allure serve ./report/result_data

    查看测试报告展示效果:

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

  • 相关阅读:
    什么是序列化
    命令执行漏洞
    sql注入总结
    npm包之merge-descriptors
    Koa路由中间件之koa-router
    TypeScript声明文件(.d.ts)的使用
    TypeScript使用的简单记录
    TypeScript的安装、使用及配置
    Node websocket简单封装
    使用docker-compose配置mysql服务
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/14469137.html
Copyright © 2011-2022 走看看