【第八章】引數化測試引入 paramunittest(類似ddt),優化指令碼是否執行用例
阿新 • • 發佈:2021-12-22
-
引數化測試引入 paramunittest
引言:
上一章節我們講到的是斷言跟新增異常模組,這一章節我們講的是如何進行引數化實現
- 新建demo
unitest_paramtest_demo_12
# -*- coding: utf-8 -*- # @Time : 2021/12/22 13:22 # @Author : Limusen # @File : unitest_paramtest_demo_12 """ 安裝 pip install paramunittest """ import unittest import paramunittest # # 元祖舉例# @paramunittest.parametrized( # (10, 20, 30), (30, 40, 70), (70, 80, 150) # ) # class ParamUnittestDemo12(paramunittest.ParametrizedTestCase): # # def setParameters(self, numa, numb, numc): # self.a = numa # self.b = numb # self.c = numc # # def test_add_case(self): # print("%s + %s ?= %s" % (self.a, self.b, self.c))# self.assertEqual(self.a + self.b, self.c) # 字典舉例 @paramunittest.parametrized( {"numa": 20, "numb": 30, "numc": 50}, {"numa": 40, "numb": 60, "numc": 100}, {"numa": 80, "numb": 110, "numc": 190} ) class PUnitTestDemo(paramunittest.ParametrizedTestCase): # unittest.TestCase def setParameters(self, numa, numb, numc): self.a= numa self.b = numb self.c = numc def test_add_case(self): print("%d + %d ?= %d" % (self.a, self.b, self.c)) self.assertEqual(self.a + self.b, self.c) if __name__ == '__main__': unittest.main(verbosity=2)
- 優化讀取excel檔案格式
# -*- coding: utf-8 -*- # @Time : 2021/12/22 13:22 # @Author : Limusen # @File : unitest_paramtest_demo_12 """ 安裝 pip install paramunittest """ import unittest import paramunittest # # 元祖舉例 # @paramunittest.parametrized( # (10, 20, 30), (30, 40, 70), (70, 80, 150) # ) # class ParamUnittestDemo12(paramunittest.ParametrizedTestCase): # # def setParameters(self, numa, numb, numc): # self.a = numa # self.b = numb # self.c = numc # # def test_add_case(self): # print("%s + %s ?= %s" % (self.a, self.b, self.c)) # self.assertEqual(self.a + self.b, self.c) # # 字典舉例 # @paramunittest.parametrized( # {"numa": 20, "numb": 30, "numc": 50}, # {"numa": 40, "numb": 60, "numc": 100}, # {"numa": 80, "numb": 110, "numc": 190} # ) # class PUnitTestDemo(paramunittest.ParametrizedTestCase): # unittest.TestCase # # def setParameters(self, numa, numb, numc): # self.a = numa # self.b = numb # self.c = numc # # def test_add_case(self): # print("%d + %d ?= %d" % (self.a, self.b, self.c)) # self.assertEqual(self.a + self.b, self.c) cast_info = [ {"case_id": "api_case_01", "case_step": ".....1"}, {"case_id": "api_case_02", "case_step": ".....2"}, {"case_id": "api_case_03", "case_step": ".....3"} ] # 整合測試用例 @paramunittest.parametrized( *cast_info ) class PUnitTestDemo(paramunittest.ParametrizedTestCase): # unittest.TestCase def setParameters(self, case_id, case_step): self.case_id = case_id self.case_step = case_step def test_add_case(self): print("case_id: %s ,case_step: %s " % (self.case_id, self.case_step)) assert True if __name__ == '__main__': unittest.main(verbosity=2)
-
新增測試類,新增執行用例方法
- 新增testcase包
- 新建test_api_case.py
# -*- coding: utf-8 -*- # @Time : 2021/12/22 13:47 # @Author : Limusen # @File : test_api_case import unittest import paramunittest from common.testcase_data_utils import TestCaseDataUtils from common.request_utils import RequestsUtils testcase_data_lists = TestCaseDataUtils().convert_data_info_list() @paramunittest.parametrized( *testcase_data_lists ) class TestApiCase(paramunittest.ParametrizedTestCase): def setParameters(self, case_id, case_step): self.case_id = case_id self.case_step = case_step def test_api_case(self): test_result = RequestsUtils().request_steps(self.case_step) self.assertTrue(test_result["check_result"]) if __name__ == '__main__': unittest.main(verbosity=2)
-
優化excel是否執行用例
- 將excel是否執行用例改成否
- 在資料轉換的時候判斷如果為是的話執行,為否的話不執行
- 修改testcase_data_utils.py
# -*- coding: utf-8 -*- # @Time : 2021/12/9 13:42 # @Author : Limusen # @File : testcase_data_utils import os from common.excel_utils import ExcelUtils current = os.path.dirname(os.path.abspath(__file__)) excel_file_path = os.path.join(current, '..', 'testcase_data', 'testcase_infos.xlsx') excel_sheet_name = "Sheet1" class TestCaseDataUtils: def __init__(self): self.ex = ExcelUtils(excel_file_path=excel_file_path, sheet_name=excel_sheet_name) def convert_data_info_dict(self): """ 將測試資料轉換成字典 :param testcase_info: :return: """ test_case_dict = {} for testcase in self.ex.get_all_excel_data(): if testcase["用例執行"] == "是": # 新增程式碼 test_case_dict.setdefault(testcase['測試用例編號'], []).append(testcase) return test_case_dict def convert_data_info_list(self): test_case_list = [] for key, value in self.convert_data_info_dict().items(): type_dict = {} type_dict["case_id"] = key type_dict["case_step"] = value test_case_list.append(type_dict) return test_case_list if __name__ == '__main__': print(TestCaseDataUtils().convert_data_info_list())
- 總結
這一章節主要引入了paramunittest引數化模組,跟優化的是否執行用例的程式碼部分,下一章講解引入測試報告模組