【发布时间】:2018-06-12 13:01:04
【问题描述】:
我创建了一个“动态”参数列表,我将其传递给参数化。
OPTIONS = ['a', 'b', 'c']
def get_unique_pairs():
unique_list = []
for first in OPTIONS:
for second OPTIONS:
if first == second:
continue
unique_list.append({'first':first, 'second':second))
return unique_list
def some_func()
unique_pairs = get_unique_pairs()
result = []
for pair in unique_pair:
if test(pair):
continue
else:
result.append(pair)
return pair
@pytest.mark.parametrize('param', some_fnc())
def test_fnc(param):
first = param['first']
second = param['second']
我希望传递给test_fnc 的输入是[('a','b'),('a','c')...('c','b')],其中第一个和第二个元素永远不会相同。我正在使用一些额外的逻辑来进一步删除特定的对。
当我运行测试时,我得到了输出:
::test_fnc[param0] PASSED
::test_fnc[param1] PASSED
::test_fnc[param2] PASSED
我有两个问题:
- 我不完全确定如何描述我正在做什么以查找更多文档/帮助。
- 我想要更多描述性的输出(即不是
param0),并且我想继续使用字典将数据传递给测试。
【问题讨论】:
-
我的印象是您的
get_unique_pairs可以替换为list(itertools.combinations(OPTIONS, 2))。另外,看看生成器函数和生成器表达式,它们可以使您的代码更简洁和惯用。 -
这很酷 - 谢谢。我会玩,我希望它生成 ['c', 'a'] - 反转组合。
-
组合迭代器有:product、permutations、combinations 和combinations_with_replacement。
combinations(p, r)迭代器以排序顺序返回 r 长度的元组,没有重复的元素。 Product 相当于你的嵌套 for 循环:[(a, b) for a, b in product(OPTIONS, OPTIONS) if a != b] -
itertools.permutations(OPTIONS, 2)是一种更简洁的方式来写我正在做的事情! -
每天你都会学到新东西。欢迎来到 StackOverflow!这里的 Python 社区很棒。