Esempio n. 1
0
def appRank():
    driver = webdriver.Remote('http://localhost:4723/wd/hub', getDesiredcaps())
    try:
        excelObj = ParseExcel()
        excelObj.loadWorkBook(dataFilePath)
        appRankSheet = excelObj.getSheetByName("应用")
        isExecute = excelObj.getColumn(appRankSheet, app_isExecute)
        appRankStringCols = excelObj.getColumn(appRankSheet, app_assertKeyWord)

        for idx, i in enumerate(isExecute[1:]):
            appRankString = appRankStringCols[idx + 1].value
            logger.info("----------应用排行“{}”开始执行".format(appRankString))
            if i.value == 'y':
                try:
                    AppRankAction.appRank(driver, appRankString)
                except Exception as e:
                    excelObj.writeCellCurrentTime(appRankSheet, rowNo=idx + 2, colsNo=app_runTime, style="red")
                    excelObj.writeCell(appRankSheet, "Faild", rowNo=idx + 2, colsNo=app_testResult, style="red")
                    logger.error(
                        "在“应用”模块,断言排列前三的APP“{}”失败\n异常信息:{}".format(appRankString, traceback.format_exc()))
                else:
                    excelObj.writeCellCurrentTime(appRankSheet, rowNo=idx + 2, colsNo=app_runTime, style="green")
                    excelObj.writeCell(appRankSheet, "Pass", rowNo=idx + 2, colsNo=app_testResult, style="green")
                    logger.info("在“应用”模块,断言排列前三的APP“{}”成功".format(appRankString))
            else:
                excelObj.writeCell(appRankSheet, "", rowNo=idx + 2, colsNo=app_runTime, )
                excelObj.writeCell(appRankSheet, "", rowNo=idx + 2, colsNo=app_testResult)
                logger.info("排列前三的用例“{}”被忽略执行".format(appRankString))
    except Exception as e:
        logger.error("数据驱动框架主程序发生异常\n异常信息:{}".format(traceback.format_exc()))
    finally:
        driver.quit()
Esempio n. 2
0
def searchApp():
    driver = webdriver.Remote('http://localhost:4723/wd/hub', getDesiredcaps())
    try:
        excelObj = ParseExcel()
        excelObj.loadWorkBook(dataFilePath)
        searchSheet = excelObj.getSheetByName("搜索")
        isExecute = excelObj.getColumn(searchSheet, search_isExecute)
        searchKeyWordCols = excelObj.getColumn(searchSheet,
                                               search_searchKeyWord)

        for idx, i in enumerate(isExecute[1:]):
            searchKeyWord = searchKeyWordCols[idx + 1].value
            logger.info("----------搜索APP“{}”开始执行".format(searchKeyWord))
            if i.value == 'y':
                searchRow = excelObj.getRow(searchSheet, idx + 2)
                assertKeyWord = searchRow[search_assertKeyWord - 1].value
                try:
                    SearchAction.search(driver, searchKeyWord, assertKeyWord)
                except Exception as e:
                    excelObj.writeCellCurrentTime(searchSheet,
                                                  rowNo=idx + 2,
                                                  colsNo=search_runTime,
                                                  style="red")
                    excelObj.writeCell(searchSheet,
                                       "Faild",
                                       rowNo=idx + 2,
                                       colsNo=search_testResult,
                                       style="red")
                    logger.error("搜索APP“{}”失败\n异常信息:{}".format(
                        searchKeyWord, traceback.format_exc()))
                else:
                    excelObj.writeCellCurrentTime(searchSheet,
                                                  rowNo=idx + 2,
                                                  colsNo=search_runTime,
                                                  style="green")
                    excelObj.writeCell(searchSheet,
                                       "Pass",
                                       rowNo=idx + 2,
                                       colsNo=search_testResult,
                                       style="green")
                    logger.info("搜索APP“{}”成功".format(searchKeyWord))
            else:
                excelObj.writeCell(
                    searchSheet,
                    "",
                    rowNo=idx + 2,
                    colsNo=search_runTime,
                )
                excelObj.writeCell(searchSheet,
                                   "",
                                   rowNo=idx + 2,
                                   colsNo=search_testResult)
                logger.info("搜索APP“{}”的用例被忽略执行".format(searchKeyWord))
    except Exception as e:
        logger.error("数据驱动框架主程序发生异常\n异常信息:{}" % (traceback.format_exc()))
    finally:
        driver.quit()
