import xlrd import xlwt from xlutils import copy import requests import json import logging from db.SqlHandler import MySqlDb from log.logHandler import LogHandler def login(): url = 'http://124.220.179.221:8081/cms/manage/loginJump.do' data = { "userAccount": "admin", "loginPwd": "123456" } response = requests.request(method='post', url=url, data=data) return response.cookies Log = LogHandler().log_fun() class ExcelSet: # 专门读写excel def __init__(self, login): self.excel_path = '../day16/test2.xls' # 文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。 self.work_book = xlrd.open_workbook(self.excel_path, formatting_info=True) self.work_sheet = self.work_book.sheet_by_name('示例') # 通过名称获取sheet self.cookies = login() # 拷贝 self.new_work_book = copy.copy(self.work_book) # 打开拷贝的excel 的sheet self.new_work_sheet = self.new_work_book.get_sheet(0) def read_excel_data(self): for row in range(1, self.work_sheet.nrows): case_id = self.work_sheet.cell_value(row, 0) # 行 列 desc = self.work_sheet.cell_value(row, 1) # url = self.work_sheet.cell_value(row, 2) # method = self.work_sheet.cell_value(row, 3) # header = self.work_sheet.cell_value(row, 4) # data = self.work_sheet.cell_value(row, 5) # setup_sql = self.work_sheet.cell_value(row, 6) # 前置sql teardown_sql = self.work_sheet.cell_value(row, 7) # 后置sql except_result = self.work_sheet.cell_value(row, 8) # 预期结果 response_result = self.work_sheet.cell_value(row, 9) # 实际结果 except_sql = self.work_sheet.cell_value(row, 10) # 预期数据库返回的结果 if not url or not data: logging.error(f'用例{case_id},{desc},url或body为空') continue my_test_case = MyTestCase(case_id, desc, url, method, header, data, except_result, response_result, self.cookies, setup_sql) ret = my_test_case.test_01_cms() if ret.get('msg') == eval(except_result).get('msg'): # 第一层校验 logging.info(f'用例{case_id},{desc},第一层校验通过') # 第二层校验 if teardown_sql and except_sql: ret_sql = my_test_case.check_sql(teardown_sql) if ret_sql: assert ret_sql[0][0] == except_sql logging.info(f'用例{case_id},{desc},测试通过!') self.write_excel_data(row, '测试成功') else: logging.error(f'用例{case_id},{desc},第一层校验失败!!!') self.write_excel_data(row, '测试失败') def write_excel_data(self, row, msg): """ 写入数据 :return: """ # self.new_work_sheet.write('行下标','列下标','内容') # 写入数据 到新的excel里面 self.new_work_sheet.write(row, 9, msg) # 保存excel self.new_work_book.save('result.xls') class MyTestCase: my_sql = MySqlDb() def __init__(self, case_id, desc, url, method, header, data, except_result, response_result, cookies, setup_sql, ): self.base_url = 'http://124.220.179.221:8081' self.case_id = case_id self.desc = desc self.url = url self.method = method self.header = header # self.data = json.loads(data) self.data = eval(data) self.except_result = except_result self.response_result = response_result self.cookies = cookies self.setup_sql = setup_sql def test_01_cms(self): self.check_sql(self.setup_sql) response = requests.request(method=self.method, url= self.base_url+self.url, data=self.data, cookies=self.cookies) return response.json() def check_sql(self, sql): """ 处理sql :return: """ if sql.lower().startswith('select'): select_sql = self.my_sql.select_data(sql) return select_sql elif sql.lower().startswith('delete'): del_sql = self.my_sql.del_data(sql) return del_sql elif sql.lower().startswith('insert'): insert_sql = self.my_sql.insert_data(sql) return insert_sql elif sql.lower().startswith('update'): update_sql = self.my_sql.update_data(sql) return update_sql else: logging.error(f'用例{self.case_id},{self.desc}接口,sql语句错误!') if __name__ == '__main__': e = ExcelSet(login) e.read_excel_data()