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. 【Linux】【Commands】文本查看类

    分屏查看命令:more和less more命令: more FILE 特点:翻屏至文件尾部后自动退出: less命令: less FILE head命令: 查看文件的前n行: head [option ...

  2. Nginx 1.9.7.2 + PHP 5.6.18(FastCGI)在CentOS Linux下的编译安装

    本文参考张宴的Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]完成.所有操作命令都在CentOS 6.x 64位操作系统下实践 ...

  3. 理解css中的 content:" " 是什么意思

    css中的属性是插入生成的内容,它一般与伪元素:befor和 :after 配合使用. content:"." 就表示在需要的地方插入"." 注意:如果已经规定 ...

  4. 机器学习——sklearn中的API

    import matplotlib.pyplot as pltfrom sklearn.svm import SVCfrom sklearn.model_selection import Strati ...

  5. Linux——配置主从数据库服务

    主从数据库 Linux中,数据库服务有三种:互为主主,互为主从,一主一从(主从数据库) 互为主主:数据库时时更新 互为主从:数据库达到一定的的容量再更新 一主一从:在主数据库上面创建的,可以同步到从数 ...

  6. 【antd】如何自定义antd组件form表单中Form.Item里的内容组件

    需求:现有一个form表单,但是其中一个元素比较复杂,并不是简单的输入框或者下拉框之类的.但是我又希望能通过form.validateFields().then()去获得它的值,就不需要在当前页面写大 ...

  7. Containing ViewControllers

    Containing ViewControllers 转自:https://www.cocoanetics.com/2012/04/containing-viewcontrollers/ For a ...

  8. Python语法之变量

    一.变量简介 1.什么是变量 变量即变化的量,用于记录事物的某种状态,比如人的年龄.性别,游戏角色的等级.金钱. 2.如何使用变量 日常生活中: 姓名:Jason 年龄:18 爱好:音乐 程序中: u ...

  9. LuoguB2045 晶晶赴约会 题解

    Content 贝贝邀请晶晶下个星期 \(x\)(如果 \(x=7\) 表示星期日)一起去看展览,但是晶晶下个星期 \(1,3,5\) 都有课.请你判断晶晶能否同意贝贝的请求. 数据范围:\(x\in ...

  10. WebSocket协议理解-数据包格式解析

    WebSocket 的诞生 做客户端开发时,接触最多的应用层网络协议,就是 HTTP 协议,而今天介绍的 WebSocket,下层和 HTTP 一样也是基于 TCP 协议,这是一种轻量级网络通信协议, ...