pytest 8 参数化parametrize

pytest.mark.parametrize装饰器可以实现用例参数化

1.以下是一个实现检查一定的输入和期望输出测试功能的典型例子

import pytest

@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+4",6),("6*9",42)])
def test_add(test_input,expected):
    assert eval(test_input) == expected

结果:成功2个失败1个,但是需要注意的是,@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+4",6),("6*9",42)])里面的"test_input,expected"一定要和
test_add(test_input,expected)当中的参数名称一致,否则,将会出错。

============================= test session starts ==============================
platform darwin -- Python 2.7.10, pytest-3.6.3, py-1.5.2, pluggy-0.6.0
rootdir: /Users/newcomer/PycharmProjects/error/wuya/pytestDemo, inifile:
plugins: metadata-1.7.0, html-1.19.0, D3-2.0.13, cov-2.5.1, catchlog-1.2.2, allure-adaptor-1.7.10, georaven-17.1.0.170collected 3 items

parametrizing.py ..F
parametrizing.py:9 (test_add[6*9-42])
42 != 54

Expected :54
Actual :42
<Click to see difference>

test_input = ‘6*9‘, expected = 42

@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+4",6),("6*9",42)])
def test_add(test_input,expected):
> assert eval(test_input) == expected
E AssertionError: assert 54 == 42
E + where 54 = eval(‘6*9‘)

parametrizing.py:12: AssertionError
[100%]

=================================== FAILURES ===================================
_______________________________ test_add[6*9-42] _______________________________

test_input = ‘6*9‘, expected = 42

@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+4",6),("6*9",42)])
def test_add(test_input,expected):
> assert eval(test_input) == expected
E AssertionError: assert 54 == 42
E + where 54 = eval(‘6*9‘)

parametrizing.py:12: AssertionError

================ 1 failed, 2 passed, 1 warnings in 0.08 seconds ================
Process finished with exit code 0

2.它也可以标记单个测试实例在参数化,例如使用内置的mark.xfail

import pytest

@pytest.mark.parametrize("test_input,expected", [
                        ("3+5", 8),
                        ("2+4", 6),
                        pytest.param("6 * 9",42,marks=pytest.mark.xfail),])
def test_eval(test_input, expected):
    print("-------开始用例------")
    assert eval(test_input) == expected

结果:可以看出来,标记为失败的用例就不运行了,直接跳过显示xfailed

============================= test session starts ==============================
platform darwin -- Python 2.7.10, pytest-3.6.3, py-1.5.2, pluggy-0.6.0
rootdir: /Users/newcomer/PycharmProjects/error/wuya/pytestDemo, inifile:
plugins: metadata-1.7.0, html-1.19.0, D3-2.0.13, cov-2.5.1, catchlog-1.2.2, allure-adaptor-1.7.10, georaven-17.1.0.170collected 3 items

parametrizing.py .-------开始用例------
.-------开始用例------
x-------开始用例------

test_input = ‘6 * 9‘, expected = 42

@pytest.mark.parametrize("test_input, expected", [
("3+5", 8),
("2+4", 6),
pytest.param("6 * 9",42,marks=pytest.mark.xfail),])
def test_eval(test_input, expected):
print("-------开始用例------")
> assert eval(test_input) == expected
E AssertionError: assert 54 == 42
E + where 54 = eval(‘6 * 9‘)

parametrizing.py:26: AssertionError
[100%]

=============== 2 passed, 1 xfailed in 0.08 seconds ================
Process finished with exit code 0

参数组合:

import pytest
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):
    print("测试数据组合:x->%s, y->%s" % (x, y))

结果:test_canshu1.py 测试数据组合:x->0, y->2 .测试数据组合:x->1, y->2 .测试数据组合:x->0, y->3 .测试数据组合:x->1, y->3 . ========================== 4 passed in 1.75 seconds ===========================

这将运行测试,参数设置为x=0/y=2,x=1/y=2,x=0/y=3,x=1/y=3组合参数。

