def __init__(self): self._str_now_time = "0.1" self._wechat_push = global_config.getRaw('config', 'wechat_enable') self._email_push = global_config.getRaw('config', 'email_enable') self._wechat_type = global_config.getRaw('config', 'wechat_type') self._api = global_config.getRaw('config', 'api') self._account_cnt = global_account.row self._report = Report()
def report_pdf(request, project_id, component_id, threshold): threshold = float(threshold) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=%s_%s.pdf' %( project_id, component_id) with BytesIO() as temp: doc = SimpleDocTemplate(temp) content = Report.act_report(project_id, component_id, doc.width, threshold) doc.build(content) response.write(temp.getvalue()) return response
def test_should_create_report() -> None: report = Report() report.set_context({'test': 'this is a test'}) report.append_event('sample record added', {'random': str(uuid.uuid4())}) a = json.loads(report.report()) assert_that(a[0]).contains_key('id') assert_that(a[0]).contains_key('random') assert_that(a[0]).contains_key('timestamp') assert_that(a[0]).contains_entry({'context': {'test': 'this is a test'}}) assert_that(a[0]).contains_entry({'name': 'sample record added'})
def run(self): try: el.get_elements(self.elements_file) except: logger.exception("**** 解析文件失败 ****") else: try: test_suit = testsuit_format(self.test_case_workbook.read(self.case_sheet_name)) logger.info("**** 从Excel导入用例套件成功 ****") except: logger.exception("**** 从Excel导入用例套件失败 ****") else: ts = TestSuit(test_suit) ts.run() self.report_workbook.write(self.case_sheet_name, g.step_result) report = Report('report/report.xlsx') report.create_report_excel(g.case_result) report.create_summary_excel([g.case_sum_num, g.case_run_num, g.case_result]) report.close_workbook()
from common.handleCase import HandleCase, get_case_path from common.httputils import Http from common.parseConfig import ParseConfig from common.report import get_now import string import datetime, time from common.report import Report import json import re from common.config import * import random pat = re.compile("DIS4=(.*?);") log = Log().getLog() pc = ParseConfig() report = Report() # 测试报告实例 server_database = get_base_info(pc.get_info("ServerDatabase")) con_server = ConMysql(server_database) # 服务器数据库链接 con = ConMysql() # 本地数据库连接对象 def generate_random_str(randomlength=16): """ 生成一个指定长度的随机字符串 """ random_str = '' base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789' length = len(base_str) - 1 for i in range(randomlength): random_str += base_str[random.randint(0, length)]
def test_report(self, url, data, expect): resp = Report().do_report(url, data) content = resp.text self.assertEqual(content, expect)
def wrapper(type): print("Report %s registered by %s" % (name, type)) Report.registerReport(name, type) pass
def run(): global cid, describe, host, method, params, checkPints, con, relatedApi, relatedParams, apiInfo, sqlStatement, databaseExpect, sqlResult ''' 是否为第一条用例,每次执行是获取第一条用例执行的headers信息写入配置文件 之后接口测试用例中如果headers信息为空,则自动调用配置文件中的headers信息 ''' defaultHeaders = get_default_headers() # 头信息 # 开始测试之前先清除数据库前一次测试储存的数据 con.truncate_data("testCase") con.truncate_data("testResult") con.truncate_data("apiInfo") # 测试结果集 resultSet = [] start_time = time.time() # 获取所有用例 cases = HandleCase().get_cases() for case in cases: # 将用例存入数据库临时保存 con.insert_data("testcase", **case) # 将接口数据插入数据库apiInfo表中暂时保存 apiInfo = {"apiId": int(case["apiId"]), "apiHost": case["apiHost"], "apiParams": case["apiParams"], "method": case["method"], "relatedApi": case["relatedApi"], "relatedParams": case["relatedParams"]} # 如果数据库中不存在apiId的接口,则插入 if not con.query_all("select * from apiInfo where apiId={}".format(apiInfo["apiId"])): con.insert_data("apiInfo", **apiInfo) for case in cases: allRelatedApi = [] # 所有关联api的信息 result = {} relatedApi = case["relatedApi"] # relatedParams = case["relatedParams"] cid = case["caseId"] log.info("正在执行第{}条用例".format(cid)) describe = str(case["caseDescribe"]) host = str(case["apiHost"]) checkPints = case["expect"] method = str(case["method"]) params = str(case["apiParams"]) headers = case["apiHeaders"] sqlStatement = str(case["sqlStatement"]) databaseExpect = case["databaseExpect"] result["caseId"] = cid caseApi = con.query_one("select * from apiInfo where apiId={}".format(cid)) # 用例对应的api信息 allRelatedApi.append(caseApi) result["caseDescribe"] = describe result["apiHost"] = host # 如果用例中headers信息没写,则调用配置文件中的headers信息 if headers: headers = json.loads(headers, encoding="utf8") else: if host != "/s5/create_user": headers = defaultHeaders else: headers = "" if databaseExpect: result["databaseExpect"] = databaseExpect else: result["databaseExpect"] = " " if sqlStatement: sqlResult = con_server.query_all(sqlStatement) else: sqlResult = "" if sqlResult: result["databaseResult"] = str(sqlResult) else: result["databaseResult"] = " " if checkPints: result["expect"] = str(checkPints) else: result["expect"] = "" # 先获得用例执行时相关联的接口信息 while True: if relatedApi is not None: relatedApiInfo = con.query_one("select * from apiInfo where apiId={}".format(relatedApi)) relatedApi = relatedApiInfo["relatedApi"] allRelatedApi.append(relatedApiInfo) allRelatedApi.reverse() else: break if allRelatedApi: apiHeaders=headers for i in range(len(allRelatedApi)): if i < len(allRelatedApi) - 1: a = allRelatedApi[i] # 当前执行 b = allRelatedApi[i + 1] # 下一个 else: a = allRelatedApi[i] b = allRelatedApi[i] apiHost = a["apiHost"] apiParams = a["apiParams"] apiMethod = a["method"] relatedParams = b["relatedParams"] if relatedParams and ";" in relatedParams: relatedParams = relatedParams.split(";") relatedApiId = a["relatedApi"] if 0 != i and apiParams: # apiParams = json.loads(str(apiParams), encoding="utf8") apiParams = string.Template(apiParams) apiParams = apiParams.substitute(vars()) result["apiParams"] = apiParams params = json.loads(apiParams, encoding="utf8") if apiMethod == "post": resp = Http.post(apiHost, apiParams, headers=apiHeaders) else: resp = Http.get(apiHost, params=apiParams, headers=apiHeaders) try: respJson = resp.json() except: log.error("接口调用出错{}".format(resp)) respJson = {} # 判断relatedParams的数据类型,可能为list和str if relatedParams is not None and respJson: if isinstance(relatedParams, str): if relatedParams == "headers": apiHeaders={"cookie": resp.headers["Set-Cookie"]} elif isinstance(relatedParams, list): for i in relatedParams: if isinstance(i, str): var = locals() var[i] = respJson[i] elif isinstance(i, list): var = locals() var[i[1]] = respJson[i[0]][i[1]] else: log.error("参数错误") if apiHost == host: result["fact"] = resp.text check(expect=checkPints, fact=resp, result=result, databaseExpect=databaseExpect, databaseResult=sqlResult) # 如果调用了creat_user的接口,就将接口的headers信息写入配置文件 if host == "/s5/create_user" or host == "/s4/login.mobile": write_headers((str(resp.headers["Set-Cookie"]))) # 将执行结果写入数据库临时保存 con.insert_data("testResult", **result) resultSet.append(result) end_time = time.time() time_consum = end_time - start_time # 测试耗时 case_count = con.query_all("SELECT caseId FROM testresult") # 执行用例 fail_case = con.query_all("SELECT caseId FROM testresult WHERE ispass='******'") # 执行失败的用例 block_case = con.query_all("SELECT caseId FROM testresult WHERE ispass='******'") # 执行阻塞的用例 success_case = con.query_all("SELECT caseId FROM testresult WHERE ispass='******'") # 执行成功的用例 if case_count is None: case_count = 0 else: case_count = len(case_count) if fail_case is None: fail_case = 0 else: fail_case = len(fail_case) if block_case is None: block_case = 0 else: block_case = len(block_case) if success_case is None: success_case = 0 else: success_case = len(success_case) result_info = "本次测试执行完毕,共耗时{}秒,共执行用例:{}条,成功:{}条,失败:{}条,阻塞:{}条".format(float("%.2f" % time_consum), case_count, success_case, fail_case, block_case) log.info(result_info) # 将测试结果写入测试报告 report = Report() report.set_result_info(result_info) report.get_report(resultSet) # 关闭数据库 con.close() con_server.close()
class ReportService: @logger.catch def __init__(self): self._str_now_time = "0.1" self._wechat_push = global_config.getRaw('config', 'wechat_enable') self._email_push = global_config.getRaw('config', 'email_enable') self._wechat_type = global_config.getRaw('config', 'wechat_type') self._api = global_config.getRaw('config', 'api') self._account_cnt = global_account.row self._report = Report() @logger.catch def _get_now_time(self): now = datetime.now() self._str_now_time = now.strftime("%H.%M") return self._str_now_time @logger.catch def _task(self): global_account.refresh() for i in range(self._account_cnt): log_info = f"[{i + 1}/{self._account_cnt}] Report ID:{global_account.studentID(i)}".center( 46, '-') logger.info(log_info) ret = self._report.main(uid=global_account.studentID(i), password=global_account.password(i)) global_push.push(ret, uid=global_account.studentID(i), wechat_push=global_account.wechat_push(i), email_push=global_account.email_push(i), sendkey=global_account.sendkey(i), email_rxer=global_account.email(i), wechat_type=self._wechat_type, api=self._api, userid=global_account.userid(i)) sleep(1) @logger.catch def _gen(self): start_time = time() if self._account_cnt == 0: logger.error("Account does not exist.") else: security.refresh_hosts() global_push.bot_email.login() self._report.update_date() self._task() end_time = time() logger.info("Reports are completed. Cost time:{:.2f}s".format( end_time - start_time).center(50, '-')) @logger.catch def start(self): if global_config.getRaw('config', 'timer_enable') == "off": logger.info("Timer is disabled.") logger.info("Start to report.") self._gen() else: logger.info("Timer is enabled.") while True: global_config.refresh() str_set_time = global_config.getRaw('config', 'set_time') str_now_time = self._get_now_time() logger.info( f"Now time:{str_now_time}. Set time:{str_set_time}.") while True: global_config.refresh() if str_set_time != global_config.getRaw( 'config', 'set_time'): str_set_time = global_config.getRaw( 'config', 'set_time') logger.info(f"New set time:{str_set_time}.") str_now_time = self._get_now_time() if str_now_time != str_set_time: # print(str_now_time) sleep(1) else: logger.info("Time arrived. Start to report.") self._gen() # avoid running twice in 1 minute logger.info("Cleaning... Estimated:1 min") sleep(60) break
from controllers.testDev import TestDev from common.report import Report from controllers.reports.cost import CostReport from controllers.reports.installment import InstallmentReport from controllers.reports.order import OrderReport from controllers.reports.sale import SaleReport from controllers.reports.saleList import SaleListReport from controllers.reports.storage import StorageReport Controller.registerController('auth',Authentication) Controller.registerController('info',BasicInfo) Controller.registerController('confirm',Confirm) Controller.registerController('sale',Sales) Controller.registerController('test',TestDev) Controller.registerController('costs',Costs) Controller.registerController('dashboard',Dashboard) Controller.registerController('viewer',Viewer) Controller.registerController('report',Report) Controller.registerController('template',ReportController) Report.registerReport('cost',CostReport) Report.registerReport('instullment',InstallmentReport) Report.registerReport('order',OrderReport) Report.registerReport('sale',SaleReport) Report.registerReport('sale-list',SaleListReport) Report.registerReport('storage',StorageReport)