def write_all_back(self, result_data, test_result_data, file_name=None): if file_name is None: wb = load_workbook(test_case_path) else: wb = load_workbook(base_path + 'test_data' + file_name) excel_row = eval(ReadConfig().get_config(case_config_path, 'Excel_row', 'excel_row')) mode = eval(ReadConfig.get_config(case_config_path, 'Mode', 'mode')) for key in mode: sheet = wb[key] if mode[key] == 'all': list_range = range(1, sheet.max_row) else: list_range = mode[key] k = 0 for i in list_range: i = i + 1 sheet.cell(i, excel_row['result']).value = result_data[k] sheet.cell( i, excel_row['test_result']).value = test_result_data[k] k = k + 1 if file_name is None: wb.save(test_case_path) else: wb.save(base_path + 'test_data' + file_name)
def get_data(self, file_name=None): global new_data excel_row = eval(ReadConfig().get_config(case_config_path, 'Excel_row', 'excel_row')) if file_name is None: wb = load_workbook(test_case_path) else: wb = load_workbook(base_path + 'test_data' + file_name) mode = eval(ReadConfig.get_config(case_config_path, 'Mode', 'mode')) test_data = [] for key in mode: # print(key) sheet = wb[key] if mode[key] == 'all': list_range = range(1, sheet.max_row) else: list_range = mode[key] for i in list_range: i = i + 1 new_data = sheet.cell(i, excel_row['data']).value if sheet.cell(i, excel_row['data']).value.find('${admin}') != -1: new_admin = getattr(GetAdmin, 'admin') + str_time_mdhms setattr(GetAdmin, 'admin', new_admin) new_data = DoRegx().do_regx( sheet.cell(i, excel_row['data']).value, GetAdmin) if sheet.cell( i, excel_row['data']).value.find('${student}') != -1: new_student = getattr(GetStudent, 'student') + str_time_mdhms setattr(GetStudent, 'student', new_student) new_data = DoRegx().do_regx( sheet.cell(i, excel_row['data']).value, GetStudent) if sheet.cell( i, excel_row['data']).value.find('${teacher}') != -1: new_student = getattr(GetTeacher, 'teacher') + str_time_mdhms setattr(GetTeacher, 'teacher', new_student) new_data = DoRegx().do_regx( sheet.cell(i, excel_row['data']).value, GetTeacher) row_data = { 'caseid': sheet.cell(i, excel_row['caseid']).value, 'url': sheet.cell(i, excel_row['url']).value, 'data': eval(new_data), 'title': sheet.cell(i, excel_row['title']).value, 'method': sheet.cell(i, excel_row['method']).value, 'data_type': sheet.cell(i, excel_row['data_type']).value, 'expect': sheet.cell(i, excel_row['expect']).value, 'test_result': sheet.cell(i, excel_row['test_result']).value, 'test_sql': sheet.cell(i, excel_row['test_sql']).value, 'sheet_name': key } test_data.append(row_data) return test_data
def get_data(cls, file_name): wb = load_workbook(file_name) # linux命令 mode = eval( ReadConfig.get_config(project_path.case_config_path, 'MODE', 'mode')) tel = getattr(GetData, "NoRegTel") #从GetData拿到的手机号 test_data = [] for key in mode: #遍历这个存在配置文件里面的字典 sheet = wb[key] #表单名 if mode[key] == 'all': for i in range(2, sheet.max_row + 1): row_data = {} #字典 row_data["case_id"] = sheet.cell(i, 1).value row_data["url"] = sheet.cell(i, 2).value row_data["data"] = sheet.cell(i, 3).value # if sheet.cell(i,3).value.find("${tel_1}")!=-1: # row_data["data"] = sheet.cell(i, 3).value.replace("${tel_1}",tel) # elif sheet.cell(i,3).value.find("${tel}")!=-1: # row_data["data"] = sheet.cell(i, 3).value.replace("${tel_1}",tel) # else: # row_data["data"]=sheet.cell(i,3).value row_data["title"] = sheet.cell(i, 4).value row_data["http_method"] = sheet.cell(i, 5).value row_data["excepted"] = sheet.cell(i, 6).value row_data["sheet_name"] = key test_data.append(row_data) # cls.updata_tel(tel+2,file_name,"init")#更新手机号 # cls.updata_tel(tel,file_name,"init")#更新手机号 else: for case_id in mode[key]: row_data = {} # 字典 row_data["case_id"] = sheet.cell(case_id + 1, 1).value #行号 row_data["url"] = sheet.cell(case_id + 1, 2).value # row_data["data"] = sheet.cell(case_id+1, 3).value if sheet.cell(i, 3).value.find("${tel_1}") != -1: row_data["data"] = sheet.cell(i, 3).value.replace( "${tel_1}", tel) elif sheet.cell(i, 3).value.find("${tel}") != -1: row_data["data"] = sheet.cell(i, 3).value.replace( "${tel_1}", tel) else: row_data["data"] = sheet.cell(i, 3).value row_data["title"] = sheet.cell(case_id + 1, 4).value row_data["http_method"] = sheet.cell(case_id + 1, 5).value row_data["excepted"] = sheet.cell(case_id + 1, 6).value test_data.append(row_data) cls.updata_tel(tel + 2, file_name, "init") #更新手机号 return test_data
def get_data_notice(cls, file_name): wb = load_workbook(file_name) # mode = eval(ReadConfig.get_config(project_path.case_config_path, "MODE", "mode")) mode = eval( ReadConfig.get_config(project_path.case_config_path, "MODE", "mode")) test_data = [] mode_key = set(mode) for key in mode_key: if key == "notice": sheet = wb[key] if mode[key] == "all": for i in range(2, sheet.max_row + 1): row_data = {} # 字典 row_data["case_id"] = sheet.cell(i, 1).value row_data["model"] = sheet.cell(i, 2).value row_data["title"] = sheet.cell(i, 3).value row_data["url"] = sheet.cell(i, 4).value row_data["params"] = sheet.cell(i, 5).value row_data["header"] = sheet.cell(i, 6).value row_data["http_method"] = sheet.cell(i, 7).value row_data["data"] = sheet.cell(i, 8).value row_data["excepted_code"] = sheet.cell(i, 9).value row_data["sheet_name"] = key test_data.append(row_data) else: for case_id in mode[key]: row_data = {} # 字典 row_data["case_id"] = sheet.cell(case_id + 1, 1).value # 行号 row_data["model"] = sheet.cell(case_id + 1, 2).value row_data["title"] = sheet.cell(case_id + 1, 3).value row_data["url"] = sheet.cell(case_id + 1, 4).value row_data["params"] = sheet.cell(case_id + 1, 5).value row_data["header"] = sheet.cell(case_id + 1, 6).value row_data["http_method"] = sheet.cell(case_id + 1, 7).value row_data["data"] = sheet.cell(case_id + 1, 8).value row_data["excepted_code"] = sheet.cell(case_id + 1, 9).value test_data.append(row_data) return test_data
def send(): # html报告地址 with open(test_report_path, 'r', encoding="utf-8") as f: content_html = f.read() mail_config = eval(ReadConfig.get_config(mail_config_path, 'Mail', 'mail')) mail = { 'subject': mail_config['subject'], # Anything you want. 'content_text': mail_config['content_text'], # Anything you want. # 'content_html': content_html, # Body html 'attachments': mail_config['attachments'], # Absolute path will be better. } server = zmail.server(mail_config['sender'], mail_config['auth'], smtp_host=mail_config['smtp_host'], smtp_port=mail_config['smtp_port']) server.send_mail(mail_config['receiver'], mail, cc=mail_config['cc'])
def get_data(file_name): wb = load_workbook(file_name) mode = eval(ReadConfig.get_config(test_config_path, 'MODE', 'mode')) test_data = [] for key in mode: sheet = wb[key] if mode[key] == 'all': for i in range(2, sheet.max_row + 1): row_data = dict() row_data['case_id'] = sheet.cell(i, 1).value row_data['url'] = sheet.cell(i, 2).value # if sheet.cell(i, 3).value.find('${tel}') != -1: # row_data['data'] = sheet.cell(i, 3).value.replace('${tel}', str(tel)) # tel = tel + 1 # elif sheet.cell(i, 3).value.find('${admin_tel}') != -1: # row_data['data'] = sheet.cell(i, 3).value.replace('${admin_tel}', str(getattr(GetData, 'admin_tel'))) # elif sheet.cell(i, 3).value.find('${loan_member_id}') != -1: # row_data['data'] = sheet.cell(i, 3).value.replace('${loan_member_id}', str(getattr(GetData, 'loan_member_id'))) # elif sheet.cell(i, 3).value.find('${normal_tel}') != -1: # row_data['data'] = sheet.cell(i, 3).value.replace('${normal_tel}', str(getattr(GetData, 'normal_tel'))) # elif sheet.cell(i, 3).value.find('${memberID}') != -1: # row_data['data'] = sheet.cell(i, 3).value.replace('${memberID}', str(getattr(GetData, 'memberID'))) # else: # row_data['data'] = sheet.cell(i, 3).value row_data['data'] = sheet.cell(i, 3).value row_data['title'] = sheet.cell(i, 4).value row_data['http_method'] = sheet.cell(i, 5).value row_data['header'] = sheet.cell(i, 6).value row_data['sheet_name'] = key test_data.append(row_data) else: for case_id in mode[key]: row_data = dict() row_data['case_id'] = sheet.cell(case_id + 1, 1).value row_data['url'] = sheet.cell(case_id + 1, 2).value row_data['data'] = sheet.cell(case_id + 1, 3).value row_data['title'] = sheet.cell(case_id + 1, 4).value row_data['http_method'] = sheet.cell(case_id + 1, 5).value row_data['header'] = sheet.cell(case_id + 1, 6).value row_data['sheet_name'] = key test_data.append(row_data) return test_data
def get_data(self): wb = load_workbook(self.file_name) # sheet = wb[self.sheet_name] #读取配置文件只 mode = eval(ReadConfig.get_config(case_config_path, 'MODE', 'mode')) test_data = [] for key in mode: #遍历存在这个字典里面的字典 sheet = wb[key] if mode[key] == 'all': for i in range(2, sheet.max_row + 1): sub_data = {} sub_data["case_id"] = sheet.cell(i, 1).value sub_data["module"] = sheet.cell(i, 2).value sub_data["title"] = sheet.cell(i, 3).value sub_data["method"] = sheet.cell(i, 4).value sub_data["url"] = sheet.cell(i, 5).value sub_data["data"] = sheet.cell(i, 6).value sub_data["expected"] = sheet.cell(i, 7).value sub_data["sheet_name"] = key test_data.append(sub_data) else: for case_id in mode[key]: i = case_id + 1 #行号 sub_data = {} sub_data["case_id"] = sheet.cell(i, 1).value sub_data["module"] = sheet.cell(i, 2).value sub_data["title"] = sheet.cell(i, 3).value sub_data["method"] = sheet.cell(i, 4).value sub_data["type"] = sheet.cell(i, 5).value #5 sub_data["url"] = sheet.cell(i, 6).value sub_data["data"] = sheet.cell(i, 7).value sub_data["get_value"] = sheet.cell(i, 8).value #8 sub_data["expected"] = sheet.cell(i, 9).value sub_data["sheet_name"] = key test_data.append(sub_data) return test_data
def get_data(cls,file_name): wb = load_workbook(file_name) mode = eval(ReadConfig.get_config(project_path.case_config_path,"MODE","mode")) tel =getattr(GetData,"NoRegTel") test_data= [] for key in mode:#遍历这个存在配置文件里面的字典 sheet = wb[key]#表单名 if mode[key]=="all": for i in range(2,sheet.max_row+1): row_data = {}#字典 row_data["case_id"] = sheet.cell(i, 1).value row_data["model"] = sheet.cell(i, 2).value row_data["title"] = sheet.cell(i, 3).value row_data["url"] = sheet.cell(i, 4).value row_data["params"] = sheet.cell(i, 5).value row_data["header"] = sheet.cell(i, 6).value row_data["http_method"] = sheet.cell(i, 7).value row_data["data"] = sheet.cell(i, 8).value row_data["excepted_code"] = sheet.cell(i, 9).value row_data["sheet_name"] = key test_data.append(row_data) else: for case_id in mode[key]: row_data = {} # 字典 row_data["case_id"] = sheet.cell(case_id+1, 1).value#行号 row_data["model"] = sheet.cell(case_id+1, 2).value row_data["title"] = sheet.cell(case_id+1, 3).value row_data["url"] = sheet.cell(case_id+1, 4).value row_data["params"] = sheet.cell(case_id+1, 5).value row_data["header"] = sheet.cell(case_id+1, 6).value row_data["http_method"] = sheet.cell(case_id+1, 7).value row_data["data"] = sheet.cell(case_id+1, 8).value row_data["excepted_code"] = sheet.cell(case_id+1, 9).value test_data.append(row_data) # cls.updata_tel(tel+2,file_name,"init")#更新手机号 return test_data
def get_data(file_name): wb = load_workbook(file_name) mode = eval( ReadConfig.get_config(project_path.case_config_path, 'MODE', 'mode')) # name="self:261993005056/123" test_data = [] for key in mode: #遍历这个存在配置文件里面的字典 sheet = wb[key] #表单名 if mode[key] == 'all': for i in range(2, sheet.max_row + 1): row_data = {} #字典 row_data['case_id'] = sheet.cell(i, 1).value row_data['url'] = sheet.cell(i, 2).value row_data['data'] = sheet.cell(i, 3).value # if sheet.cell(i,3).value.find('${name}')!=-1: #有找到这个${name} # row_data['data']=sheet.cell(i,3).value.replace('${name}',str(name)) # else: #如果没有找到的话 # row_data['data']=sheet.cell(i,3).vlaue row_data['title'] = sheet.cell(i, 4).value row_data['http_method'] = sheet.cell(i, 5).value row_data['expected'] = sheet.cell(i, 6).value row_data['sheet_name'] = key test_data.append(row_data) else: for case_id in mode[key]: row_data = {} # 字典 row_data['case_id'] = sheet.cell(case_id + 1, 1).value row_data['url'] = sheet.cell(case_id + 1, 2).value row_data['data'] = sheet.cell(case_id + 1, 3).value row_data['title'] = sheet.cell(case_id + 1, 4).value row_data['http_method'] = sheet.cell(case_id + 1, 5).value row_data['expected'] = sheet.cell(case_id + 1, 6).value row_data['sheet_name'] = key test_data.append(row_data) return test_data
def setUpClass(cls) -> None: """ 登录获取(后台)token :return: """ # 获取主机地址 HOST = ReadConfig.get_config(case_config_path, 'ADDRESS', 'host') url = f'{HOST}/api/auth/oauth/user/token' param = {"username": "******", "password": "******"} header = { "Content-Type": "application/json;charset=UTF-8", "Authorization": "Basic QmFzZVBsYXRmb3JtOjEyMzQ1Ng==" } res = HttpRequest().http_request(url, param, 'post', 'params', headers=header) setattr(GetToken, "Token", res.json()['value']) # 反射设置token值 get_header = { "Content-Type": "application/json;charset=UTF-8", "Authorization": "Bearer " + getattr(GetToken, "Token") } setattr(GetToken, "header", get_header) # 反射设置header值
class DoExcel: sheet = None wb = None mode = eval(ReadConfig.get_config(case_config_path, "MODE", "mode")) # 连接到配置文件字典,eval是因为读取到的都是字符串 #读取excel数据 def get_data(self, file_name): global wb wb = load_workbook(file_name) # 打开excel test_data = [] for key in DoExcel.mode: #遍历这个存在配置文件里面的字典 global sheet sheet = wb[key] #key表单名 不需要传参 if DoExcel.mode[key] == "all": for i in range(2, sheet.max_row + 1): row_data = {} row_data["case_id"] = sheet.cell(i, 1).value row_data["module"] = sheet.cell(i, 2).value row_data["title"] = sheet.cell(i, 3).value row_data["headers"] = sheet.cell(i, 4).value row_data["url"] = sheet.cell(i, 5).value row_data["data"] = sheet.cell(i, 6).value row_data["expected"] = sheet.cell(i, 7).value row_data["method"] = sheet.cell(i, 8).value row_data["sheet_name"] = key test_data.append(row_data) else: for case_id in DoExcel.mode[key]: row_data = {} row_data["case_id"] = sheet.cell(case_id + 1, 1).value row_data["module"] = sheet.cell(case_id + 1, 2).value row_data["title"] = sheet.cell(case_id + 1, 3).value row_data["headers"] = sheet.cell(case_id + 1, 4).value row_data["url"] = sheet.cell(case_id + 1, 5).value row_data["data"] = sheet.cell(case_id + 1, 6).value row_data["expected"] = sheet.cell(case_id + 1, 7).value row_data["method"] = sheet.cell(case_id + 1, 8).value row_data["sheet_name"] = key test_data.append(row_data) return test_data #将用例执行后的结果写回excel def write_back(self, file_name, sheet_name, i, result, testresult): #写回excel数据 sh = wb[sheet_name] #####字体颜色####### unexecuted_color = Font(u'宋体', size=9, bold=True, italic=False, strike=False, color='3232CD') pass_color = Font(u'宋体', size=12, bold=True, italic=False, strike=False, color='228B22') pass_color1 = Font(u'宋体', size=6, bold=True, italic=False, strike=False, color='228B22') fail_color = Font(u'宋体', size=9, bold=True, italic=False, strike=False, color='FF0000') sh.cell(i, 9).value = result sh.cell(i, 11).value = time.strftime('%m-%d %H:%M', time.localtime(time.time())) #sheet.cell(i, 10).value = testresult if testresult == "pass": sh.cell(i, 10, value="pass").font = pass_color elif testresult == "pass,但是未获取到下一个接口所用数据": sh.cell(i, 10, value="pass,但是未获取到下一个接口所用数据").font = pass_color1 elif testresult == "Failed": sh.cell(i, 10, value="Failed").font = fail_color #区分mode读取的是all还是数字列表 if DoExcel.mode[sheet_name] != "all": for case_id in range(2, sh.max_row): if case_id not in DoExcel.mode[sheet_name]: sh.cell(case_id + 1, 9).value = "" sh.cell(case_id + 1, 10, value="用例未执行").font = unexecuted_color #sheet.cell(case_id + 1, 10).value = "用例未执行" sh.cell(case_id + 1, 11).value = "" #保存和关闭excel def save_close_excel(self, file_name=test_case_path): wb.save(file_name) wb.close()
def __init__(self): db_config = eval(ReadConfig.get_config(mysql_config_path, 'Config', 'db_config')) db = pymysql.connect(db_config["host"], db_config["user"], db_config["password"], db_config["database"], port=db_config["port"]) self.cursor = db.cursor()
def test_api(self, item): # 获取主机地址 HOST = ReadConfig.get_config(case_config_path, 'ADDRESS', 'host') item['url'] = HOST + item['url'] # 获取url #提交data为空,关联值get_value不为空 if item['data'] == None and item['get_value'] != None: if type(eval(item['get_value'])) == dict: res = HttpRequest().http_request(item['url'], None, item['method'], item['type'], headers=getattr( GetToken, "header")) if res.json()['msg'] == 'OK': get_data = eval(item['get_value']) for keys in get_data.keys(): key = keys value = get_data[key] add = 'res.json()' + value add = eval(add) OperaConfig.write_config(file_path, key, key, add) try: self.assertEqual(item['expected'], res.json()['msg']) TestResult = 'PASS' except AssertionError as e: TestResult = 'FAIL' print("执行用例出错:{0}".format(e)) raise e finally: #写回结果(str(res.json()),excel只能写字符串,数字,不能写字典 DoExcel(test_case_path, item['sheet_name']).write_back( item['case_id'] + 1, str(res.json()), TestResult) print("获取到的结果是:{0}".format(res.json())) # 提交data不为空,关联值get_value不为空(字符串:使用值) elif item['data'] != None and item['get_value'] != None and type( item['get_value']) == str: data1 = OperaConfig.read_config(file_path, item['get_value'], item['get_value']) #获取配置文件值 if item['url'].find(item['get_value']) != -1: url = item['url'].replace("{{" + item['get_value'] + "}}", data1) res = HttpRequest().http_request(url, eval(item['data']), item['method'], item['type'], headers=getattr( GetToken, "header")) elif item['data'] != None and item['data'].find( item['get_value']) != -1: data = item['data'].replace("{{" + item['get_value'] + "}}", data1) res = HttpRequest().http_request(item['url'], eval(data), item['method'], item['type'], headers=getattr( GetToken, "header")) try: self.assertEqual(item['expected'], res.json()['msg']) TestResult = 'PASS' except AssertionError as e: TestResult = 'FAIL' print("执行用例出错:{0}".format(e)) raise e finally: #写回结果(str(res.json()),excel只能写字符串,数字,不能写字典 DoExcel(test_case_path, item['sheet_name']).write_back(item['case_id'] + 1, str(res.json()), TestResult) print("获取到的结果是:{0}".format(res.json())) # 提交data为空,关联值get_value为空(普通get) elif item['data'] == None and item['get_value'] == None: res = HttpRequest().http_request(item['url'], None, item['method'], item['type'], headers=getattr( GetToken, "header")) try: self.assertEqual(item['expected'], res.json()['msg']) TestResult = 'PASS' except AssertionError as e: TestResult = 'FAIL' print("执行用例出错:{0}".format(e)) raise e finally: # 写回结果(str(res.json()),excel只能写字符串,数字,不能写字典 DoExcel(test_case_path, item['sheet_name']).write_back(item['case_id'] + 1, str(res.json()), TestResult) print("获取到的结果是:{0}".format(res.json())) # 其他 else: res = HttpRequest().http_request(item['url'], eval(item['data']), item['method'], item['type'], headers=getattr( GetToken, "header")) try: self.assertEqual(item['expected'], res.json()['msg']) TestResult = 'PASS' except AssertionError as e: TestResult = 'FAIL' print("执行用例出错:{0}".format(e)) raise e finally: #写回结果(str(res.json()),excel只能写字符串,数字,不能写字典 DoExcel(test_case_path, item['sheet_name']).write_back(item['case_id'] + 1, str(res.json()), TestResult) print("获取到的结果是:{0}".format(res.json()))
def get_data(cls, file_name): wb = load_workbook(file_name) mode = eval( ReadConfig.get_config(project_path.test_config_path, 'MODE', 'mode')) tel = getattr(GetData, 'NoRegTel') # 利用python查询数据库的方式,去拿到最大的手机号——可以加到这里,也可以加到get_data里面 test_data = [] for key in mode: # 遍历这个存在配置文件里面的字典 sheet = wb[key] # key是表单名sheet_name if mode[key] == 'all': for i in range(2, sheet.max_row + 1): row_data = {} row_data['case_id'] = sheet.cell(i, 1).value row_data['url'] = sheet.cell(i, 2).value # row_data['data'] = sheet.cell(i, 3).value # 做手机号的数据替换 if sheet.cell( i, 3).value.find('${tel}') != -1: # 有找到这个字符串${tel} row_data['data'] = sheet.cell(i, 3).value.replace( '${tel}', str(tel)) tel = tel + 1 # 每次完成tel调用后 就加1 else: # 没有找到的话 row_data['data'] = DoRegex.do_regex( sheet.cell(i, 3).value) if sheet.cell(i, 4).value != None: row_data['check_sql'] = DoRegex.do_regex( sheet.cell(i, 4).value) else: row_data['check_sql'] = sheet.cell(i, 4).value row_data['title'] = sheet.cell(i, 5).value row_data['http_method'] = sheet.cell(i, 6).value row_data['expected'] = sheet.cell(i, 7).value row_data['sheet_name'] = key test_data.append(row_data) cls.update_tel(project_path.test_case_path, 'init', tel + 2) # 更新excel中的手机号数据 else: for case_id in mode[key]: row_data = {} row_data['case_id'] = sheet.cell(case_id + 1, 1).value row_data['url'] = sheet.cell(case_id + 1, 2).value # row_data['data'] = sheet.cell(case_id+1, 3).value if sheet.cell( case_id + 1, 3).value.find('${tel}') != -1: # 有找到这个字符串${tel} row_data['data'] = sheet.cell(case_id + 1, 3).value.replace( '${tel}', str(tel)) tel = tel + 1 else: row_data['data'] = DoRegex.do_regex( sheet.cell(case_id + 1, 3).value) if sheet.cell(i, 4).value != None: row_data['check_sql'] = DoRegex.do_regex( sheet.cell(case_id + 1, 4).value) else: row_data['check_sql'] = sheet.cell(case_id + 1, 4).value row_data['title'] = sheet.cell(case_id + 1, 5).value row_data['http_method'] = sheet.cell(case_id + 1, 6).value row_data['expected'] = sheet.cell(case_id + 1, 7).value row_data['sheet_name'] = key test_data.append(row_data) cls.update_tel(project_path.test_case_path, 'init', tel) # 更新excel中的手机号数据 return test_data