pytest参数化有两种方式:

  • mark的parametrize标记:@pytest.mark.parametrize(变量名,变量值),其中变量值类型为列表、元组或其它可迭代对象。
  • fixture的params参数:@pytest.fixture(params=变量值),其中变量值类型为列表、元组或其它可迭代对象。

接下来以上面两种方式演示参数化的多种情况。

一、单变量参数化

演示代码如下:

import pytest

# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=(1, 2))
def login_data(request):
return request.param class TestLogin: # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
@pytest.mark.parametrize("data", ["a", "b"])
def test_login_001(self, data):
print("执行用例001")
print(f"调用参数-{data}") # 调用被@pytest.fixture装饰的函数
def test_login_002(self, login_data):
print("执行用例002")
print(f"调用参数-{login_data}")

执行结果如下:

二、多变量参数化

演示代码如下:

import pytest

# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=((1, 2), (3, 4)))
def login_data(request):
return request.param class TestLogin: # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
@pytest.mark.parametrize("data1, data2", [("a1", "a2"), ("b1", "b2")])
def test_login_001(self, data1, data2):
print("\n执行用例001")
print(f"调用参数-{data1}-{data2}") # 调用被@pytest.fixture装饰的函数
def test_login_002(self, login_data):
print("\n执行用例002")
print(f"调用参数-{login_data[0]}-{login_data[1]}") # parametrize,也可以像fixture用一个变量名使用索引的方式取值。
@pytest.mark.parametrize("data", [("a1", "a2"), ("b1", "b2")])
def test_login_003(self, data):
print("\n执行用例001")
print(f"调用参数-{data[0]}-{data[1]}")

执行结果如下:

三、字典变量参数化

演示代码如下:

import pytest

# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=({"username": "aaa", "password": 111}, {"username": "bbb", "password": 222}))
def login_data(request):
return request.param class TestLogin: # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
@pytest.mark.parametrize("data", [{"username": "ccc", "password": 333}, {"username": "ddd", "password": 444}])
def test_login_001(self, data):
print("\n执行用例001")
print(f"调用参数-{data['username']}-{data['password']}") # 调用被@pytest.fixture装饰的函数
def test_login_002(self, login_data):
print("\n执行用例002")
print(f"调用参数-{login_data['username']}-{login_data['password']}")

执行结果如下:

四、多次参数化

多次参数化会产生像笛卡尔积一样的结果。

演示代码如下:

import pytest

# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=({"username": "aaa", "password": 111}, {"username": "bbb", "password": 222}))
def login_data(request):
return request.param @pytest.fixture(params=["xxs://xxx.com", "dds://ddd.com"])
def env_data(request):
return request.param class TestLogin: # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
@pytest.mark.parametrize("data1", [{"username": "ccc", "password": 333}, {"username": "ddd", "password": 444}])
@pytest.mark.parametrize("data2", ["var1", "var2"])
def test_login_001(self, data1, data2):
print("\n执行用例001")
print(f"调用参数-{data1['username']}-{data1['password']}")
print(f"调用参数-{data2}") # 调用被@pytest.fixture装饰的函数
def test_login_002(self, login_data, env_data):
print("\n执行用例002")
print(f"调用参数-{login_data['username']}-{login_data['password']}")
print(f"调用参数{env_data}")

执行结果如下:

Pytest_参数化(10)的更多相关文章

  1. pytest_参数化parametrize

    前言 pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 import pytest ...

  2. pytest_参数化3

    import pytesttest_user_data=[ {'user':'linda','password':'8888'}, {'user':'servenruby','password':'1 ...

  3. pytest_参数化之3*3

    import pytesttest_user_data1=[{'user':'linda','password':'888888'}, {'user':'servenruby','password': ...

  4. loadrunner12--学习中遇到疑问及解释

    1.analysis里面,平均事务响应时间,平均事务响应时间+运行vuser,两个图的数据有区别是什么原因? 答: 请仔细查看以下两张图,其实两张图的数据是没有区别的. 之所以我们认为他们二者的数据有 ...

  5. badboy的录制和jmeter的使用

    v  Jmeter是什么 Apache Jmeter是Apache组织开发的基于Java的压力测试工具. Jmeter可以用于对服务器.网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析 ...

  6. testng入门教程10 TestNG参数化测试

    在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...

  7. pytest.10.使用fixture参数化测试预期结果

    From: http://www.testclass.net/pytest/test_api_with_expected_result/ 背景 接上一节v2ex网站的查看论坛节点信息的api. 我们在 ...

  8. lr文件下载脚本(文件参数化重命名)

    http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...

  9. 接口测试SoapUI参数化

    上次和大家一起完成了soapui的参数之一properties,今天我们一起交流另外一种参数化的方法,跟着一起练习,不懂不要紧,练习多了就会慢慢懂的: 1.准备excle(目前soapui只支持xls ...

随机推荐

  1. 3.3 GO字符串处理

    strings方法 index 判断子字符串或字符在父字符串中出现的位置(索引)Index 返回字符串 str 在字符串 s 中的索引( str 的第一个字符的索引),-1 表示字符串 s 不包含字符 ...

  2. springboot-MVC 过滤器使用

    一.前言 一下代码以SSO用户登录列子代码.完整代码https://gitee.com/xuxueli0323/xxl-sso 二.使用 2.1 创建过滤器 创建一个过滤器,实现Filter 接口 p ...

  3. Java动态脚本Groovy,高级啊!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚 ...

  4. gitlab 集成openldap

    Setting up LDAP sign-in If you have an LDAP directory service such as Active Directory, you can conf ...

  5. ubuntu 16.04下的fastadmin安装指南

    此篇博客转载于fastadmin论坛,方便自己看转到了博客里 说明文档不多,特制作一个,方便大家交流使用Ubuntu 16.04 安装fastadmin指南本文因考虑到大多数人员,习惯性在window ...

  6. [BUUCTF]REVERSE——[GKCTF2020]BabyDriver

    [GKCTF2020]BabyDriver 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,看到提示flag是md5(input),下方还看到了类似迷宫的字符串 找到关 ...

  7. pwnable_start & ciscn_2019_es_2 & ez_pz_hackover_2016 & pwn2_sctf_2016

    花了两天时间做了这四道题,感觉收获很多.但是这种收获感觉写文章写不出自己的思路,就录制了一个视频. pwnable_start 这道题考察了系统调用,shellcode的编写,和动态调试的知识. ci ...

  8. 资源分享 | PyTea:不用运行代码,静态分析pytorch模型的错误

    ​  前言  ​​​​​​​本文介绍一个Pytorch模型的静态分析器 PyTea,它不需要运行代码,即可在几秒钟之内扫描分析出模型中的张量形状错误.文末附使用方法. 本文转载自机器之心 编辑:CV技 ...

  9. 深入理解Akka Actor模型

    Carl Hewitt 在1973年对Actor模型进行了如下定义:"Actor模型是一个把'Actor'作为并发计算的通用原语". Actor是异步驱动,可以并行和分布式部署及运 ...

  10. c++之折半查找(二分查找)递归与非递归的实现

    递归实现 template<typename T> int binary_search2(const T arr[], const int left, const int right, c ...