Esempio n. 1
0
class HttpRequest:
    mylogger = Log().get_logger()
    mylogger.info(
        "------------------------------------------------------------------")
    mylogger.info("当前运行文件:{}".format(__file__))

    def __get(self, url, params=None, **kwargs):
        return requests.get(url, params=params, **kwargs)

    def __post(self, url, headers=None, data=None, **kwargs):
        return requests.post(url, headers=headers, data=data, **kwargs)

    def send_request(self, url, method, headers, data=None, **kwargs):
        if method.lower() == "get":
            self.mylogger.info("运行“get”:{}用例".format(url))
            response = self.__get(url=url, params=data, verify=False, **kwargs)
            response.encoding = 'utf-8'
            self.mylogger.info("{}运行的结果:{}".format(url, response.text))
            return response
        elif method.lower() == "post":
            self.mylogger.info("运行“post”:{}用例".format(url))
            response = self.__post(url=url,
                                   headers=headers,
                                   data=data,
                                   verify=False,
                                   **kwargs)
            response.encoding = 'utf=8'
            self.mylogger.info("{}运行的结果:{}".format(url, response.text))
            return response
Esempio n. 2
0
 def __init__(self, projectName):
     PATH = lambda P: os.path.abspath(
         os.path.join(os.path.dirname(__file__), P))
     self.mylogger = Log().get_logger()
     self.mylogger.info(
         "------------------------------------------------------------------"
     )
     self.mylogger.info("当前运行文件:{}".format(__file__))
     self.mylogger.info("准备获取 {} 项目的用例路径".format(projectName))
     self.caseFilePath = PATH("../case/{}.xlsx".format(projectName))
     self.mylogger.info("获取到 {} 项目的用例路径:{}".format(projectName,
                                                   self.caseFilePath))
     self.projectName = projectName
Esempio n. 3
0
def get_project_name():
    mylogger = Log().get_logger()
    mylogger.info(
        "------------------------------------------------------------------")
    mylogger.info("当前运行文件:{}".format(__file__))
    caseFolder = PATH("../case")
    # 判断是否存在caseFolder文件夹
    if not os.path.exists(caseFolder):
        mylogger.info("不存在项目")
    else:
        for root, dirs, files in os.walk(caseFolder):
            if not files:
                mylogger.info("{}文件下的不存在用例文件".format(caseFolder))
                break
            else:
                mylogger.info("{}文件下的用例文件 {}".format(caseFolder, files))
                projectName = []
                # 去掉 .xlsx 后缀,添加到projectName中
                for name in files:
                    projectName.append(name[:-5])
                return projectName
Esempio n. 4
0
# coding:utf-8
__author__ = 'GRUNMI'

import re
from common.DataDict import data_dict
from common.LogOutput import Log

mylogger = Log().get_logger()
mylogger.info('当前运行文件:{}'.format(__file__))


def data_replace(data, replace_data, changge_data):

    replace_value = []
    # 需要改变的字段存储在列表中
    if replace_data:
        for i in replace_data.split(","):
            replace_value.append(i)
    mylogger.info("动态字段转化成列表:{}".format(replace_value))

    # 替换data中的动态值
    for value in replace_value:
        if value in changge_data.keys():
            patter = "'{}': '(.*?)'".format(value) or "'{}':'(.*?)'".format(
                value)
            be_replace_value_list = re.compile(patter).findall(
                str(data_dict(data)))
            # print(be_replace_value_list)
            # re匹配出来的是一个list
            for be_replace_value in be_replace_value_list:
                data = data.replace(be_replace_value, changge_data[value])
