Exemple #1
0
def appRankAndSearchApp():
    try:
        excelObj = ParseExcel()
        excelObj.loadWorkBook(dataFilePath)
        caseSheet = excelObj.getSheetByName("测试用例")
        caseNum = excelObj.getRowsNumber(caseSheet)
        isExecuteCaseCols = excelObj.getColumn(caseSheet, testCase_isExecute)
        # 记录需要执行的用例个数
        requiredCaseNum = 0
        # 记录执行成功的用例个数
        successfulCaseNum = 0

        for idx, i in enumerate(isExecuteCaseCols[1:]):
            caseName = excelObj.getCellOfValue(caseSheet,
                                               rowNo=idx + 2,
                                               colsNo=testCase_testCaseName)
            logger.info("----------" + caseName)
            # 测试用例sheet中第一行为标题,无须执行
            if i.value == "y":
                requiredCaseNum += 1
                caseRow = excelObj.getRow(caseSheet, idx + 2)
                frameworkName = caseRow[testCase_frameworkName - 1].value
                stepSheetName = caseRow[testCase_testStepSheetName - 1].value

                if frameworkName == "关键字":
                    logger.info("**********调用关键字驱动**********")
                    # 根据用例的sheet名获取用例的sheet对象
                    stepSheet = excelObj.getSheetByName(stepSheetName)
                    # 记录用例步骤的个数
                    stepNum = excelObj.getRowsNumber(stepSheet)
                    # 记录用例步骤执行成功的个数
                    successfulStepNum = 0
                    for j in range(2, stepNum + 1):
                        # 用例步骤中的第一行为标题,无须执行
                        stepRow = excelObj.getRow(stepSheet, j)
                        # 获取用例步骤中描述
                        StepDescription = stepRow[caseStep_caseStepDescription
                                                  - 1].value
                        # 获取函数名
                        keyWord = stepRow[caseStep_keyWord - 1].value
                        print("keyWord = ", keyWord)
                        # 获取操作元素的定位方式
                        locationType = stepRow[caseStep_locationType - 1].value
                        # 获取操作元素定位方式的表达式
                        locatorExpression = stepRow[caseStep_locatorExpression
                                                    - 1].value
                        # 获取函数中的参数
                        operatorValue = stepRow[caseStep_operatorValue -
                                                1].value
                        # 数值类数据从excel取出后为long型数据,转换为字符串,方便拼接
                        if isinstance(operatorValue, int):
                            operatorValue = str(operatorValue)
                        if keyWord and locationType and locatorExpression and operatorValue:
                            step = keyWord + "('%s','%s','%s')" % (
                                locationType, locatorExpression, operatorValue)
                        elif keyWord and locationType and locatorExpression:
                            step = keyWord + "('%s','%s')" % (
                                locationType, locatorExpression)
                        elif keyWord and operatorValue:
                            step = keyWord + "('%s')" % operatorValue
                        elif keyWord:
                            step = keyWord + "()"
                        try:
                            # 用例步骤执行执行成功,写入执行结果和日志
                            print(step)
                            eval(step)
                            successfulStepNum += 1
                            writeResult(excelObj, stepSheet, "Pass", j,
                                        "caseStep")
                            logger.info("执行步骤“%s”成功" % StepDescription)
                        except Exception as err:
                            #用例步骤执行执行成功
                            errPicPath = capture_screen()
                            errMsg = traceback.format_exc()
                            writeResult(excelObj,
                                        stepSheet,
                                        "Faild",
                                        j,
                                        "caseStep",
                                        errMsg=errMsg,
                                        errPicPath=errPicPath)
                            logger.error(
                                "执行步骤“%s”失败\n异常信息:%s" %
                                (StepDescription, str(traceback.format_exc())))
                    if successfulStepNum == stepNum - 1:
                        successfulCaseNum += 1
                        writeResult(excelObj, caseSheet, "Pass", idx + 2,
                                    "testCase")
                        logger.info("用例“%s”执行成功" % caseName)
                    else:
                        writeResult(excelObj, caseSheet, "Faild", idx + 2,
                                    "testCase")
                        logger.info("用例“%s”执行失败" % caseName)
                elif frameworkName == "数据":
                    logger.info("**********调用数据驱动**********")
                    dataSourceSheetName = caseRow[testCase_dataSourceSheetName
                                                  - 1].value
                    # print dataSourceSheetName,stepSheetName
                    stepSheet = excelObj.getSheetByName(stepSheetName)
                    dataSheet = excelObj.getSheetByName(dataSourceSheetName)
                    result = searchApp(excelObj, stepSheet, dataSheet)
                    if result:
                        successfulCaseNum += 1
                        writeResult(excelObj, caseSheet, "Pass", idx + 2,
                                    "testCase")
                        logger.info("用例“%s”执行成功" % caseName)
                    else:
                        writeResult(excelObj, caseSheet, "Faild", idx + 2,
                                    "testCase")
                        logger.info("用例“%s”执行失败" % caseName)
            else:
                # 清空不需要执行用例的执行时间和执行结果,
                writeResult(excelObj, caseSheet, "", idx + 2, "testCase")
                logger.info("用例“%s”被设置为忽略执行" % caseName)
        logger.info("共%s条用例,%s条需要被执行,本次执行通过%s条" %
                    (caseNum - 1, requiredCaseNum, successfulCaseNum))
    except Exception as err:
        logger.error("驱动框架主程序发生异常\n异常信息:%s" % str(traceback.format_exc()))
#coding=utf-8
from Util.ParseExcel import ParseExcel
from config.GloableData import *
from Util.Encrypt import EncryptMD5


def params_oper(params, encrypt):
    params = eval(params)
    encrypt = eval(encrypt)
    try:
        for key, value in encrypt.items():
            if value[0] == 'md5':
                params[key] = EncryptMD5.encrypt_md5(params[key])
        return params
    except Exception, e:
        raise e


if __name__ == '__main__':
    pe = ParseExcel()
    pe.loadWorkBook(testdata_path)
    sheet = pe.getSheetByName(u'登录接口用例')
    params = pe.getCellOfValue(sheet, coordinate='C2')
    print params_oper(params, '{"password":["md5"]}')