测试数据维护到excel
第一步:操作excel
import openpyxl # 操作excel class DoExcel: def __init__(self, file_name, sheet_name): self.file_name = file_name self.sheet_name = sheet_name def get_data(self): '''获取需要打开的excel文件和操作的表单''' try: wb = openpyxl.load_workbook(self.file_name) sheet = wb[self.sheet_name] except Exception as e: print("excel文件或sheet不存在:{0}".format(e)) raise e # 存储从 excel里面读取的数据 test_data = [] for i in range(2, sheet.max_row + 1): sub_data = {} # 将excel数据一个个读取出来,放到字典里面 sub_data['method'] = sheet.cell(i, 2).value sub_data['url'] = sheet.cell(i, 3).value sub_data['data'] = sheet.cell(i, 4).value sub_data['headers'] = sheet.cell(i, 5).value sub_data['excepted'] = sheet.cell(i, 6).value test_data.append(sub_data) return test_data if __name__ == '__main__': excel = DoExcel('testData_1.xlsx', 'Sheet1').get_data() print(excel)
第二步:维护测试用例
import unittest from util.HttpRequest import HttpRequest from ddt import ddt,data,unpack from test_excel_demo.do_excel_ddt.do_excel import DoExcel from test_excel_demo.do_excel_ddt.get_data import GetData # 获取测试用例数据 test_data = DoExcel('testData_1.xlsx', 'Sheet1').get_data() # 维护测试用例 @ddt class TestLogin(unittest.TestCase): @data(*test_data) def test_login_ok(self,item): print(item) user_token = getattr(GetData, 'user_token') res = HttpRequest().http_request(item['method'], item['url'], eval(item['data']), eval(item['headers'])) print(res.json()) self.assertEquals(item['excepted'], res.json()['code'])
知识点:eval() 方法是变成原有的类型,如 t = ‘[1,2,3]’ --> eval(t) 得到的结果为:[1,2,3]
第三步:加载测试用例、生成测试报告
import unittest from util.HTMLTestReportCN import HTMLTestRunner from test_excel_demo.do_excel_ddt.test_http import TestLogin # 测试用例加载和生成测试报告 class TestSuitCase: def test_suit(self): # 加载用例 suit = unittest.TestSuite() loader = unittest.TestLoader().loadTestsFromTestCase(TestLogin) suit.addTest(loader) # 生成测试报告 with open('text_report_2.html', 'wb') as file: # 生成测试报告 runner = HTMLTestRunner(stream=file, title='单元测试报告', description='接口测试', tester='罗方') # 跑用例,生成测试报告 runner.run(suit) if __name__ == '__main__': TestSuitCase().test_suit()