示例#1
0
 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()
示例#2
0
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
示例#3
0
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'})
示例#4
0
    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()
示例#5
0
文件: temp.py 项目: ntghoney/api4
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)]
示例#6
0
 def test_report(self, url, data, expect):
     resp = Report().do_report(url, data)
     content = resp.text
     self.assertEqual(content, expect)
示例#7
0
 def wrapper(type):
     print("Report %s registered by %s" % (name, type))
     Report.registerReport(name, type)
     pass
示例#8
0
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()
示例#9
0
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
示例#10
0
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)