Esempio n. 5
0
def run_case(projectname, type=0, id=None):
    '''
    :type 0代表项目用例,1代表场景用例
    :id 用例id
    :生成用例规则:场景用例需要在报告前加上 settingReport
    '''
    mylogger = Log().get_logger()
    mylogger.info('当前运行文件:{}'.format(__file__))
    mylogger.info('获取{}项目的所有用例'.format(projectname))
    project = GetCase(projectname).get_project_case()
    all_case = project[0]
    case_file = project[2]
    case_name = project[3]

    runResult = []

    try:
        if all_case:
            wb = openpyxl.load_workbook(case_file)
            ws = wb.active
            startTime = time.time()
            if type == 0:
                if str(all_case).lower().find('yes') < 0:
                    return 'noRunCase'
                for case in all_case:
                    if case['Run'].lower() == 'yes':
                        mylogger.info('{}项目的第{}行用例,是否执行为:{}'.format(
                            projectname, case['Sort'], case['Run']))
                        mylogger.info('准备运行用例')
                        url = case['Protocol'] + case['Host'] + case['Path']
                        method = case['Method']
                        headers = case['Headers']
                        try:
                            result = HttpRequest().send_request(
                                url=url, method=method, headers=headers)
                            # 写入到Response单元格
                            ws['R' + str(case['RowID'])] = result.text
                            # 获取Response值
                            Response = result.text
                        except:
                            Response = ws['R' + str(case['RowID'])] = ''
                        # 校验值
                        # 获取Expect值
                        Except = case['Expect']
                        # 获取CheckPoint值
                        CheckPoint = case['CheckPoint']

                        # 对比数据
                        checkResult = data_result_check(
                            Except, CheckPoint, Response)

                        if checkResult[0] == checkResult[1] and Response:
                            testResult = ws['Z' + str(case['RowID'])] = 'true'

                        else:
                            testResult = ws['Z' + str(case['RowID'])] = 'false'

                        reportResult = {
                            "moduleName":
                            case['CaseName'],
                            "path":
                            case['Path'],
                            "result":
                            testResult,
                            "checkDetail": [{
                                "预期结果": checkResult[0]
                            }, {
                                "运行结果": checkResult[1]
                            }]
                        }
                        runResult.append(reportResult)
                    else:
                        mylogger.info('{}项目的第{}行用例,是否执行为:{},不执行用例'.format(
                            projectname, case['RowID'], case['Run']))
            elif type == 1:
                select_id = []
                for i in id.split(','):
                    if i:
                        select_id.append(int(i))
                all_id = []
                for i in all_case:
                    all_id.append(int(i["ID"]))

                # 检测选择的用例是否包含在用例中,在选择过程中,用例有可能被删除
                if set(select_id) <= set(all_id):
                    # 转换成list,去掉最后一个逗号
                    for id in select_id:
                        for case in all_case:
                            # excel取出来是一个float类型
                            if int(id) == int(case['ID']):
                                mylogger.info('{}项目的第{}行用例,是否执行为:{}'.format(
                                    projectname, case['Sort'], case['Run']))
                                mylogger.info('准备运行用例')
                                url = case['Protocol'] + case['Host'] + case[
                                    'Path']
                                method = case['Method']
                                headers = case['Headers']
                                result = HttpRequest().send_request(
                                    url=url, method=method, headers=headers)
                                # 写入到Response单元格
                                ws['R' + str(case['RowID'])] = result.text
                                # 校验值
                                # 获取Expect值
                                Except = case['Expect']
                                # 获取CheckPoint值
                                CheckPoint = case['CheckPoint']
                                # 获取Response值
                                # Response = ws['R' + str(case['RowID'])]
                                Response = result.text
                                # 对比数据
                                checkResult = data_result_check(
                                    Except, CheckPoint, Response)
                                if checkResult[0] == checkResult[1]:
                                    testResult = ws[
                                        'Z' + str(case['RowID'])] = 'true'
                                else:
                                    testResult = ws[
                                        'Z' + str(case['RowID'])] = 'false'

                                reportResult = {
                                    "moduleName":
                                    case['CaseName'],
                                    "path":
                                    case['Path'],
                                    "result":
                                    testResult,
                                    "checkDetail": [{
                                        "预期结果": checkResult[0]
                                    }, {
                                        "运行结果": checkResult[1]
                                    }]
                                }
                                runResult.append(reportResult)
                else:
                    difference_value = list(
                        set(select_id).difference(set(all_id)))
                    mylogger.info("勾选的ID{},用例表中的ID{},表中不存在勾选的ID:{}".format(
                        select_id, all_id, difference_value))
                    return 'selectFalse'

            endTime = time.time()
            reportFolder = os.path.join(
                os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
                'report\\', case_name, 'excelReport')
            if not os.path.exists(reportFolder):
                os.makedirs(reportFolder)
                mylogger.info("生成用例目录路径:{}".format(reportFolder))

            if type == 0:
                reportName = time.strftime('%Y-%m-%d %H-%M-%S') + '.xlsx'
            elif type == 1:
                reportName = 'settingReport' + time.strftime(
                    '%Y-%m-%d %H-%M-%S') + '.xlsx'
            reportCaseFile = os.path.join(reportFolder, reportName)
            wb.save(reportCaseFile)

            # 在excel中生成图表报告
            if type == 0:
                CreatePie(projectname, type=0).pie()
            elif type == 1:
                CreatePie(projectname, type=1).pie()

            # 生成html图形报告
            if type == 0:
                runNum = get_project_run_num(projectname, type=0)
                success = runNum[0]
                failed = runNum[1]
                sum = success + failed

                str(success / sum).count('.') == 1
                right = str(success / sum).split('.')[1]
                if len(right) > 2:
                    passRate = str(round(success / sum * 100, 1)) + '%'
                    failedRate = str(round((1 - success / sum) * 100, 1)) + '%'
                else:
                    passRate = str(int(success / sum * 100)) + '%'
                    failedRate = str(int((1 - success / sum) * 100)) + '%'

                from platform import python_version
                pythonVersion = python_version()
                import django
                djangoVersion = django.get_version()
                data = {
                    "projectName":
                    projectname,
                    "testPersonName":
                    "GRUNMI",
                    "startTime":
                    time.strftime('%Y-%m-%d %H:%M:%S'),
                    "runTime":
                    endTime - startTime,
                    "pass":
                    str(success),
                    "failed":
                    str(failed),
                    "sum":
                    sum,
                    "passRate":
                    passRate,
                    "failedRate":
                    failedRate,
                    "runEnvironment":
                    "python%s+django%s" % (pythonVersion, djangoVersion),
                    "runResult":
                    runResult
                }
                create_html_report(data, type=0)
                # get_html_project_report(projectname, type=0)
            elif type == 1:
                runNum = get_project_run_num(projectname, type=1)
                success = runNum[0]
                failed = runNum[1]
                sum = runNum[0] + failed

                str(success / sum).count('.') == 1
                right = str(success / sum).split('.')[1]
                if len(right) > 2:
                    passRate = str(round(success / sum * 100, 1)) + '%'
                    failedRate = str(round((1 - success / sum) * 100, 1)) + '%'
                else:
                    passRate = str(int(success / sum * 100)) + '%'
                    failedRate = str(int((1 - success / sum) * 100)) + '%'

                from platform import python_version
                pythonVersion = python_version()
                import django
                djangoVersion = django.get_version()
                data = {
                    "projectName":
                    projectname,
                    "testPersonName":
                    "GRUNMI",
                    "startTime":
                    time.strftime('%Y-%m-%d %H:%M:%S'),
                    "runTime":
                    endTime - startTime,
                    "pass":
                    str(success),
                    "failed":
                    str(failed),
                    "sum":
                    sum,
                    "passRate":
                    passRate,
                    "failedRate":
                    failedRate,
                    "runEnvironment":
                    "python%s+django%s" % (pythonVersion, djangoVersion),
                    "runResult":
                    runResult
                }
                create_html_report(data, type=1)
                # get_html_project_report(projectname, type=1)
            return 'success'
        else:
