pytest的参数化操作

在使用pytest进行测试时,我们经常需要针对不同的输入值执行相同的测试逻辑。为了提高测试效率,避免重复编写相似的测试用例,pytest提供了参数化测试的功能。这一功能允许我们轻松执行同一测试用例的多个变体,从而覆盖更多的测试场景。

一、基本用法

pytest的参数化测试主要通过@pytest.mark.parametrize装饰器实现。该装饰器接收两个参数:第一个是字符串,表示参数的名称;第二个是参数的值列表,每个值都会作为一次独立的测试执行。

python 复制代码
import pytest  
  
@pytest.mark.parametrize("input,expected", [  
    (1, 2),  
    (2, 3),  
    (3, 4)  
])  
def test_increment(input, expected):  
    assert input + 1 == expected

|---|
| |

在这个例子中,test_increment函数会被执行三次,每次都会使用parametrize装饰器中定义的一组参数。

二、高级用法

除了基本用法外,pytest的参数化测试还支持一些高级功能,如使用ids为测试用例设置别名、使用indirect参数进行间接参数化等。

使用ids设置别名

ids参数允许我们为每个测试用例设置一个别名,这样在运行测试时,pytest会显示这些别名而不是参数的默认值。

python 复制代码
import pytest  
  
@pytest.mark.parametrize("input,expected", [  
    pytest.param(1, 2, marks=pytest.mark.basic),  
    pytest.param(2, 3, marks=pytest.mark.basic, id="basic_2"),  
    pytest.param(3, 4, id="basic_3"),  
])  
def test_increment(input, expected):  
    assert input + 1 == expected

|---|
| |

在这个例子中,第二个和第三个测试用例分别使用了id参数来设置别名。

使用indirect进行间接参数化

indirect参数允许我们将参数传递给fixture函数,而不是直接传递给测试用例函数。这可以用于更复杂的测试场景,其中fixture函数需要根据不同的参数来设置测试环境。

python 复制代码
import pytest  
  
@pytest.fixture  
def my_fixture(request):  
    param = request.param  
    return param  
  
@pytest.mark.parametrize("my_fixture", [1, 2, 3], indirect=True)  
def test_with_fixture(my_fixture):  
    assert my_fixture > 0

|---|
| |

在这个例子中,my_fixture是一个fixture函数,它接收一个参数并返回该参数。test_with_fixture函数使用@pytest.mark.parametrize装饰器进行参数化,并通过indirect=True告诉pytest将参数传递给fixture函数。

相关推荐
yuki_uix几秒前
HTTP 缓存策略:新鲜度与速度的权衡艺术
前端·面试
qq_372906933 分钟前
如何用 JavaScript 实现单选式盒子颜色切换(点击高亮,其余复原)
jvm·数据库·python
2401_897190554 分钟前
怎样使用Navicat高级特权进行还原时解决字符集冲突_企业数据保护
jvm·数据库·python
幸运小圣5 分钟前
Array.prototype.reduce 全面解析【JS方法】
开发语言·javascript·原型模式
Ruihong5 分钟前
你的 Vue TransitionGroup 组件,VuReact 会编译成什么样的 React 代码?
vue.js·react.js·面试
木子墨5165 分钟前
LeetCode 热题 100 精讲 | 计算几何篇:点积叉积 · 线段相交 · 凸包 · 多边形面积
c++·算法·leetcode·职场和发展·动态规划
weixin_580614008 分钟前
c++文件锁使用方法 c++如何实现多进程文件同步
jvm·数据库·python
qq_330037998 分钟前
如何转换数据文件字节序_CONVERT DATAFILE用于跨OS平台数据库迁移
jvm·数据库·python
小蜜蜂嗡嗡9 分钟前
flutter 自定义走马灯,内部为Widget控件的走马灯效果二:横向无限匀速滚动+每个Item与屏幕左侧对齐时,停靠3秒再继续滚动
开发语言·flutter
白日梦想家6819 分钟前
博客二:递归实战避坑指南,从入门到熟练运用
开发语言·python