#Python#用Python来实现测试中的排列组合//itertools模块

既然是测试,肯定会用到各种动作行为的排列组合来对一个功能进行全面测试。如果只有A,B,C三种动作,那排列会很简单,共6种可能。如果有10个,100个呢?这时就要考虑如何自动去实现这个功能了。
Python内置模块itertools中便有实现这个功能的方法,即 permutations。首先介绍如何使用:


#Python#用Python来实现测试中的排列组合//itertools模块_第1张图片
生成排列组合

注意,生成的是一个迭代器,并不是列表,如果想将其转换为列表,list(iter)就可以了。
当然,好用的功能肯定不只一个,还提供一个可选的长度参数:


#Python#用Python来实现测试中的排列组合//itertools模块_第2张图片
输入长度参数

上面是排列组合的形式,还有一种只组合,不排列的情况,这时 permutations 就有点靠不住了。该请出它的表兄了:
itertools.combinations()可产生输入序列中所有组合形式,对于顺序是不予考虑的。
#Python#用Python来实现测试中的排列组合//itertools模块_第3张图片
itertools.combinations

不过大家发现没有,combinations 只允许每个元素选择一次,也不是那么完美。胞兄上场:


#Python#用Python来实现测试中的排列组合//itertools模块_第4张图片
itertools.combinations_with_replacement

可见 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对应的是每个动作。注意代码中的注释,每轮测试前要先将环境初始化。

你可能感兴趣的:(#Python#用Python来实现测试中的排列组合//itertools模块)