• Pytest学习(十)


    一、前言

    上篇文章有提及pytest.mark.parametrize的使用,这次在此基础上结合fixture和request再做个延伸。

    二、传单个参数

    即一个参数一个值,示例代码如下:

    # 传单个参数
    @pytest.fixture()
    def getuser(request):
        user = request.param
        print(f" 获取用户: {user}")
        return user
    
    
    data = ["lilei", "jojo", "hanmeimei"]
    # 用英文哈,中文会被加密
    ids = [f" mark input :{user} " for user in data]
    
    
    @pytest.mark.parametrize("getuser", data, ids=ids, indirect=True)
    class TestClass(object):
        def test_getuser(self, getuser):
            print(f"输出用户信息:{getuser}")
    

    运行结果如下:

    说明:
    仅当 indirect=True,getuser才会当成一个函数去执行,而不是一个参数,并将data当做参数传入函数,test_getuser(self, getuser),这里的getuser是获取fixture返回的值。

    三、传多个参数

    即结合字典的使用,示例代码如下:

    # 传多个参数
    @pytest.fixture()
    def getlogins(request):
        param = request.param
        print(f" 获取用户名: {param['username']} 获取密码:{param['password']}")
        return param
    
    
    data = [{"username": "jojo", "password": "123456"},
            {"username": "hanmeimei", "password": "123456"},
            {"username": "lilei", "password": "123456"}]
    
    
    @pytest.mark.parametrize("getlogins", data, indirect=True)
    def test_getlogin(getlogins):
        print(f"用户名:{getlogins['username']} 密码:{getlogins['password']}")
    
    

    运行结果如下:

    四、一个装饰器加多个fixture

    一个装饰器的意思就是,数据源是一个,这次我们用元祖来做数据源,示例代码如下:

    # 一个装饰器+多个fixture
    @pytest.fixture(scope="module")
    def getusername(request):
        username = request.param
        print(f" username is {username}")
        return username
    
    
    @pytest.fixture(scope="module")
    def getpassword(request):
        password = request.param
        print(f" password is {password}")
        return password
    
    
    data = [("jojo", "1"), ("lilei", "123654")]
    
    
    @pytest.mark.parametrize("getusername,getpassword", data, indirect=True)
    def test_getUserinfo(getusername, getpassword):
        print(f"用户名:{getusername} 密码:{getpassword}")
    

    运行结果如下:

    五、多个装饰器+多个fixture

    就是多个数据源,这次用list来做演示,示例代码如下:

    # 多个装饰器+多个fixture
    @pytest.fixture()
    def users(request):
        user = request.param
        print(f" 用户名:{user}")
        return user
    
    
    @pytest.fixture()
    def pwds(request):
        pwd = request.param
        print(f" 密码:{pwd}")
        return pwd
    
    
    data1 = ["lilei", "hameimei", "jojo"]
    data2 = ["1", "2", "3"]
    
    
    @pytest.mark.parametrize("users", data1, indirect=True)
    @pytest.mark.parametrize("pwds", data2, indirect=True)
    def test_getuserinfo(users, pwds):
        print(f"用户名为:{users} 密码为:{pwds}")
    

    运行结果如下:

    细心的同学可能会发现,这块和上篇文章第4小结一样,多个参数的混合使用,类似笛卡尔积的意思。
    注意:
    当多个参数时,需要用 变量=request.param来接收参数,否则不好用哦。

    优秀不够,你是否无可替代

    软件测试交流QQ群:721256703,期待你的加入!!

    欢迎关注我的微信公众号:软件测试君


  • 相关阅读:
    实现 (5).add(3).minus(2) 功能
    vue兄弟组件传值的三种方法
    Web渗透测试思路整理
    PHP代码审计基础
    简单易用,用Powershell劫持Windows系统快捷键
    javascript脚本混淆
    秒杀系统架构优化思路
    什么是OOP
    一分钟了解负载均衡的一切
    MVC
  • 原文地址:https://www.cnblogs.com/longronglang/p/13978940.html
Copyright © 2020-2023  润新知