一、前言
上篇文章有提及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}")
@H_301_11@运行结果如下:
说明:
仅当 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",{"username": "lilei","password": "123456"}] @pytest.mark.parametrize("getlogins",indirect=True) def test_getlogin(getlogins): print(f"用户名:{getlogins['username']} 密码:{getlogins['password']}")
@H_301_11@运行结果如下:
四、一个装饰器加多个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",indirect=True) def test_getUserinfo(getusername,getpassword): print(f"用户名:{getusername} 密码:{getpassword}")
@H_301_11@运行结果如下:
五、多个装饰器+多个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}")
@H_301_11@运行结果如下:
细心的同学可能会发现,这块和上篇文章第4小结一样,多个参数的混合使用,类似笛卡尔积的意思。
注意:
当多个参数时,需要用 变量=request.param来接收参数,否则不好用哦。