zoukankan      html  css  js  c++  java
  • Pytest 学习(二十五)- 解决pytest参数化测试标题都一样问题

    一、前言

    使用参数化测试化后,allure的报告如下显示:

    源代码如下:

    # -*- coding: utf-8 -*-
    # @Time    : 2020/12/13 17:27
    # @Author  : longrong.lang
    # @FileName: test_param_title.py
    # @Software: PyCharm
    # @Cnblogs :https://www.cnblogs.com/longronglang
    import allure
    import pytest
    
    
    @pytest.fixture()
    def loginTo(request):
        # 传入参数,登录
        param = request.param
        print(f"
    userName : {param['userName']} ,passWord : {param['passWord']}")
        # 登录成功,返回
        return {"code": "0", "msg": "success!"}
    
    
    data = [{"userName": "jojo", "passWord": "1"},
            {"userName": "rongrong", "passWord": "1"},
            {"userName": "lilei", "passWord": "1"}
            ]
    
    
    @allure.story("讲述登录成功,返回成功的故事!")
    @allure.title("测试登录接口")
    @pytest.mark.parametrize("loginTo", data, indirect=True)
    def test_loginTo(loginTo):
        assert loginTo['msg'] == 'success!'
    
    

    从代码看出,其实就是@allure.title("测试登录接口"),写死的呀。

    二、如何解决

    那么怎么搞?

    这个问题问的好呀,动态的标题可以实现吗?必须能呀。

    方案一

    直接拼接loginTo
    示例代码如下:

    # -*- coding: utf-8 -*-
    # @Time    : 2020/12/13 17:27
    # @Author  : longrong.lang
    # @FileName: test_param_title.py
    # @Software: PyCharm
    # @Cnblogs :https://www.cnblogs.com/longronglang
    import allure
    import pytest
    
    
    @pytest.fixture()
    def loginTo(request):
        # 传入参数,登录
        param = request.param
        print(f"
    userName : {param['userName']} ,passWord : {param['passWord']}")
        # 登录成功,返回
        return {"code": "0", "msg": "success!"}
    
    
    data = [{"userName": "jojo", "passWord": "1"},
            {"userName": "rongrong", "passWord": "1"},
            {"userName": "lilei", "passWord": "1"}
            ]
    
    
    @allure.story("讲述登录成功,返回成功的故事!")
    @allure.title("测试登录接口 {loginTo}")
    @pytest.mark.parametrize("loginTo", data, indirect=True)
    def test_loginTo(loginTo):
        assert loginTo['msg'] == 'success!'
    
    

    allure报告

    这样会使得报告,更具可读性,直观一些

    方案二

    使用元祖来做参数化,加一个参数为标题
    示例代码如下:

    # -*- coding: utf-8 -*-
    # @Time    : 2020/12/13 17:27
    # @Author  : longrong.lang
    # @FileName: test_param_title.py
    # @Software: PyCharm
    # @Cnblogs :https://www.cnblogs.com/longronglang
    import allure
    import pytest
    
    data = [("jojo", "1", "登录成功的用例"),
            ("rongrong", "1", "登录成功的用例"),
            ("lilei", "1", "登录失败的用例")
            ]
    
    
    @allure.story("讲述登录成功,返回成功的故事!")
    @allure.title("测试登录接口 {title}")
    @pytest.mark.parametrize("userName,password,title", data)
    def test_loginTo(userName, password, title):
        print(userName + "	" + password + "	" + title)
    
    

    allure报告

    三、这种做法的优点

    • 可以自定义各式各样的标题
    • 单独一个值去维护标题值
    • 可读性比较好,容易维护
  • 相关阅读:
    嵌入式实验一:LED灯点亮
    [转] sql中的in与not in,exists与not exists的区别
    订单管理系统基本情况
    solaris系统分区及格式化
    百度超大网盘邀请码,点击可以获得额外的300M哦
    vb设置代理ip
    我看到一种防伪查询系统,叫做西门防伪防伪查询系统,不知道好不好用。
    零碎知识点整理
    初学WCF之消息模式3——双工模式
    HTTP 错误 500.21 Internal Server Error
  • 原文地址:https://www.cnblogs.com/longronglang/p/14129955.html
Copyright © 2011-2022 走看看