一、驱动执行程序,思路
由简到繁:采用defaultTestLoader的discover方法的方式,加载测试文件,进行独立文件执行。
顺序:
驱动执行一个测试文件->驱动执行两个或多个测试文件->驱动执行不同运行状态(是否执行)的测试文件->按照指定顺序驱动执行->按照顺序和是否执行的命令,编写完整的驱动程序
V1:驱动执行一个测试文件
import unittest
if __name__ == '__main__':
#指定需要运行的脚本路径
test_path = 'G:\PycharmProjects\InterFaceFrameWork\Script\Inde_Interface_Script'
#创建discoer对象,传入文件路径和文件名
discover = unittest.defaultTestLoader.discover(test_path,pattern='test_Login.py')
#创建运行对象
runner = unittest.TextTestRunner()
runner.run(discover)
V2:读取文件信息方式,驱动执行一个或多个文件
import csv
import unittest
if __name__ == '__main__':
file_reader = open('G:\PycharmProjects\InterFaceFrameWork\Config\cogfig1.csv','r')
table = csv.reader(file_reader)
next(file_reader)
for row in table:
discover = unittest.defaultTestLoader.discover(row[0],pattern=row[1])
#print(row)
#创建运行对象
runner = unittest.TextTestRunner()
runner.run(discover)
V3:驱动执行不同运行状态(是否执行)的测试文件
import csv
import unittest
if __name__ == '__main__':
file_reader = open('G:\PycharmProjects\InterFaceFrameWork\Config\cogfig1.csv','r')
table = csv.reader(file_reader)
next(file_reader)
for row in table:
if row[2]=="yes":
discover = unittest.defaultTestLoader.discover(row[0],pattern=row[1])
#print(row)
#创建运行对象
runner = unittest.TextTestRunner()
runner.run(discover)
V4:驱动按照不同的顺序执行脚本
(一)问题一:数字顺序问题,思路:
读取csv文件排序的数字,放入字典中。再通过字典中的排序函数进行排序,然后依次读取排序后字典中的数据执行脚本。
(1)需要导入类库文件:import operator
(2)使用的排序函数:sorted()
排序代码:
#对数据字典进行排序
dict = {'testD':'1','testA':'5','testE':'4','testC':'3','testB':'2',}
new_data = sorted(dict.items(),key=operator.itemgetter(0)) #按照key值排序
new_data1 = sorted(dict.items(), key=operator.itemgetter(1)) #按照value值排序
print(new_data)
print(new_data1)
输出:
[('testA', '5'), ('testB', '2'), ('testC', '3'), ('testD', '1'), ('testE', '4')]
[('testD', '1'), ('testB', '2'), ('testC', '3'), ('testE', '4'), ('testA', '5')]
(二)问题二:
字典只能存放key和value。csv驱动文件中,脚本和路径是分两列保存的,这样无法读取并保存路径信息。
解决:
用字典列表的数据格式,加入路径信息,就可以保存
#加入路径进行排序
dic_list = [{'testA':"D:\\python\\pro","num":"3"},{'testB':'D:\\python\\pro',"num":"2"},{'testC':'D:\\python\\pro',"num":"1"}]
new3 = sorted(dic_list,key=operator.itemgetter('num'))
print(new3)
#取得路径
for i in range(0,3):
num = 0
for content in new3[i].items():
if num == 0:
print(content[0])
print(content[1])
num = num+1
运行结果:
[{'testC': 'D:\\python\\pro', 'num': '1'}, {'testB': 'D:\\python\\pro', 'num': '2'}, {'testA': 'D:\\python\\pro', 'num': '3'}]
testC
D:\python\pro
testB
D:\python\pro
testA
D:\python\pro
(三)问题三:把配置文件的数据,读取的字典列表中
dict = {}
list = []
file_reader = open('G:\PycharmProjects\InterFaceFrameWork\Config\cogfig1.csv','r')
table = csv.reader(file_reader)
next(file_reader)
for row in table:
dict = {}
dict[row[1]] = row[0]
dict['num'] = row[3]
print(dict)
list.append(dict)
print(list)
执行结果:
[{'test_Login.py': 'G:\\PycharmProjects\\InterFaceFrameWork\\Script\\Inde_Interface_Script', 'num': '1'}, {'test_Forget_Get_Question.py': 'G:\\PycharmProjects\\InterFaceFrameWork\\Script\\Inde_Interface_Script', 'num': '2'}, {'test_Forget_Check_Answer.py': 'G:\\PycharmProjects\\InterFaceFrameWork\\Script\\Inde_Interface_Script', 'num': '3'}]
V4总结:按照指定的顺序执行测试脚本,按顺序打印出路径和脚本
import csv
import operator
import unittest
if __name__ == '__main__':
#把配置文件的数据,存放到字典中
dict = {}
dict_list = []
file_reader = open('G:\PycharmProjects\InterFaceFrameWork\Config\cogfig1.csv','r')
table = csv.reader(file_reader)
next(file_reader)
for row in table:
dict = {}
dict[row[1]] = row[0]
dict['num'] = row[3]
#print(dict)
dict_list.append(dict)
#print(dict_list)
#加入路径排序
new_list = sorted(dict_list, key=operator.itemgetter('num'))
#print(new_list)
# 取得路径
for i in range(0, 3):
num = 0
for content in new_list[i].items():
if num == 0:
#跳过,不读num
num = num + 1
path = content[1]
file = content[0]
print('path:'+path)
print('file:'+file)
执行结果:
path:G:\PycharmProjects\InterFaceFrameWork\Script\Inde_Interface_Script
file:test_Forget_Check_Answer.py
path:G:\PycharmProjects\InterFaceFrameWork\Script\Inde_Interface_Script
file:test_Login.py
path:G:\PycharmProjects\InterFaceFrameWork\Script\Inde_Interface_Script
file:test_Forget_Get_Question.py