既然是测试,肯定会用到各种动作行为的排列组合来对一个功能进行全面测试。如果只有A,B,C三种动作,那排列会很简单,共6种可能。如果有10个,100个呢?这时就要考虑如何自动去实现这个功能了。
Python内置模块itertools中便有实现这个功能的方法,即 permutations。首先介绍如何使用:
注意,生成的是一个迭代器,并不是列表,如果想将其转换为列表,list(iter)就可以了。
当然,好用的功能肯定不只一个,还提供一个可选的长度参数:
上面是排列组合的形式,还有一种只组合,不排列的情况,这时 permutations 就有点靠不住了。该请出它的表兄了:
itertools.combinations()可产生输入序列中所有组合形式,对于顺序是不予考虑的。
不过大家发现没有,combinations 只允许每个元素选择一次,也不是那么完美。胞兄上场:
可见 itertools.combinations_with_replacement()函数允许相同的元素得到多次选择。
方法有了,将其用到测试中只需构建一个函数
from itertools import permutations
a = 'Action_A'
b = 'Action_B'
c = 'Action_c'
num = 1
def auto_gen(*args):
container = []
for i in args:
container.append(i)
return permutations(container)
def run_tests(acts):
global num # 这两行可以初始化每轮测试的环境
print('Round {} :'.format(num))
num += 1
for action in acts:
print(action) # 执行每一轮测试的每一个Action
if __name__ == '__main__':
all_situations = auto_gen(a, b, c)
for each in all_situations:
run_tests(each)
构造完成,代码中a, b, c对应的是每个动作。注意代码中的注释,每轮测试前要先将环境初始化。