执行select组合并阻止pytest运行所有参数化组合



有3个用户和5个代码

@pytest.mark.fns
@pytest.mark.parametrize("USER, PWD", [(user1, user1pwd), (user2, user2pwd), (user3, user3pwd)])
@pytest.mark.parametrize("CODE", ['code1', 'code2', 'code3', 'code 4', 'code 5'])
def fn1(CODE, USER, PWD):
...
...
do something
...
...

现在,如果我运行pytest -m "fns",函数fn1将在所有CODE和USER、PWD组合中运行15次。然而,我只希望它像下面这样运行5次:

fn1(code1, user1, user1pwd)
fn1(code2, user2, user2pwd)
fn1(code3, user3, user3pwd)
fn1(code4, user1, user1pwd)
fn1(code5, user2, user2pwd)

也就是说,代码1、2和3与user1、2、3一起传递,然后剩余的代码4和5与user1和2一起传递。

第1版:代码的数量可以从1到1000不等,而只有3个用户。并且每个代码只需要与一个用户一起传递一次。

我看了一些比赛,但太难了,我无法理解。有人能解释一下我是如何做到这一点的吗?

import itertools
def fn1_parameters():
for code, (user, pwd) in zip(
["code1", "code2", "code3", "code4", "code5"],
itertools.cycle([
("user1", "user1pwd"),
("user2", "user2pwd"),
("user3", "user3pwd"),
])
):
yield code, user, pwd

然后:

def test_fn1():
for code, user, pwd in fn1_parameters():
fn1(code, user, pwd)

# Not sure if list() is needed
@pytest.mark.parametrize("code", "user", "pwd", list(fn1_parameters()))
def fn1(code, user, pwd):

最新更新