1 排列
test.py
from itertools import permutations
a = [1, 2, 3]
b = list(permutations(a, 1))
print(len(b), b)
b = list(permutations(a, 2))
print(len(b), b)
b = list(permutations(a, 3))
print(len(b), b)
result
3 [(1,), (2,), (3,)]
6 [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
6 [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
- 数学表达式
len(permutations([1, 2, 3, 4], 4)) = 4*3*2*1 = 4!
2 组合
test.py
from itertools import combinations
a = [1, 2, 3]
b = list(combinations(a, 1))
print(len(b), b)
b = list(combinations(a, 2))
print(len(b), b)
b = list(combinations(a, 3))
print(len(b), b)
result
3 [(1,), (2,), (3,)]
3 [(1, 2), (1, 3), (2, 3)]
1 [(1, 2, 3)]
- 数学表达式
总数为 3+3+1 = 7 = 2的len(a)次幂-1 = 2**3-1
3 组合后的条件判断
test.py
from itertools import combinations
a = [x for x in range(1, 5)]
items = []
for i in range(0, len(a)):
items += list(combinations(a, i + 1))
print(len(items), items)
for item in items:
for i in item:
if i:
pass
else:
pass
# print(item, i)
result
15 [(1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)]
- 业务场景:有个搜索接口有4个过滤搜索条件,均可以为
None,在编写测试用例的时候,想要全场景覆盖,就需要使用组合穷举出可能的结果,然后进行断言assert.