根据测试路径自动生成测试用例_自拍教程75Python 根据测试用例选择测试资源

案例故事:Android手机音视频图片解码播放测试,有将近上千条用例,
包含了不同的音视频图片文件,每条用例都至少对应了一个测试资源文件。整个测试资源仓库,将近100G,一些视频比如High Profile 5.2规格的,一个就500M,
如果每次测试都需要adb push导入这么多测试资源文件到系统,很费时间,
且系统加载这么多媒体文件,经常出现卡死,反应不过来的情况。 
其实每一轮的测试重点及对应的测试用例是不同的, 如果只挑选出当前待测试用例的测试资源文件,则可以减少adb push导入的时间, 也可以减少系统因加载过测试资源媒体文件而出现的卡死反应慢等问题, 所以我们要根据测试用例,选择性的导入测试资源到Android系统!

准备阶段

1.所有的媒体文件应该存放在一个总的“仓库”下,比如All_Resources文件夹下。2f742c0ab46ce18de4ab5f2f11aba35d.png2.测试用例的Excel表格里,至少是需要有一列用于标记每个用例对应“测试资源”ccfce8d517d4f1b772f23472c3bb706e.png3.只要解析测试用例Excel表格里的标记的“媒体测试文件夹”,然后去All_Resources文件夹里对应匹配,匹配成功的,复制到一个Target_Resources文件夹下。

Python批处理脚本形式

记住批处理脚本的精髓:批量顺序执行语句, 以下脚本,All_Resource文件夹必须和Python脚本在同一个路径下。

# coding=utf-8import osimport shutilimport openpyxl# 定义常量TESTCASE_EXCEL = "TestCase.xlsx"  # 测试用例文件CASE_RESOURCE_COL = 7curdir = os.getcwd()# 测试资源总仓库文件夹all_resource_folder = os.path.join(curdir, "All_Resources")# 目标资源文件夹, 即输出文件夹target_resource_folder = os.path.join(curdir, "Target_Resources")# 如果没有Target_Resources这个文件夹,则创建这个文件夹if not os.path.exists(target_resource_folder):    os.mkdir(target_resource_folder)# 先删除Target_Resource这个文件夹下的所有文件,确保每次这个文件夹每次都是根据最新的用例生成的。shutil.rmtree(target_resource_folder)wb = openpyxl.load_workbook(TESTCASE_EXCEL)ws = wb.activerows = ws.max_rowfor i in range(2, rows + 1):    case_folder = ws.cell(row=i, column=CASE_RESOURCE_COL).value  # 遍历第7列    resource_folder_path = os.path.join(all_resource_folder, case_folder)    target_folder_path = os.path.join(target_resource_folder, case_folder)    if os.path.exists(resource_folder_path):        # 复制文件夹        shutil.copytree(resource_folder_path, target_folder_path)print("测试资源已经复制到%s文件夹下了" % target_resource_folder)os.system("pause")

Python面向过程函数形式

以下脚本,可自定义修改用例Excel文件,且可自定义All_Resources文件夹的路径,
没说一定要本Python脚本在同一个路径下,其代码可重塑性,比批处理脚本形式更强。

# coding=utf-8import osimport shutilimport openpyxl# 定义常量CASE_RESOURCE_COL = 7def select_resource_by_case(case_excel, resource_path):    '''根据测试用例挑选测试资源'''    # 定义用于存放模板资源文件的文件夹'''    target_resource_folder = os.path.join(curdir, "Target_Resources")    # 如果没有Target_Resources这个文件夹,则创建这个文件夹    if not os.path.exists(target_resource_folder):        os.mkdir(target_resource_folder)    # 先删除Target_Resource这个文件夹下的所有文件,确保每次这个文件夹每次都是根据最新的用例生成的。    shutil.rmtree(target_resource_folder)    wb = openpyxl.load_workbook(case_excel)    ws = wb.active    rows = ws.max_row    for i in range(2, rows + 1):        case_folder = ws.cell(row=i, column=CASE_RESOURCE_COL).value  # 遍历第7列        resource_folder_path = os.path.join(resource_path, case_folder)        target_folder_path = os.path.join(target_resource_folder, case_folder)        if os.path.exists(resource_folder_path):            # 复制文件夹            shutil.copytree(resource_folder_path, target_folder_path)    print("测试资源已经复制到%s文件夹下了" % target_resource_folder)# 其实测试资源总仓库文件夹的Path是可以自定义的curdir = os.getcwd()# 测试资源总仓库文件夹all_resource_folder = os.path.join(curdir, "All_Resources")  select_resource_by_case("TestCase.xlsx", all_resource_folder)os.system("pause")

Python面向对象类形式

以下脚本,可自定义修改用例Excel文件,且可自定义All_Resources文件夹的路径,
没说一定要与本Python脚本在同一个路径下,且相对于面向过程函数形式,
其还可以单独再拎出一个函数来:self.create_target_folder()函数,
但是面向过程函数形式,是无法拎出这么一个函数来的,因为target_resource_folder变量无法作用于2个不同函数。而面向对象类形式,self.target_resource_folder可作用于类内的各个函数。

# coding=utf-8import osimport shutilimport openpyxl# 定义常量CASE_RESOURCE_COL = 7class ResourceSelecter(object):    def __init__(self, resource_path):        self.resource_path = resource_path        self.target_resource_folder = None        self.create_target_folder()    def create_target_folder(self):        '''创建用于存放模板资源文件的文件夹'''        self.target_resource_folder = os.path.join(os.getcwd(), "Target_Resources")        # 如果没有Target_Resources这个文件夹,则创建这个文件夹        if not os.path.exists(self.target_resource_folder):            os.mkdir(self.target_resource_folder)        # 先删除Target_Resource这个文件夹下的所有文件,确保每次这个文件夹每次都是根据最新的用例生成的。        shutil.rmtree(self.target_resource_folder)    def select_resource_by_case(self, case_excel):        '''根据测试用例挑选测试资源'''        wb = openpyxl.load_workbook(case_excel)        ws = wb.active        rows = ws.max_row        for i in range(2, rows + 1):            case_folder = ws.cell(row=i, column=CASE_RESOURCE_COL).value  # 遍历第7列            resource_folder_path = os.path.join(self.resource_path, case_folder)            target_folder_path = os.path.join(self.target_resource_folder, case_folder)            if os.path.exists(resource_folder_path):                # 复制文件夹                shutil.copytree(resource_folder_path, target_folder_path)        print("测试资源已经复制到%s文件夹下了" % self.target_resource_folder)if __name__ == '__main__':    # 测试资源总仓库文件夹    all_resource_folder = os.path.join(os.getcwd(), "All_Resources")      r_obj = ResourceSelecter(all_resource_folder)    r_obj.select_resource_by_case("TestCase.xlsx")    os.system("pause")

练手素材下载

包括:

1.一个All_Resources测试资源文件夹2.两份测试用例,不同的用例,可以生成不同的测试资源在Target_Resources文件夹内3.一个select_resource.py脚本

运行方式

1.从服务器里导出测试用例文件,或者本来的测试用例Excel文件2.确保导出来的测试用例有一列“测试资源”,并对每个用例做了测试资源文件夹的标记3.必要的话修改“测试资源”列号,修改测试用例Excel文件名,修改All_Resources资源文件夹路径4.保存为select_resource.py, 双击运行或者python select_resource.py运行5.则最终你会在当前路径下看到一个Target_Resources文件夹生成,内含当前这份测试用例需要用到测试资源。

小提示:其实All_Resources文件夹,可以是本地的,也可以是局域网网络的共享文件夹, 之前我们项目将全部的测试资源,都放到了//sharefolder/All_Resources路径下, 经过测试,可以从以上网络共享文件夹里成功取出资源文件来。 

更多更好的原创文章,请访问官方网站:www.zipython.com[2] 自拍教程(自动化测试Python教程,武散人编著)
原文链接:https://www.zipython.com/#/detail?id=e19b40b9835c4cdb94d453dae834cb71 也可关注“武散人”微信订阅号,随时接受文章推送。b946744862b8a42a1cd18845a4069c14.png

References

[1] 跳转到自拍教程官网下载: https://www.zipython.com/#/detail?id=e19b40b9835c4cdb94d453dae834cb71[2] www.zipython.com: https://www.zipython.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值