Esempio n. 3
0
def createContacts():
    try:
        excelObj = ParseExcel()
        excelObj.loadWorkBook(dataFilePath)
        userSheet = excelObj.getSheetByName("126账号")
        isExecute = excelObj.getColumn(userSheet, account_isExecute)
        userNameCols = excelObj.getColumn(userSheet, account_userName)
        for idx, i in enumerate(isExecute[1:]):
            if i.value == 'y':
                userRow = excelObj.getRow(userSheet, idx + 2)
                userName = userRow[account_userName - 1].value
                passWord = str(userRow[account_passWord - 1].value)
                contactSheetName = userRow[account_dataSourceSheetName -
                                           1].value

                driver = webdriver.Chrome()
                driver.maximize_window()
                driver.get("https://mail.126.com/")
                LoginAction.login(driver, userName, passWord)

                #断言前停顿3秒,防止页面跳转太快,断言失败
                time.sleep(3)
                try:
                    assert "收 信" in driver.page_source
                except Exception as e:
                    logger.error("用户“{}”登录后,断言页面关键字“退出”失败\n异常信息:{}".format(
                        userName, traceback.format_exc()))
                else:
                    logger.info("用户“{}”登录后,断言页面关键字“退出”成功".format(userName))

                contactSheet = excelObj.getSheetByName(contactSheetName)
                isExecuteAddContact = excelObj.getColumn(
                    contactSheet, contacts_isExecute)

                contactNum = 0
                successAddContactNum = 0
                coutactPersonNameCols = excelObj.getColumn(
                    contactSheet, contacts_contactPersonName)
                for id, j in enumerate(isExecuteAddContact[1:]):
                    if j.value == 'y':
                        contactNum += 1
                        contactRow = excelObj.getRow(contactSheet, id + 2)
                        coutactPersonName = coutactPersonNameCols[id + 1].value
                        coutactPersonEmail = contactRow[
                            contacts_contactPersonEmail - 1].value
                        isStar = contactRow[contacts_isStar - 1].value
                        countactPersonPhone = str(
                            contactRow[contacts_contactPersonPhone - 1].value)
                        countactPersonComment = contactRow[
                            contacts_contactPersonComment - 1].value
                        assertKeyWords = contactRow[contacts_assertKeyWords -
                                                    1].value

                        logger.info("**********开始添加联系人“%s”**********" %
                                    coutactPersonName)
                        AddContactAction.addContact(driver, coutactPersonName,
                                                    coutactPersonEmail, isStar,
                                                    countactPersonPhone,
                                                    countactPersonComment)
                        time.sleep(3)
                        try:
                            assert assertKeyWords in driver.page_source
                        except Exception as e:
                            excelObj.writeCell(contactSheet,
                                               "faild",
                                               rowNo=id + 2,
                                               colsNo=contacts_testResult,
                                               style="red")
                            excelObj.writeCellCurrentTime(
                                contactSheet,
                                rowNo=id + 2,
                                colsNo=contacts_runTime,
                                style="red")
                            logger.error("添加联系人“{}”失败\n异常信息:{}".format(
                                coutactPersonName, traceback.format_exc()))
                        else:
                            successAddContactNum += 1
                            excelObj.writeCell(contactSheet,
                                               "pass",
                                               rowNo=id + 2,
                                               colsNo=contacts_testResult,
                                               style="green")
                            excelObj.writeCellCurrentTime(
                                contactSheet,
                                rowNo=id + 2,
                                colsNo=contacts_runTime,
                                style="green")
                            logger.info(
                                "添加联系人“{}”成功".format(coutactPersonName))
                    else:
                        excelObj.writeCell(contactSheet,
                                           "",
                                           rowNo=id + 2,
                                           colsNo=contacts_runTime)
                        excelObj.writeCell(contactSheet,
                                           "",
                                           rowNo=id + 2,
                                           colsNo=contacts_testResult)
                        logger.info("联系人“{}”被忽略执行".format(
                            coutactPersonNameCols[idx + 1].value))
                driver.quit()
                if contactNum == successAddContactNum:
                    excelObj.writeCell(userSheet,
                                       "Pass",
                                       rowNo=idx + 2,
                                       colsNo=account_testResult,
                                       style="green")
                else:
                    excelObj.writeCell(userSheet,
                                       "Faild",
                                       rowNo=idx + 2,
                                       colsNo=account_testResult,
                                       style="red")
            else:
                excelObj.writeCell(userSheet,
                                   "",
                                   rowNo=idx + 2,
                                   colsNo=account_testResult)
                logger.info("账号“{}”被忽略执行".format(userNameCols[idx + 1].value))
    except Exception as e:
        logger.error("数据驱动框架主程序发生异常\n异常信息:{}".format(traceback.format_exc()))
