pytest标记参数:每次迭代期间的不同断言

时间:2019-01-09 12:53:28

标签: python pytest

如果这个问题可能是重复的,我表示歉意,我搜索了类似的问题,但没有成功找到与我的特定用例相关的任何内容。

我试图在pytest参数化输入的不同迭代中做出不同的断言。

代码类似于

@pytest.mark.parametrize('file_paths',
                         [['script.py'],
                          ['script.py', 'script1.py', 'testdir/script2.py'],
                          ['', 'testdir']])
def test_save_file(project_explorer_with_files, file_paths):
    codes
    codes
    codes
    ...

    # if first iteration of file_paths:
        # make this assertion
    # if second iteration of file_paths:
        # make this assertion
    # if third iteration of file_paths:
        # make this assertion

任何人都可以帮助我实现这一目标!

预先感谢

我不想使用len(file_paths),因为将来可能会更改每个子列表的输入

2 个答案:

答案 0 :(得分:1)

从函数中放入一些变量,在某个地方是测试数据文件或其他任何东西,然后在函数中添加+1,直到执行该变量将使值保持最新,并且不会在每次迭代时都重新读取它,例如:

var = 1;

@pytest.mark.parametrize('file_paths',
                         [['script.py'],
                          ['script.py', 'script1.py', 'testdir/script2.py'],
                          ['', 'testdir']])
def test_save_file(project_explorer_with_files, file_paths):
    codes
    codes
    codes
    ...
    if var == 1:
        # make this assertion
    if var == 2:
        # make this assertion
    if var == number_of_iteration:
        # make this assertion
    var+=1;

答案 1 :(得分:1)

您可以考虑将id添加到mark.parametrize中,然后添加请求固定装置以查询该值。

@mark.parametrize('file_paths', [
    'a',
    'b',
    ], ids=['1', '2'])
def test_func(request, ...) 
    ...
    if request._pyfuncitem._genid == '1':
        <snip>

唯一需要注意的是,id必须是字符串