Esempio n. 6
0
def case_data(projectName,
              action,
              id=1,
              run='YES',
              sort=None,
              sql=None,
              moduleName='模块名称',
              caseName='用例名称',
              caseDescription='用例描述',
              protocol='http://',
              host=None,
              method='GET',
              headers=None,
              path=None,
              data=None,
              file=None,
              replaceID=None,
              expect=None,
              checkPoint=None,
              response=None,
              transmitID=None,
              transmitTargetID=None,
              remark=None,
              createDate=None,
              updateTime=None,
              author='GRUNMI',
              editor='GRUNMI',
              runResult=None):
    '''

    :param projectName: 项目名称
    :param action: 执行动作,1增 2删 3修改用例数据 4修改用例执行状态 5查
    :param id: 用例id
    :param run: 用例执行
    :param sort: 用例排序
    :param sql: 数据库语法
    :param moduleName: 模块名称
    :param caseName: 用例名称
    :param caseDescription: 用例描述
    :param protocol: 协议
    :param host: 域名
    :param method: 请求方法
    :param headers: 请求数据格式
    :param path: 请求路径
    :param data: 请求数据
    :param file: 请求文件
    :param replaceID: 替换请求动态数据
    :param expect: 预期结果
    :param checkPoint: 校验数据
    :param response: 实际结果
    :param transmitID: 传递的动态id
    :param transmitTargetID: 传递到目标动态id
    :param remark: 备注
    :param createDate: 创建时间
    :param updateTime: 更新时间
    :param author: 作者
    :param editor: 修改人
    :param runResult: 运行状态
    :return:
    '''

    mylogger = Log().get_logger()
    mylogger.info('当前运行文件:{}'.format(__file__))
    mylogger.info('调用运行create_project方法')
    caseFile = create_project(projectName)[1]
    # print(caseFile)
    mylogger.info('打开{}文件'.format(caseFile))

    action = int(action)
    id = int(id)
    # openpyxl操作excel
    wb = openpyxl.load_workbook(caseFile, data_only=True)

    # print(wb.get_sheet_names())
    # print(wb.sheetnames)
    # wb.get_sheet_names() 已弃用,需要使用sheetName
    # xlrd读取excel
    caseFiles = xlrd.open_workbook(caseFile)
    caseSheet = caseFiles.sheet_by_index(0)

    try:
        for ws in wb.sheetnames:
            # count:判断是否包含projectName
            if ws.count(projectName):
                mylogger.info('已匹配到{}的用例表为:{}'.format(projectName, ws))
                # wb.get_sheet_by_name() 已弃用,需要使用wb[]
                ws = wb[ws]
                rows = ws.max_row
                # print(type(rows), '------------------')
                mylogger.info('获取当前{}表的最大行数:{}'.format(ws, rows))
                # 新增
                if action == 1:
                    write_row = str(rows + 1)
                    mylogger.info('准备将数据新增在{}表的第{}行'.format(ws, write_row))

                    # 获取最后一行的id值+1
                    if rows > 1:
                        ws['A' +
                           write_row] = int(ws['A' + str(rows)].value) + 1
                    else:
                        ws['A' + write_row] = 1

                    ws['B' + write_row] = run
                    # 减去用例标题一行
                    ws['C' + write_row] = int(write_row) - 1
                    ws['D' + write_row] = sql
                    ws['E' + write_row] = moduleName
                    ws['F' + write_row] = caseName
                    ws['G' + write_row] = caseDescription
                    ws['H' + write_row] = protocol
                    ws['I' + write_row] = host
                    ws['J' + write_row] = method
                    ws['K' + write_row] = headers
                    ws['L' + write_row] = path
                    ws['M' + write_row] = data
                    ws['N' + write_row] = file
                    ws['O' + write_row] = replaceID
                    ws['P' + write_row] = expect
                    ws['Q' + write_row] = checkPoint
                    # ws['R' + write_row] = response
                    ws['S' + write_row] = transmitID
                    ws['T' + write_row] = transmitTargetID
                    # ws['U' + write_row] = remark
                    ws['V' + write_row] = str(
                        time.strftime('%Y%m%d%H%M%S',
                                      time.localtime(time.time())))
                    ws['W' + write_row] = str(
                        time.strftime('%Y%m%d%H%M%S',
                                      time.localtime(time.time())))
                    ws['X' + write_row] = author
                    ws['Y' + write_row] = editor
                    # ws['Z' + write_row] = runResult
                    mylogger.info('新增在{}表中第{}行的数据成功'.format(ws, write_row))
                    mylogger.info('总共有{}条用例数据'.format(int(write_row) - 1))
                # 删除
                elif action == 2:
                    mylogger.info('准备删除{}表中,id为{}的用例数据'.format(ws, id))
                    if rows > 1:
                        try:
                            for id_col, id_title in enumerate(
                                    caseSheet.row_values(0)):
                                # 用例的标题
                                if id_title == 'ID':
                                    print(caseSheet.col_values(id_col))
                                    for id_row, id_val in enumerate(
                                            caseSheet.col_values(id_col)[1::]):
                                        if int(id_val) == id:

                                            # 修改sort数据
                                            # mylogger.info('准备更新{}表中,sort数据'.format(ws))
                                            for sort_col, sort_title in enumerate(
                                                    caseSheet.row_values(0)):
                                                if sort_title == 'Sort':

                                                    # 需要删除的id的sort值
                                                    id_sort_value = ws.cell(
                                                        row=id_row + 2,
                                                        column=sort_col +
                                                        1).value

                                                    for sort_row, sort_val in enumerate(
                                                            caseSheet.
                                                            col_values(sort_col
                                                                       )[1::]):
                                                        if int(sort_val) > int(
                                                                id_sort_value):
                                                            val = ws.cell(
                                                                row=int(
                                                                    sort_row) +
                                                                2,
                                                                column=int(
                                                                    sort_col) +
                                                                1).value
                                                            mylogger.info(
                                                                '{}表中,修改{}大于{}的sort数据成功'
                                                                .format(
                                                                    ws, val,
                                                                    id_sort_value
                                                                ))
                                                            val -= 1
                                                            ws.cell(
                                                                row=int(
                                                                    sort_row) +
                                                                2,
                                                                column=int(
                                                                    sort_col) +
                                                                1,
                                                                value=val)
                                                    break

                                            # 删除数据
                                            mylogger.info(
                                                '删除{}表中,id为{}的用例数据成功'.format(
                                                    ws, id))
                                            ws.delete_rows(id_row + 2)
                                            mylogger.info(
                                                '删除{}表中,第{}条用例数据'.format(
                                                    ws, id_row + 1))
                                            break

                                    # mylogger.info('{}表中,删除用例数据不成功,id为{}的用例数据不存在'.format(ws, id))
                                    break

                        except Exception as e:
                            mylogger.info('删除{}表中,id为{}的用例报错:{}'.format(
                                ws, id, e))
                    elif rows == 1:
                        mylogger.info('{}表中不存在用例数据,删除用例数据不成功'.format(ws))
                    mylogger.info('总共有{}条用例数据'.format(int(rows) - 1))

                # 修改用例数据
                elif action == 3:
                    mylogger.info('准备修改{}表中,id为{}的用例数据'.format(ws, id))
                    if rows > 1:
                        for id_col, id_title in enumerate(
                                caseSheet.row_values(0)):
                            if id_title == 'ID':
                                for id_row, id_val in enumerate(
                                        caseSheet.col_values(id_col)[1::]):
                                    if int(id_val) == id:
                                        write_row = str(id_row + 2)
                                        # 获取最后一行的id值+1
                                        # ws['A' + write_row] = int(ws['A' + write_row].value) + 1

                                        # ws['B' + write_row] = run
                                        # 减去用例标题一行
                                        # ws['C' + write_row] = int(write_row) - 1
                                        ws['D' + write_row] = sql
                                        ws['E' + write_row] = moduleName
                                        ws['F' + write_row] = caseName
                                        ws['G' + write_row] = caseDescription
                                        ws['H' + write_row] = protocol
                                        ws['I' + write_row] = host
                                        ws['J' + write_row] = method
                                        ws['K' + write_row] = headers
                                        ws['L' + write_row] = path
                                        ws['M' + write_row] = data
                                        ws['N' + write_row] = file
                                        ws['O' + write_row] = replaceID
                                        ws['P' + write_row] = expect
                                        ws['Q' + write_row] = checkPoint
                                        # ws['R' + write_row] = response
                                        ws['S' + write_row] = transmitID
                                        ws['T' + write_row] = transmitTargetID
                                        # ws['U' + write_row] = remark
                                        # ws['V' + write_row] = str(time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())))
                                        ws['W' + write_row] = str(
                                            time.strftime(
                                                '%Y%m%d%H%M%S',
                                                time.localtime(time.time())))
                                        ws['X' + write_row] = author
                                        ws['Y' + write_row] = editor
                                        # ws['Z' + write_row] = runResult
                                        mylogger.info(
                                            '修改{}表中,id为{}的用例数据成功'.format(
                                                ws, id))
                                        break
                        #         mylogger.info('修改{}表中,id为{}的用例数据不存在,修改失败'.format(ws, id))
                        # mylogger.info('修改{}表中,不存在标题为ID的'.format(ws))

                    else:
                        mylogger.info('{}表中不存在用例数据,删除用例数据不成功'.format(ws))

                # 修改是否执行用例
                elif action == 4:
                    mylogger.info('准备修改{}表中,id为{}的用例执行状态为:{}'.format(
                        ws, id, run))
                    if rows > 1:
                        for id_col, id_title in enumerate(
                                caseSheet.row_values(0)):
                            if id_title == 'ID':
                                for id_row, id_val in enumerate(
                                        caseSheet.col_values(id_col)[1::]):
                                    if int(id_val) == id:
                                        write_row = str(id_row + 2)
                                        if ws['B' + write_row].value == run:
                                            mylogger.info(
                                                '修改{}表中,id为{}的用例执行状态数据未做改变,不需要更新'
                                                .format(ws, id))
                                            break
                                        else:
                                            ws['B' + write_row] = run
                                            mylogger.info(
                                                '修改{}表中,id为{}的用例执行状态数据更新成功'.
                                                format(ws, id))
                                            break
                                # mylogger.info('修改{}表中,id为{}的用例数据不存在,更新失败'.format(ws, id))
                                break
                        # mylogger.info('修改{}表中,不存在标题为ID的'.format(ws))
                    else:
                        mylogger.info('{}表中不存在用例数据,删除用例数据不成功'.format(ws))

                # 查询
                elif action == 5:
                    mylogger.info('准备查询{}表中,id为{}的用例数据'.format(ws, id))
                    if rows > 1:
                        for id_col, id_title in enumerate(
                                caseSheet.row_values(0)):
                            if id_title == 'ID':
                                for id_row, id_val in enumerate(
                                        caseSheet.col_values(id_col)[1::]):
                                    if int(id_val) == id:
                                        find_row = str(id_row + 2)

                                        ID = ws['A' + find_row].value
                                        Run = ws['B' + find_row].value
                                        Sort = ws['C' + find_row].value
                                        Sql = ws['D' + find_row].value
                                        ModuleName = ws['E' + find_row].value
                                        CaseName = ws['F' + find_row].value
                                        CaseDescription = ws['G' +
                                                             find_row].value
                                        Protocol = ws['H' + find_row].value
                                        Host = ws['I' + find_row].value
                                        Method = ws['J' + find_row].value
                                        Headers = ws['K' + find_row].value
                                        Path = ws['L' + find_row].value
                                        Data = ws['M' + find_row].value
                                        Files = ws['N' + find_row].value
                                        ReplaceID = ws['O' + find_row].value
                                        Expect = ws['P' + find_row].value
                                        CheckPoint = ws['Q' + find_row].value
                                        Response = ws['R' + find_row].value
                                        TransmitID = ws['S' + find_row].value
                                        TransmitTargetID = ws['T' +
                                                              find_row].value
                                        Remark = ws['U' + find_row].value
                                        CreateDate = ws['V' + find_row].value
                                        UpdateTime = ws['W' + find_row].value
                                        Author = ws['X' + find_row].value
                                        Editor = ws['Y' + find_row].value
                                        RunResult = ws['Z' + find_row].value

                                        find_result = {
                                            'projectname': projectName,
                                            'id': ID,
                                            'run': Run,
                                            'sort': Sort,
                                            'sql': Sql,
                                            'moduleName': ModuleName,
                                            'caseName': CaseName,
                                            'caseDescription': CaseDescription,
                                            'protocol': Protocol,
                                            'host': Host,
                                            'method': Method,
                                            'headers': Headers,
                                            'path': Path,
                                            'data': Data,
                                            'files': Files,
                                            'replaceID': ReplaceID,
                                            'expect': Expect,
                                            'checkPoint': CheckPoint,
                                            'result': Response,
                                            'transmitID': TransmitID,
                                            'transmitTargetID':
                                            TransmitTargetID,
                                            'remark': Remark,
                                            'createDate': CreateDate,
                                            'updateTime': UpdateTime,
                                            'author': Author,
                                            'editor': Editor,
                                            'runResult': RunResult,
                                        }
                                        mylogger.info(
                                            '查询{}表中,id为{}的用例数据成功:{}'.format(
                                                ws, id, find_result))
                                        wb.close()
                                        mylogger.info(
                                            '关闭{}工作簿成功'.format(projectName))
                                        return find_result
                                mylogger.info('查询{}表中,id为{}的用例数据不存在'.format(
                                    ws, id))
                                return 'noFind'

                    else:
                        mylogger.info('{}表中,不存在用例数据'.format(ws))

                mylogger.info('准备保存{}表'.format(ws))
                wb.save(caseFile)
                mylogger.info('保存{}表成功,准备关闭{}工作簿'.format(ws, projectName))
                break

    except Exception as e:
        mylogger.info('不可预知的错误:{}'.format(e))
    wb.close()
    mylogger.info('关闭{}工作簿成功'.format(projectName))
