Pytest_参数化(10)
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)的更多相关文章
- pytest_参数化parametrize
前言 pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 import pytest ...
- pytest_参数化3
import pytesttest_user_data=[ {'user':'linda','password':'8888'}, {'user':'servenruby','password':'1 ...
- pytest_参数化之3*3
import pytesttest_user_data1=[{'user':'linda','password':'888888'}, {'user':'servenruby','password': ...
- loadrunner12--学习中遇到疑问及解释
1.analysis里面,平均事务响应时间,平均事务响应时间+运行vuser,两个图的数据有区别是什么原因? 答: 请仔细查看以下两张图,其实两张图的数据是没有区别的. 之所以我们认为他们二者的数据有 ...
- badboy的录制和jmeter的使用
v Jmeter是什么 Apache Jmeter是Apache组织开发的基于Java的压力测试工具. Jmeter可以用于对服务器.网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析 ...
- testng入门教程10 TestNG参数化测试
在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...
- pytest.10.使用fixture参数化测试预期结果
From: http://www.testclass.net/pytest/test_api_with_expected_result/ 背景 接上一节v2ex网站的查看论坛节点信息的api. 我们在 ...
- lr文件下载脚本(文件参数化重命名)
http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...
- 接口测试SoapUI参数化
上次和大家一起完成了soapui的参数之一properties,今天我们一起交流另外一种参数化的方法,跟着一起练习,不懂不要紧,练习多了就会慢慢懂的: 1.准备excle(目前soapui只支持xls ...
随机推荐
- Jenkins配置java项目
目录 一.场景介绍 二.项目配置 配置插件 配置项目 一.场景介绍 在部署完Jenkins后,需要将现有的maven项目(Jenkis的开源插件),放到Jenkins上,用于自动化运维的改造. 项目地 ...
- 转:Android控件属性
Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,花费本人一个下午搞出来的,希望对其他人有用. 第一类:属性值为true或false android: ...
- 如何基于 Docker 快速搭建 Springboot + Mysql + Redis 项目
目录 前言 项目目录 搭建项目 1. docker安装启动mysql以及redis 1.1 安装mysql 1.2 安装redis 2. 初始化数据库 3.创建项目 4.初始化代码 4.1 全局配置文 ...
- [BUUCFT]PWN——pwn2_sctf_2016
pwn2_sctf_2016[整数溢出+泄露libc] 题目附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,看看大概的执行情况 32位ida载入,shift+f12检索程序里的字符串, ...
- Blazor Webassembly多标签页实现非iframe的实现
前面用iframe实现了多标签页,这次是不用iframe实现的多标签页.参考了一下Ant Design Blazor. 基本功能已经都实现了不论是标签滚动.激活.左移.右移.关闭其他,还是在内容页跳转 ...
- CF1082A Vasya and Book 题解
Content 给定 \(T\) 组数据,每组数据给出四个整数 \(n,x,y,d\).小 V 有一本 \(n\) 页的书,每次可以恰好翻 \(d\) 页,求从第 \(x\) 页恰好翻到第 \(y\) ...
- CF166A Rank List 题解
Content 有 \(n\) 个元素,第 \(i\) 个元素包含两个值 \(a_i,b_i\),按照以下规则排序: 如果对于 \(i\neq j\) 有 \(a_i\neq a_j\),则按照 \( ...
- CF628B New Skateboard 题解
Content 有一个长度为 \(n\) 的数字串 \(s\),求出有多少个子串能够被 \(4\) 整除. 数据范围:\(1\leqslant n\leqslant 3\times 10^5\). S ...
- LuoguP7041 [NWRRC2016]King's Heir 题解
Content 给出现在的日期,请从 \(n\) 个人当中选出一个人,使得他是所有成年人(\(\geqslant 18\) 岁的人)中年龄最小的. 数据范围:设日期为 \(yy/mm/dd\),则有 ...
- 使用.NET 6开发TodoList应用(5.1)——实现Repository模式
需求 经常写CRUD程序的小伙伴们可能都经历过定义很多Repository接口,分别做对应的实现,依赖注入并使用的场景.有的时候会发现,很多分散的XXXXRepository的逻辑都是基本一致的,于是 ...