添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
if __name__ == '__main__': # 以只读方式打开框架的配置文件 file = open(r"D:\PythonProject\interfaceframework\config\config1.csv", "r") table = csv.reader(file) # line = len(open("D:\PythonProject\interfaceframework\config\config1.csv").readlines()) # 可直接读取文件行数的一种方法 # print(line) line = 0 # 定义配置文件行数 listd = [] # 定义一个列表用来存放所有的脚本内容 for row in table: # 逐行读取配置文件 line += 1 dic = {} # 定义一个字典用来存放一行中读取的信息,放在循环内是为了每次读取下一行前都清空之前的数据 if line > 1: # 跳过第一行读取 # 把文件中读取的数据放入字典 dic[row[1]] = row[0] # 脚本文件名:脚本路径 dic["num"] = int(row[3]) # num:脚本执行顺序 # 把脚本运行状态加入字典数据 dic["state"] = row[2] # state:是否运行 # print(dic) # 读取之后dic字典就存放了3个键值{脚本文件名:脚本路径, num:脚本执行顺序, state:是否运行} if dic != {}: # 因为前面跳过了第一行,所以第一行字典为空,这里同样也需要跳过第一行 listd.append(dic) # 将读取的每行字典内容加到列表中 # print(listd) # 查看一下前面添加的到底对不对 # print("line行数=", line) listn = sorted(listd, key=operator.itemgetter("num")) # 用operator函数将前面的listd列表按照num从小到大排序。 print(listn) # 查看排序之后的列表 for i in range(0, line-1): # 把排序后的列表字典逐个读取 n = 0 # 定义一个n用来控制需要获取列表中的哪些内容 for content in listn[i].items(): # 把对应一组字典中的数据逐个读出 if n == 0: # 当n=0时读取文件名和文件路径 fname = content[0] # 定义fname获取文件名 fdir = content[1] # 定义fdir获取文件路径 if n == 2: # 当n=2时读取是否执行 # print(content) state = content[1] if state == "Yes": # 判断是否执行 # 调用脚本程序进行执行 print("最终运行的程序", fname) discover = unittest.defaultTestLoader.discover(fdir, pattern=fname) # 定义一个运行对象 runner = unittest.TextTestRunner() runner.run(discover) n = n + 1

流程图如下,便于更好的理解各种循环嵌套关系:

例2:通过os方法执行运行脚本

配置文件如下:

代码如下:

import csv, os
import operator
file = open(r"../atstudy_test_config/testconfig1.csv", "r")
table = csv.reader(file)
header = next(table)  # 跳过第一行
list_tmp = []  # 定义一个空列表用来存放循环取出的所有脚本
for row in table:
    dic_tmp = {}  # 定义一个空字典来存放状态为run的脚本
    if row[2] == "RUN":
        dic_tmp["path"] = row[1]
        dic_tmp["num"] = row[3]
        list_tmp.append(dic_tmp)  # 将取出的脚本和执行顺序以字典形式加入到列表中
print("取出执行状态为run的脚本:", list_tmp)
# 按照执行顺序排序
list_sort = sorted(list_tmp, key=operator.itemgetter("num"))
print("按执行顺序从小到大排序:", list_sort)
# 将排序后的列表中的执行脚本取出
for content in list_sort:
    # print(content["path"])
    strOs = ("python " + content["path"])
    os.system(strOs)
任务目标:在配置文件中定义测试脚本路径,脚本名称,是否执行,执行顺序。然后从配置文件中读取测试脚本及其路径,识别该脚本是否需要执行,最后按照给定的执行顺序执行脚本。好处:框架程序不需要做任何修改,只需要修改Excel里的值就能应对任意脚本运行。配置文件如下:代码如下,每一步的解释参考注释:# v5.0完成从配置文件中读取测试脚本,执行状态以及执行顺序import csvimport operatorimport unittestif __name__ == '__ma. class T est Math( unitt est .T est Case): def t est _addition(self): data = [(1, 2, 3), (4, 5, 9), (10, -5, 5)] for a, b, expected in data: result = a + b self.assertEqual(result, expected) if __name__ == '__main__': unitt est .main() 在上面的代码中,我们定义了一个名为 T est Math 的测试类,并在其中定义了一个名为 t est _addition 的测试方法。该方法使用了数据驱动的方式,即使用一个包含多组数据的列表 data,每组数据包含两个加数和一个期望结果。然后,我们使用 for 循环遍历这个列表,对每组数据进行加法运算,并使用 assertEqual 方法断言运算结果是否等于期望结果。 最后,我们在代码的末尾使用 unitt est .main() 方法来运行测试。这个方法会自动发现并运行 T est Math 类中的所有测试方法,并输出测试结果。 希望这个代码示例能够帮助你理解如何使用 unitt est 框架 实现 数据驱动的测试。