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. 为什么企业全面云化需要IT战略支撑和驱动?

    引子:为什么传统企业全面云化一直磨磨唧唧举步维艰? 笔者将企业上云大体上分为几个阶段: 第一个阶段是基础设施虚拟化.即将应用从物理机搬到(lift and shift migration)虚拟机上.基 ...

  2. 转:addChildViewController实现网易新闻首页切换

    本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里面的 ...

  3. [BUUCTF]PWN15——[BJDCTF 2nd]one_gadget

    [BUUCTF]PWN15--[BJDCTF 2nd]one_gadget 附件 步骤: 例行检查,64位,保护全开 nc试运行一下程序,看看情况,它一开始给了我们一个地址,然后让我们输入one ga ...

  4. Offset函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  5. PLSQL Developer 13安装教程

    1:双击安装包进行安装.点击"next".2:点击"w accept the termis..."同意条款,并点击"next",进行下一步. ...

  6. CSS的三大特性(继承、层叠和优先级)

    CSS的三大特性(继承.层叠和优先级) 1.css属性的继承 CSS中有些属性是可继承的,何为属性的继承? 一个元素如果没有设置某些属性的值,就会跟随(继承)父元素的属性值.当然,一个元素如果有设置自 ...

  7. CF336A Vasily the Bear and Triangle 题解

    Content 一个矩形的顶点为 \((0,0)\),其对顶点为 \((x,y)\),现过 \((x,y)\) 作直线,分别交 \(x\) 轴和 \(y\) 轴于 \(A,B\) 两点,使得 \(\t ...

  8. outlook2007邮件里的图片显示不出来

    outlook2007邮件里的图片显示不出来,这是为啥? 以图片为附件的形式进行传送吧,这样在收件箱里就能在线看图片了,不用担心看不到图片

  9. STC8PROG - Linux下的 STC8G STC8H 烧录工具

    STC8PROG - Linux下的 STC8G STC8H 烧录工具 动机 在Linux下用 VSCode + PlatformIO 做开发, 因为VSCode的界面字体代码提示, 以及自定义的类J ...

  10. JAVA下划线、驼峰相互转换

    /** * 下划线转驼峰 * @param str * @return */ public static String lineToHump(String str) { str = str.toLow ...