如果这个问题可能是重复的,我表示歉意,我搜索了类似的问题,但没有成功找到与我的特定用例相关的任何内容。
我试图在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),因为将来可能会更改每个子列表的输入
答案 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必须是字符串