Esempio n. 7
0
def create_project(projectName):
    mylogger = Log().get_logger()
    mylogger.info(
        "------------------------------------------------------------------")
    mylogger.info("当前运行文件:{}".format(__file__))
    caseFolder = os.path.join(
        os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +
        '\\case\\')
    # print(caseFolder)
    caseFile = os.path.join(caseFolder, projectName + '.xlsx')

    # 判断是否存在case目录,没有,则创建
    if not os.path.exists(caseFolder):
        os.mkdir(caseFolder)
        mylogger.info("生成用例目录路径:{}".format(caseFolder))

    # 判断是否存在case模板,没有,则创建
    if not os.path.exists(caseFile):
        wb = openpyxl.Workbook(caseFile)
        wb.create_sheet(title=projectName + 'InterfaceData')
        mylogger.info("生成用例文件路径:{}".format(caseFile))
        wb.save(caseFile)
        wb = openpyxl.load_workbook(caseFile, data_only=True)
        ws = wb.active
        mylogger.info("创建用例标题")
        ws['A1'] = 'ID'
        ws['B1'] = 'Run'
        ws['C1'] = 'Sort'
        ws['D1'] = 'Sql'
        ws['E1'] = 'ModuleName'
        ws['F1'] = 'CaseName'
        ws['G1'] = 'CaseDescription'
        ws['H1'] = 'Protocol'
        ws['I1'] = 'Host'
        ws['J1'] = 'Method'
        ws['K1'] = 'Headers'
        ws['L1'] = 'Path'
        ws['M1'] = 'Data'
        ws['N1'] = 'Files'
        ws['O1'] = 'ReplaceID'
        ws['P1'] = 'Expect'
        ws['Q1'] = 'CheckPoint'
        ws['R1'] = 'Response'
        ws['S1'] = 'TransmitID'
        ws['T1'] = 'TransmitTargetID'
        ws['U1'] = 'Remark'
        ws['V1'] = 'CreateDate'
        ws['W1'] = 'UpdateTime'
        ws['X1'] = 'Author'
        ws['Y1'] = 'Editor'
        ws['Z1'] = 'RunResult'
        # print(ws.rows)
        # print(ws[1])
        mylogger.info("修改用例标题样式:宋体加粗")
        for cell in ws[1]:
            cell.font = Font('宋体', bold=True)
        # a1 = ws['A1']
        # a1.font = Font('黑体', bold=True)
        wb.save(caseFile)
        mylogger.info("保存创建的用例文件,路径为:{}".format(caseFile))
        wb.close()
        return 'createSuccess', caseFile
    else:
        mylogger.info('已存在{}用例文件:{}'.format(projectName, caseFile))
        return 'alreadyExist', caseFile