• 参数化(parametrize)allure用例描述的两种方式 第二种重点


    第一种方式:ids

    1.参数化(pytest.mark.parametrize)

    # test_a.py
    import pytest
    import allure
    
    
    
    def login(username, password):
        '''登录'''
        print("输入账号:%s" % username)
        print("输入密码:%s" % password)
        # 返回
        return {"code": 0, "msg": "success!"}
    
    
    # 测试数据
    test_datas = [
        ({"username": "yoyo1", "password": "123456"}, "success!"),
        ({"username": "yoyo2", "password": "123456"}, "failed!"),
        ({"username": "yoyo3", "password": "123456"}, "success!"),
    ]
    
    
    @allure.story("登录用例")
    @pytest.mark.parametrize("test_input,expected",
                             test_datas
                             )
    def test_login(test_input, expected):
        '''测试登录用例'''
        # 获取函数返回结果
        result = login(test_input["username"], test_input["password"])
        # 断言
        assert result["msg"] == expected

    运行用例

    > pytest --alluredir ./report test_a.py
    > allure serve ./report

     这样生成的报告在用例列表里面并不能很友好的展示出每个用例的执行场景,只知道哪个用例报错了。
    于是需要对每个用例加上描述,加一个 ids 参数

    2.ids参数使用

    在用例部分代码里面加个 ids 参数,用于描述每个用例的运行场景。

    @allure.story("登录用例")
    @pytest.mark.parametrize("test_input,expected",
                             test_datas,
                             ids=[
                                 "输入正确账号,密码,登录成功",
                                 "输入错误账号,密码,登录失败",
                                 "输入正确账号,密码,登录成功",
                             ]
                             )
    def test_login(test_input, expected):
        '''测试登录用例'''
        # 获取函数返回结果
        result = login(test_input["username"], test_input["password"])
        # 断言
        assert result["msg"] == expected

    第二种方式:allure.title

    @allure.title("用例描述,测试输入:{test_input}")

    在 allure_pytest/utils.py 源码里面可以找到对应的代码

    # allure_pytest/utils.py
    
    def allure_name(item, parameters):
        name = escape_name(item.name)
        title = allure_title(item)
        return title.format(**parameters) if title else name

    当没有加allure.title()时候,用例的描述就是 item.name 值(也就是上面的 ids 用例的名称),
    如果加了allure.title(),那么用例的描述就是添加的title值,这两个地方取其中的一个。

    重点来了:把用例描述当成参数传给测试用例

    import pytest
    import allure
    # 作者:上海-悠悠 QQ交流群:779429633
    
    def login(username, password):
        '''登录'''
        print("输入账号:%s" % username)
        print("输入密码:%s" % password)
        # 返回
        return {"code": 0, "msg": "success!"}
    
    
    # 测试数据
    test_datas = [
        ({"username": "yoyo1", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),
        ({"username": "yoyo2", "password": "123456"}, "failed!", "输入错误账号,密码,登录失败"),
        ({"username": "yoyo3", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),
    ]
    
    
    @allure.story("登录用例")
    @allure.title("{title}")
    @pytest.mark.parametrize("test_input,expected,title",
                             test_datas
                             )
    def test_login(test_input, expected, title):
        '''测试登录用例'''
        # 获取函数返回结果
        result = login(test_input["username"], test_input["password"])
        # 断言
        assert result["msg"] == expected

  • 相关阅读:
    Java8中的LocalDateTime工具类
    纳德拉再造微软:市值如何重回第一阵营(思维确实变了,不再是以windows为中心,拥抱其它各种平台,敢在主战场之外找到适合自己的新战场)
    马化腾,直接把360做特了!(人从一生下来牙牙学语开始,就在模仿,关键在于在已有的基础上进行改进,提高用户体验!)
    RISC-V首度被我国列入扶持对象,上海已成RISC-V重要“据点”
    Oracle高水位线
    oracle优化:避免全表扫描
    oracle中in和exists的区别
    分库、分表
    missing required source folder
    varnish页面缓存服务
  • 原文地址:https://www.cnblogs.com/bigbox/p/13138552.html
Copyright © 2020-2023  润新知