![](/img/trans.png)
[英]How to dynamically create parameterized test from the file (json or yaml) in python
[英]Implement parameterized using json file to create multiple test iterations
对于文件test_data.json,我想在python中创建测试迭代。 该文件中的数据仅包含要传递给特定方法的相应值。 同时,断言部分将单独处理(此处不需要json文件数据)。
因此,为了使用静态数据创建这些文件,我实现了@ pytest.mark.parameterized,如下所示。 此实现工作得很好,因为它创建了5个测试迭代,分别为1,2,3,4,5,并且执行完成时没有任何错误:-
import pytest
@pytest.mark.parametrize('key_value',
[
'1',
'2',
'3',
'4',
'5',
]
)
def test_method(key_value):
go_to_key(key_value)
现在,鉴于我正在使用的json文件中的数据将被实时提取,并且可能会不时变化。 所以我需要使用参数化的方式来读取json文件,然后根据要引入的key_values构建测试迭代。
文件名= test_data.json
test_data.json中的json数据如下所示
[
{
"key": "1"
},
{
"key": "2"
},
{
"key": "3"
},
{
"key": "4"
},
{
"key": "5"
}
]
在使用参数化时,我遇到了以下代码段,但仍未为测试迭代提供任何清晰的实现:
@parameterized(
param.explicit(*json.loads(line))
for line in open("testcases.jsons")
)
def test_from_json_file(...):
...
有人可以在上述代码上下文中友善地查看并分享有关使用json文件创建测试迭代的实现的任何建议吗? 谢谢!
在@pytest.mark.parametrize
,不同情况的值不仅可以作为列表文字使用,而且可以是方法调用的结果。
从而:
@pytest.mark.parametrize('key_value', [
'1',
'2',
'3'
])
def test_is_key_digit(key_value: str):
assert key_value.isdigit()
可以轻松转换为:
def load_test_cases():
return ['1', '2', '3']
@pytest.mark.parametrize('key_value', load_test_cases())
def test_is_key_digit(key_value: str):
assert key_value.isdigit()
load_test_cases
可以使用任何代码来生成所需的值。 例如,从字符串读取Json
def load_test_cases():
return json.loads('["1", "2", "3"]')
作为旁注,您可以编写:
我正在使用的json文件中的数据将被实时提取,并且可能会不时变化
这听起来像个坏主意。 最好使测试具有可重复性,并使测试依赖于外部系统生成的某些文件显然与该目标相反。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.