繁体   English   中英

使用json文件实现参数化以创建多个测试迭代

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM