先前有家供应商与我们合作开发自动化工程,采用的py unittest作为脚本运行框架。我发现他们出的脚本都是挨个手写的,格式上也是参差不齐。所以有了根据用例表批量生成脚本的一段小代码
对一个测试脚本必须存在哪些内容,我认为若满足以下三点要求,就算一个合格的测试脚本了。
1、测试用例的描述,包含测试目的,测试详细步骤,预期结果等
2、简洁,易于阅读和维护的代码结构
3、详细的运行LOG记录与测试报告
所以很明显以上脚本结构上是不够完整的,测试执行人员可能都不知道这个脚本测的什么内容。改之
根据用例表批量生成脚本
我的用例管理表如下,xlsx的表格。以下内容是随便举的一个例子(可能测试用例写得不正确)
代码实现的逻辑:解析用例管理表,生成测试脚本框架
# !/usr/bin/env python # -*- coding:utf-8 -*- # !python3 __author__ = "xxx" """自动化脚本生成工具""" import os import xlrd import time TestCaseName = "" TestCaseDescription = "" TestCasePreCondition = "" TestCaseStep = "" TestCaseExpectResult = "" TestEnvironment = "" TestScriptName = "" cur_path = os.getcwd() def scripts_template(): testcases = os.path.join(cur_path, u"用例模板.xlsx") data = xlrd.open_workbook(r'%s' % testcases) table = data.sheet_by_index(0) n_rows = table.nrows n_cols = table.ncols for i in range(1, n_rows): TestCaseName = table.cell_value(i, 1) TestCaseDescription = table.cell_value(i, 2) TestCasePreCondition = table.cell_value(i, 3) TestCaseStep = table.cell_value(i, 4) TestCaseExpectResult = table.cell_value(i, 5) TestEnvironment = table.cell_value(i, 0) TestScriptName = "test_{0}".format(TestCaseName) #符合unittest测试用例定义的识别条件, 以"test"开头 filename = os.path.join(cur_path, "{0}.py".format(TestScriptName)) with open(filename, 'w', encoding='utf-8') as out: out.write('''# !/usr/bin/env python # -*- coding:utf-8 -*- """ #----------------------------------------------------------------------- 用例名称: {0} 用例描述: {1} 前置条件: {2} 测试步骤: {3} 预期结果: {4} 测试环境: {5} 作者:{6} 日期:{7} #----------------------------------------------------------------------- """ import unittest class {8}(unittest.TestCase): def setUp(self): #TODO 添加用例执行前置条件 pass def testRun(self): #TODO 添加用例执行测试步骤 pass def tearDown(self): #TODO 添加恢复测试环境操作 pass if __name__ == '__main__': unittest.main()'''.format(TestCaseName, TestCaseDescription, TestCasePreCondition, TestCaseStep, TestCaseExpectResult, TestEnvironment, __author__, time.strftime('%Y-%m-%d'), TestScriptName)); print("generate scripts finished!") if __name__ == "__main__": scripts_template()
运行一下以上测试脚本生成代码。生成的脚本如下:
1 # !/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 """ 5 #----------------------------------------------------------------------- 6 用例名称: case_01_01_01_01 7 用例描述: 测试天气提示刷新 8 前置条件: 9 打开天气APP 10 测试步骤: 11 1.后台设置今日天气为多云,查看App提示是否更新。 12 预期结果: 13 页面天气提示刷新为多云 14 测试环境: Phone 15 作者:xxx 16 日期:2019-01-08 17 #----------------------------------------------------------------------- 18 """ 19 20 import unittest 21 22 23 class test_case_01_01_01_01(unittest.TestCase): 24 25 def setUp(self): 26 #TODO 添加用例执行前置条件 27 pass 28 29 def testRun(self): 30 #TODO 添加用例执行测试步骤 31 pass 32 33 def tearDown(self): 34 #TODO 添加恢复测试环境操作 35 pass 36 37 if __name__ == '__main__': 38 unittest.main()
以上生成的脚本看起来就比较清晰了,再添加自己封装后的测试接口,整体结构上非常简洁明了。