def run(self): Log.debug("开始执行") # 每次进入时清除db self.__db_clean() # 获取开始时间 start_time = time.time() Log.debug("2-开始时间:" + Utils.get_time(start_time)) # 执行所有用例 get_result = self.__get_runner_result() # 结束时间 end_time = time.time() Log.debug("7-结束时间" + Utils.get_time(end_time)) # 获取用例返回的各种数据 get_case_data = self.__get_case_return_data(get_result['method_names'], get_result['result']) # 生成报告 self.__build_report(start_time, end_time, get_case_data) Log.debug("9-总共用时" + str(end_time - start_time) + 's')
def __process_project_test_code(path, data): funs = [] for key in data['funName']: funs.append({"name": key, "data": data['funName'][key]}) template = Template(get_apis_code_tpl()) content = template.render(ClassName=data['className'], funs=funs) # 写入内容 Utils.write_file(path, content)
def __process_project_model_name(self, path, data): # 创建模块目录 Utils.mkdir(path) # 模块目录下面创建__init__.py self.__create_init_py(path) for key in data: filepath = path + '/' + key + '_st.py' if os.path.exists(filepath) is False: self.__process_project_test_code(filepath, data[key])
def build(self): get_data = self.get_output_field_data() # 获取template路径 code_path = os.path.dirname(__file__) + '/tpl/template.html' # 基础模板文件 template_html = Utils.open_file(code_path) html = Template(template_html).render(get_data) # 写入内容 Utils.write_file(self.report_html_path, html) # 发送邮件 if self.yaml_config.get('reportSendMail') is True: self.__send_mail(get_data)
def __send_mail(self, data): receivers = self.yaml_repore.get('receivers') subject = self.yaml_repore.get('title') host = self.yaml_repore.get('server.host') port = self.yaml_repore.get('server.port') # 获取mail_html路径 html_path = os.path.dirname(__file__) + '/tpl/mail_html.txt' # 基础模板文件 html_code = Utils.open_file(html_path) # 邮件发送内容 content = Template(html_code).render({ "title": subject, "all_case_sum": data['all_case_sum'], "success_case_sum": data['success_case_sum'], "errors_case_sum": data['errors_case_sum'], "skipped_case_sum": data['skipped_case_sum'], "report_path": str(host) + ':' + str(port) + '/report.html' }) # 发送邮件 self._mail.send(receivers, subject, content)
def get_cases_content_html(self, data): table = self.yaml_repore.get('table') new_titles = [] for k, v in table.items(): obj = {'name': k, 'text': v} new_titles.append(obj) content = Utils.open_file( os.path.dirname(__file__) + '/tpl/content.html') return Template(content).render(datas=data, titles=new_titles)
def get_output_field_data(self): title = self.yaml_repore.get("title") # 所有 all_case = self.__get_case_info(self.case_data, 'all') # 成功 success = self.__get_case_info(self.case_data, 'success') # 错误 errors = self.__get_case_info(self.case_data, 'error') # 跳过 skipped = self.__get_case_info(self.case_data, 'skipped') data = { 'title': title, # str 'start_time': Utils.get_time(self.start_time), # str 'end_time': Utils.get_time(self.end_time), # str 'all_case_sum': all_case['len'], # int 'success_case_sum': success['len'], # int 'errors_case_sum': errors['len'], # int 'skipped_case_sum': skipped['len'], # int } # html data['chart_html'] = self.__get_cases_chart_html(data) # html data['nav_html'] = self.__get_cases_nav_html(data) case_info = [{ 'name': 'all_cases', 'list': all_case['cases'] }, { 'name': 'success_cases', 'list': success['cases'] }, { 'name': 'errors_cases', 'list': errors['cases'] }, { 'name': 'skipped_cases', 'list': skipped['cases'] }] content_html = self.get_cases_content_html(case_info) data['content_html'] = content_html return data
def __init__(self, start_time, end_time, case_data): # 获取项目目录 self.project_path = os.path.dirname(os.path.dirname(__file__)) self.start_time = start_time self.end_time = end_time self.case_data = case_data self.report_html_path = self.project_path + '/temp/report.html' Utils.remove_file(self.report_html_path) # yaml init _yaml_path = self.project_path + '/config' self.yaml_config = Yaml(_yaml_path, 'config') self.yaml_apis = Yaml(_yaml_path, 'apis') self.yaml_mail = Yaml(_yaml_path, 'mail') self.yaml_repore = Yaml(_yaml_path, 'repore') self.yaml_response = Yaml(_yaml_path, 'response') # 初始化邮箱 self._mail = Mail(self.yaml_mail.get('host'), self.yaml_mail.get('port'), self.yaml_mail.get('user'), self.yaml_mail.get('passwd'))
def __get_cases_nav_html(self, data): cases = self.yaml_repore.get("cases") new_data = [] for k, v in cases.items(): obj = {'text': v} if k == 'all': obj['num'] = data['all_case_sum'] obj['bg'] = '#428bca' elif k == 'success': obj['num'] = data['success_case_sum'] obj['bg'] = '#3c763d' elif k == 'error': obj['num'] = data['errors_case_sum'] obj['bg'] = '#FF4000' else: obj['num'] = data['skipped_case_sum'] obj['bg'] = '#0099CC' new_data.append(obj) return Template( Utils.open_file(os.path.dirname(__file__) + '/tpl/nav.html')).render(datas=new_data)
def __create_init_py(filepath): # 获取写入路径 init_path = filepath + '/__init__.py' # init 是个空文件 Utils.write_file(init_path, '')
def __get_cases_chart_html(self, data): return Template( Utils.open_file(os.path.dirname(__file__) + '/tpl/chart.html')).render(data)