今天Nelly问我Pytest能不能支持从TestClass类外传入参数?从类外批量传入各个test方法需要的参数。因为数据文件可能有很多情况,不方便依次匹配。

然而又必须用类对用例进行归类及复用,数据要通过类外进行遍历。不能直接使用pytest.mark.parametrize。

这里采取的一个做法是:

  1. 添加命令行选项 --data,接受一个yaml文件
  2. 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'])

最新文章

  1. AE+C# 版本更新问题 命名空间“ESRI”中不存在类型或命名空间名称“Arcgis”(是缺少程序集引用吗?)
  2. 用原生javascript实现在页面动态显示时间
  3. Object转数组
  4. 【java基础】成员变量和局部变量02
  5. JS日期类型处理
  6. 遇到Wampserver遇到的问题
  7. OpenGL 纹理贴图
  8. 1.4.1.Documents,Fields和Schema概述
  9. eclipse启动问题
  10. Android图片编译报错
  11. java 访问 mysql 数据库的字符集设置
  12. 使用Java中间MessageDigest该文本MD5加密(Java中间MD5样品加密算法演示)
  13. WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图(转载)
  14. iOS 任务的依赖操作
  15. java面试题及答案
  16. MVC,EF 小小封装
  17. Flex布局-项目的属性
  18. java-过滤器、拦截器
  19. BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
  20. LayDate 时间选择插件的使用介绍 (低版本1.0好像是)

热门文章

  1. 测试库异常down分析(abnormal instance termination)
  2. ASCII,UTF-8,Unicode字符串相互转换
  3. 怎么将visual studio项目打包生成dll文件
  4. navicate的使用及用Python操作数据额库
  5. JavaScript获取页面元素的常用方法
  6. linux 命令 wc
  7. 【OF框架】使用原生Sql查询返回实体
  8. 应用在Windows系统中的自动化部署实践
  9. Luogu P1445[Violet]樱花/P4167 [Violet]樱花
  10. MyBatis3_[tp_38~]_动态sql_if_判断&OGNL_where标签_