先前有家供應商與我們合作開發自動化工程,采用的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()
以上生成的腳本看起來就比較清晰了,再添加自己封裝后的測試接口,整體結構上非常簡潔明了。