原文地址:https://www.cnblogs.com/peiminer/p/9507111.html

时间: 2024-11-01 22:53:58

pytest 8 参数化parametrize的相关文章

pytest完整

学习目标 1. 能够安装 pytest 框架 2. 能够了解 pytest 主函数的运行方式 3. 能够掌握 pytest 命令行的运行方式 4. 能够掌握 setup 和 teardown 方法 5. 能够掌握 setup_class 和 teardown_class 方法 6. 能够理解 pytest 配置文件的含义 7. 能够生成 pytest-html 测试报告 8. 能够控制 pytest 函数执行的顺序 9. 能够掌握 pytest 失败重试 10. 能够掌握 pytest 跳过函数

pytest-18-配置文件pytest.ini

pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. ini配置文件 pytest里面有些文件是非test文件 pytest.ini pytest的主配置文件,可以改变pytest的默认行为 conftest.py 测试用例的一些fixture配置 __init__.py 识别该文件夹为python的package包 tox.ini 与pytest.ini类似,用tox工具时候才有用 setup.cfg 也是ini格式

自动化笔试题持续总结

1.Jmeter自动获取手机验证码 https://www.cnblogs.com/only-love-you-519920/p/7742809.html 2.Jmeter中使用循环如何保证数据不重复 https://jingyan.baidu.com/article/d5a880ebbae90213f047cc4a.html 3.用户登录接口循环10次,要求手机号和密码不重复. 用unittest+ddt,或pytest实现参数化. 4.登录接口的token值如何供其他接口使用 存在全局变量中

pytest.mark.parametrize()参数化的应用一

1 from page.LoginPage import Loginpage 2 import os, sys, pytest 3 4 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 5 sys.path.append(base_dir) 6 7 8 class TestLogin(): 9 10 @pytest.mark.parametrize( 11 "name, password", 1

pytest文档9-参数化parametrize

前言 pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 # content of test_expectation.py # coding:utf-8 import pytest @pytest.mark.parametrize("test_input,expected", [ ("3+5", 8), ("2+4", 6), (&

使用@pytest.mark.parametrize进行参数传递测试

摘自:https://blog.csdn.net/sunny_happy08/article/details/83658661 最近因工作需要用到@pytest.mark.parametrize()传多个参数,实现执行不同数据. 我的需求数据源是excel,excel的每一行都是一条测试用例,已实现读取测试用例和处理测试用例的逻辑.接下来就是将这些测试数据通过pytest.mark.parametrize()传入测试函数,循环执行这些测试数据,每次执行时都需要assert用例结果, 以便将测试结

Pytest进阶之参数化

前言 unittest单元测试框架使用DDT进行数据驱动测试,那么身为功能更加强大且更加灵活的Pytest框架怎么可能没有数据驱动的概念呢?其实Pytest是使用@pytest.mark.parametrize装饰器来实现数据驱动测试的,那么今天我们就简单来说说在它是如何进行数据驱动测试的 单个参数 """ ------------------------------------ @Time : 2019/7/25 19:18 @Auth : linux超 @File : t

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

From: http://www.testclass.net/pytest/test_api_with_expected_result/ 背景 接上一节v2ex网站的查看论坛节点信息的api. 我们在上一节的测试用例里只断言了返回值的name字段必须与我们传入的入参相同,但是返回值的id却没有进行判定.这一节里我们加强一下测试脚本,实现判断id的功能. 测试数据 python, id=90 java, id=63 nodejs, id=436 go, id=375 代码实现 在v2ex_api_

pytest参数化的两种方式

1.传统方式 1 import requests,pytest 2 from Learning.variable import * 3 4 # 定义变量 5 #url = "https://www.baidu.com" 6 7 class TestClass(object): 8 global url #在此获取全局变量,并将其设置为TestClass类的全局变量 9 def setup_class(self): 10 print("start...") 11 12