Esempio n. 4
0
def sendRequest():
    try:
        excelObj = ParseExcel()
        excelObj.loadWorkBook(dataFilePath)
        apiSheet = excelObj.getSheetByName(ApiSheetName)

        apiNameCols = excelObj.getColumn(apiSheet, API_name)
        apiIsExecuteCols = excelObj.getColumn(apiSheet, API_isExecute)
        for idx, i in enumerate(apiIsExecuteCols[1:]):
            apiName = apiNameCols[idx + 1].value
            if i.value == "y":
                case_total = 0
                case_passNum = 0
                case_ignoreNum = 0
                case_failNum = 0
                case_errorNum = 0
                apiRow = excelObj.getRow(apiSheet, idx + 2)
                requestUrl = apiRow[API_requestUrl - 1].value
                requestMothod = apiRow[API_requestMothod - 1].value
                paramsType = apiRow[API_paramsType - 1].value
                testCaseSheetName = apiRow[API_testCaseSheetName - 1].value

                logger.info("----------" + apiName)
                testCaseSheet = excelObj.getSheetByName(testCaseSheetName)
                testCaseIsExecuteCols = excelObj.getColumn(testCaseSheet, TestCase_isExecute)
                for id, j in enumerate(testCaseIsExecuteCols[1:]):
                    case_total += 1
                    try:
                        if j.value == "y":
                            testCaseRow = excelObj.getRow(testCaseSheet, id + 2)
                            requestHeaders = testCaseRow[TestCase_requestHeaders - 1].value
                            headersEncrypt = testCaseRow[TestCase_headersEncrypt - 1].value
                            requestData = testCaseRow[TestCase_requestData - 1].value
                            dependData = testCaseRow[TestCase_dependData - 1].value
                            bodyEncrypt = testCaseRow[TestCase_bodyEncrypt - 1].value
                            responseData = testCaseRow[TestCase_responseData - 1].value
                            responseDecrypt = testCaseRow[TestCase_responseDecrypt - 1].value
                            dependDataStore = testCaseRow[TestCase_dependDataStore - 1].value
                            checkPoint = testCaseRow[TestCase_checkPoint - 1].value

                            # 当请求参数中不是数值时,处理成字典
                            if not isinstance(requestData, int):
                                requestData = eval(requestData)
                            # 处理请求参数中的依赖数据
                            if requestData and dependData:
                                requestData = getDependData(requestData, eval(dependData))
                            # 处理请求参数中的加密数据
                            if requestData and bodyEncrypt:
                                requestData = bodyEncryptOper(requestData, eval(bodyEncrypt))

                            httpC = HttpClient()
                            response = httpC.request(requestMothod, requestUrl, paramsType, requestData=requestData)
                            # 接口响应结果写入用例工作表
                            excelObj.writeCell(testCaseSheet, response.text, rowNo=id + 2, colsNo=TestCase_responseData)
                            # 当接口响应成功时,验证检查点是否满足
                            if response.status_code == 200 and checkPoint:
                                # 获取检查点错误信息
                                errData = checkResult(response, eval(checkPoint))
                                if errData:
                                    # 接口执行失败,执行的错误结果写入到测试用例工作表
                                    case_failNum += 1
                                    writeResult(excelObj, testCaseSheet, "Faild", id + 2, "testcase",
                                                testCaseErrMsg=str(errData))
                                    logger.info("接口“{}”的第“{}”条用例执行失败".format(apiName, id + 1))

                                else:
                                    # 接口执行成功,执行的正确结果写入到测试用例工作表
                                    case_passNum += 1
                                    writeResult(excelObj, testCaseSheet, "Pass", id + 2, "testcase")
                                    logger.info(u"接口“{}”的第“{}”条用例执行成功".format(apiName, id + 1))
                                    # 当接口执行成功时,保存依赖数据到全局变量RequestData、ResponseData,供后面的接口使用
                                    if dependDataStore:
                                        dataStore(eval(dependDataStore), testCaseSheetName, id + 2,
                                                  requestSource=requestData, responseSource=response.json())
                            elif response.status_code != 200:
                                # 接口响应失败,执行失败的接口写入到测试用例工作表
                                case_errorNum += 1
                                writeResult(excelObj, testCaseSheet, "Error", id + 2, "testcase",
                                            testCaseErrMsg="接口响应异常!")
                                logger.info(
                                    "接口“{}”的第“{}”条用例执行过程出错\n错误信息:{}".format(apiName, id + 1, traceback.format_exc()))
                        else:
                            # 清空忽略执行的测试用例工作表数据
                            case_ignoreNum += 1
                            writeResult(excelObj, testCaseSheet, "", id + 2, "testcase")
                            logger.info("接口“{}”的第“{}”条用例被设置为忽略执行".format(apiName, id + 1))
                    except Exception as e:
                        # 接口请求中,发生异常情况,将错误结果写入测试用例工作表
                        case_errorNum += 1
                        writeResult(excelObj, testCaseSheet, "Error", id + 2, "testcase",
                                    testCaseErrMsg=traceback.format_exc())
                        logger.info(
                            "接口请求发生异常情况,接口“{}”的第“{}”条用例执行过程出错\n错误信息:{}".format(apiName, id + 1, traceback.format_exc()))

                if case_errorNum or case_failNum:
                    # 存在异常错误或者失败测试用例时,表示接口api执行错误,将相关的统计数据写入到接口api的工作表中
                    writeResult(excelObj, apiSheet, "Faild", idx + 2, "api",
                                apiResult=[case_total, case_passNum, case_ignoreNum, case_failNum, case_errorNum])
                else:
                    writeResult(excelObj, apiSheet, "Pass", idx + 2, "api",
                                apiResult=[case_total, case_passNum, case_ignoreNum, case_failNum, case_errorNum])
            else:
                # 清空忽略执行api工作表的数据
                writeResult(excelObj, apiSheet, "", idx + 2, "api")
                logger.info("接口“{}”被设置为忽略执行".format(apiName))

    except Exception as e:
        logger.info("接口框架主程序发生异常\n异常信息:{}".format(traceback.format_exc()))