Pytest从测试类外为测试用例动态注入数据
2024-09-01 16:46:31
今天Nelly问我Pytest能不能支持从TestClass类外传入参数?从类外批量传入各个test方法需要的参数。因为数据文件可能有很多情况,不方便依次匹配。
然而又必须用类对用例进行归类及复用,数据要通过类外进行遍历。不能直接使用pytest.mark.parametrize。
这里采取的一个做法是:
- 添加命令行选项 --data,接受一个yaml文件
- data这个fixture方法里,获取--data传进来的文件路径,打开并加载所有数据,从request中获取调用data 的用例名,从所有数据中取出该条用例的数据返回
具体参考以下代码:
data.yaml文件内容,注意数据字段要与测试方法名一致,方便自动对应数据。
test_a:
a: 1
b: 2
test_b:
a: 3
b: 4
conftest.py文件内容
import pytest
import yaml
def pytest_addoption(parser): # 添加运行参数
parser.addoption("--data", action="store", help="data file")
@pytest.fixture
def data(request):
file_path = request.config.getoption("--data") # 获取--data参数传的文件路径
with open(file_path) as f: # 加载所有数据
all_data = yaml.safe_load(f)
test_case_name = request.function.__name__ # 获取调用的data这个fixture方法的测试方法名称
return all_data.get(test_case_name) # 只返回指定用例的数据
测试模块test_demo3.py内容
import pytest
class TestDemo(object):
def test_a(self, data): # 所有用例要带上data这个fixture参数
print(data)
def test_b(self, data):
print(data)
if __name__ == '__main__':
pytest.main(['test_demo3.py', '-sq', '--data=data.yaml'])
最新文章
- AE+C# 版本更新问题 命名空间“ESRI”中不存在类型或命名空间名称“Arcgis”(是缺少程序集引用吗?)
- 用原生javascript实现在页面动态显示时间
- Object转数组
- 【java基础】成员变量和局部变量02
- JS日期类型处理
- 遇到Wampserver遇到的问题
- OpenGL 纹理贴图
- 1.4.1.Documents,Fields和Schema概述
- eclipse启动问题
- Android图片编译报错
- java 访问 mysql 数据库的字符集设置
- 使用Java中间MessageDigest该文本MD5加密(Java中间MD5样品加密算法演示)
- WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图(转载)
- iOS 任务的依赖操作
- java面试题及答案
- MVC,EF 小小封装
- Flex布局-项目的属性
- java-过滤器、拦截器
- BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
- LayDate 时间选择插件的使用介绍 (低版本1.0好像是)
热门文章
- 测试库异常down分析(abnormal instance termination)
- ASCII,UTF-8,Unicode字符串相互转换
- 怎么将visual studio项目打包生成dll文件
- navicate的使用及用Python操作数据额库
- JavaScript获取页面元素的常用方法
- linux 命令 wc
- 【OF框架】使用原生Sql查询返回实体
- 应用在Windows系统中的自动化部署实践
- Luogu P1445[Violet]樱花/P4167 [Violet]樱花
- MyBatis3_[tp_38~]_动态sql_if_判断&;OGNL_where标签_