Exemplo 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()
Exemplo n.º 2
0
def calc_lens_sf(data):
    length = int(len(data) / 2)
    if length < 128:
        length = num2big(length, 1)
    elif 127 <= length < 16256:
        quotient = length // 128
        remainder = length % 128
        length = num2big(remainder | 0x80, 1) + num2big(quotient, 1)
    elif 16256 <= length < 2097152:
        quotient1 = (length // 128) // 128
        quotient2 = (length // 128) % 128
        quotient2 = 0x80 | quotient2
        remainder = length % 128
        length = num2big(remainder | 0x80, 1) + num2big(
            quotient2, 1) + num2big(quotient1, 1)
    elif 2019152 <= length <= 268435455:
        quotient1 = ((length // 128) // 128) // 128
        quotient2 = (length // 128) // 128
        quotient2 = 0x80 | quotient2
        quotient3 = (length // 128) % 128
        quotient3 = 0x80 | quotient3
        remainder = length % 128
        length = num2big(remainder | 0x80, 1) + num2big(
            quotient3, 1) + num2big(quotient2, 1) + num2big(quotient1, 1)
    else:
        logger.error('长度范围超出。')
    return length
def parseLoadTestConfig():
    # 获取配置文件中执行的用例的函数名
    # 规则自行定义
    allTestFunsList = getTestFunNames()
    testCaseFunList = []
    executeTestCaseFuns = []
    with open(loadTestConfigFilePath,encoding="utf-8") as fp:
        lines = fp.readlines()
        for line in lines:
            if line.strip() and (not line.strip().startswith("#")):
                if line.strip() == "*":
                    testCaseFunList += allTestFunsList
                    break
                else:
                    testCaseFunList.append(line.strip())
    testCaseFunList = list(set(testCaseFunList))
    if "*" in testCaseFunList:
        return allTestFunsList
    else:
        for fun in testCaseFunList:
            if fun in allTestFunsList:
                executeTestCaseFuns.append(fun)
            else:
                logger.error("需要执行的用例函数名“{}”配置错误".format(fun))
        return executeTestCaseFuns
Exemplo n.º 4
0
    def handle(self):
        time.sleep(0.5)
        address, port = self.client_address
        logger.debug('【 Data Server 】 Connected by {} {} ...'.format(address, port))
        TCPRequestHandler.isAlive = True
        logger.debug('【 Data Server 】 Producer Thread Start ...')
        send_thread = SendData('【 Data Server 】 Send Thread Start ...', self)
        send_thread.setDaemon(True)
        send_thread.start()

        if conf.get_protocol_type() == 1:
            if conf.get_sync_flag():
                from Util.Sync_SU import SyncThread
                sync_thread = SyncThread('【 Data Server 】 Sync Thread Start ...', self)
                sync_thread.setDaemon(True)
                sync_thread.start()
            global fetch_media_flag
            fetch_media_flag = True
        elif conf.get_protocol_type() == 5:
            dog_thread = DogThread('【 Data Server 】 Dog Thread Start ...', self)
            dog_thread.setDaemon(True)
            dog_thread.start()

        while True:
            try:
                buf = b''
                if self.remain:
                    self.remain = ParseData.produce(buf, self.remain)
                try:
                    buf = self.request.recv(1024)
                except TimeoutError:
                    self.isAlive = False
                    time.sleep(0.3)
                    logger.debug('【 Data Server 】 Receiving ack timeout,connection is interrupted.')
                except ConnectionResetError:
                    self.isAlive = False
                    time.sleep(0.3)
                    logger.debug('【 Data Server 】 ConnectionResetError,connection is interrupted.')
                except ConnectionAbortedError:
                    self.isAlive = False
                    time.sleep(0.3)
                    logger.debug('【 Data Server 】 ConnectionAbortedError,connection is interrupted.')
                except Exception as e:
                    logger.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
                    logger.error(e)

            except socket.timeout:
                self.isAlive = False
                time.sleep(0.3)
                logger.debug('【 Data Server 】 Receiving data timeout,connection is interrupted.')
                break
            if not buf:
                self.isAlive = False
                time.sleep(0.3)
                logger.debug('【 Data Server 】 Receive empty data,connection is interrupted.')
                break
            self.remain = ParseData.produce(buf, self.remain)
            time.sleep(0.001)
Exemplo n.º 5
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()
Exemplo n.º 6
0
def small2num(para_length):
    length = ''
    for i in range(len(para_length), 0, -2):
        length += para_length[i - 2:i]
    try:
        length = int(length, 16)
        return length
    except ValueError:
        logger.error('十六进制转整型数据出错。')
Exemplo n.º 7
0
    def find_element(self, selctor):
        """
        这个地方为什么根据=>来切割字符串,请看页面里定位元素的方法
        如果采用等号,结果很多xpath表达式中包含一个=,这样会造成切割不准确,影响元素定位
        :param selctor:
        :return:
        """
        element = ''
        if '=>' not in selctor:
            return self.driver.find_element_by_id(selctor)
        selctor_by = selctor.split('=>')[0]
        selctor_value = selctor.split('=>')[1]

        if selctor_by == "i" or selctor_by == "id":
            try:
                element = self.driver.find_element_by_id(selctor_value)
                logger.info("找到了元素 %s 成功"
                            "%s 该值为: %s" %
                            (element.text, selctor_by, selctor_value))
            except NoSuchElementException as e:
                logger.error("NoSuchElementException: %s" % e)
        elif selctor_by == "n" or selctor_by == "name":
            element = self.driver.find_element_by_name(selctor_value)
        elif selctor_by == "class" or selctor_by == "class_name":
            element = self.driver.find_element_by_class_name(selctor_value)
        elif selctor_by == "link" or selctor_by == "link_text":
            element = self.driver.find_element_by_link_text(selctor_value)
        elif selctor_by == "partial" or selctor_by == "partial_link_text":
            element = self.driver.find_element_by_partial_link_text(
                selctor_value)
        elif selctor_by == "tag" or selctor_by == "tag_name":
            element = self.driver.find_element_by_tag_name(selctor_value)
        elif selctor_by == "x" or selctor_by == "xpath":
            try:
                element = self.driver.find_element_by_xpath(selctor_value)
                logger.info("找到了元素 %s 成功"
                            "%s 该值为: %s" %
                            (element.text, selctor_by, selctor_value))
            except NoSuchElementException as e:
                logger.error("NoSuchElementException:%s" % e)
        elif selctor_by == "s" or selctor_by == "selector_selector":
            element = self.driver.find_element_by_css_selector(selctor_value)
        else:
            raise NameError("请输入有效的定位元素类型")
        return element
Exemplo n.º 8
0
    def parse_get_media_su(data):
        serial_num = data[2:4]
        peripheral = data[6:7]
        media_type = data[8:9]
        media_id = data[9:13]
        pkg_total = data[13:15]
        pkg_num = data[15:17]
        if byte2str(pkg_total) == '0000' and byte2str(pkg_num) == '0000':
            if byte2str(media_type) == '02':
                logger.info('—————— 告警视频未录制完   {} ——————'.format(
                    byte2str(data)))
                query_media_body = '%s%s%s%s%s' % (
                    COMPANY_NO, byte2str(peripheral), '50',
                    byte2str(media_type), byte2str(media_id))
                query_media = '%s%s%s%s%s' % (
                    SU_FLAG, calc_check_code(query_media_body),
                    num2big(
                        GlobalVar.get_serial_no()), query_media_body, SU_FLAG)
                query_msg_queue.put(query_media)
                send_queue.put(query_msg_queue.get(block=False))

            elif byte2str(media_type) == '00':
                logger.error('—————— 告警数据不存在   {} ——————'.format(
                    byte2str(data)))
        else:
            return_state = '00'
            img_return_body = '%s%s%s%s%s%s%s%s' % (
                COMPANY_NO, byte2str(peripheral), '51', byte2str(media_type),
                byte2str(media_id), byte2str(pkg_total), byte2str(pkg_num),
                return_state)
            img_return = '%s%s%s%s%s' % (
                SU_FLAG, calc_check_code(img_return_body),
                byte2str(serial_num), img_return_body, SU_FLAG)
            send_queue.put(img_return)
            media_queue.put(data)
            total_pkg = int(byte2str(data[13:15]), 16)
            rec_pkg = int(byte2str(data[15:17]), 16)
            if rec_pkg == total_pkg - 1:
                try:
                    send_queue.put(query_msg_queue.get(block=False))
                except queue.Empty:
                    global fetch_media_flag
                    fetch_media_flag = True
Exemplo n.º 9
0
def big2num(length):
    try:
        length = int(length, 16)
        return length
    except ValueError:
        logger.error('十六进制转整型数据出错。')
Exemplo n.º 10
0
def searchApp(excelObj, stepSheet, dataSheet):
    try:
        dataIsExecuteCols = excelObj.getColumn(dataSheet, dataSource_isExecute)
        appNameCols = excelObj.getColumn(dataSheet, dataSource_appName)

        requiredDataNum = 0
        successfulDataNum = 0
        for idx, i in enumerate(dataIsExecuteCols[1:]):
            if i.value == "y":
                requiredDataNum += 1
                successfulStepNum = 0
                logger.info("开始搜索APP“{}”".format(appNameCols[idx + 1].value))
                stepNum = excelObj.getRowsNumber(stepSheet)
                for j in range(2, stepNum + 1):
                    # 用例步骤中的第一行为标题,无须执行
                    stepRow = excelObj.getRow(stepSheet, j)
                    # 获取用例步骤中描述
                    stepDescription = stepRow[caseStep_caseStepDescription -
                                              1].value
                    # 获取函数名
                    keyWord = stepRow[caseStep_keyWord - 1].value
                    # 获取操作元素的定位方式
                    locationType = stepRow[caseStep_locationType - 1].value
                    # 获取操作元素定位方式的表达式
                    locatorExpression = stepRow[caseStep_locatorExpression -
                                                1].value
                    # 获取函数中的参数
                    operatorValue = stepRow[caseStep_operatorValue - 1].value
                    if isinstance(operatorValue, int):
                        # 数值类数据从excel取出后为int型数据,转换为字符串,方便拼接
                        operatorValue = str(operatorValue)
                    if operatorValue and operatorValue.isalpha():
                        # 如果operatorValue为字母时,则根据坐标在数据源工作表中取操作值
                        operatorValue = excelObj.getCellOfValue(
                            dataSheet, coordinate=operatorValue + str(idx + 2))
                    if keyWord and locationType and locatorExpression and operatorValue:
                        step = keyWord + "('{}','{}','{}')".format(
                            locationType, locatorExpression, operatorValue)
                    elif keyWord and locationType and locatorExpression:
                        step = keyWord + "('{}','{}')".format(
                            locationType, locatorExpression)
                    elif keyWord and operatorValue:
                        step = keyWord + "('{}')".format(operatorValue)
                    else:
                        step = keyWord + "()"
                    try:
                        # 用例步骤执行执行成功,写入执行结果和日志
                        eval(step)
                        successfulStepNum += 1
                        logger.info("执行步骤“{}”成功".format(stepDescription))
                    except Exception as e:
                        # 用例步骤执行执行失败
                        logger.error(u"执行步骤“{}”失败\n异常信息:{}".format(
                            stepDescription, traceback.format_exc()))
                if successfulStepNum == stepNum - 1:
                    writeResult(excelObj, dataSheet, "Pass", idx + 2,
                                "dataSheet")
                    successfulDataNum += 1
                else:
                    writeResult(excelObj, dataSheet, "Faild", idx + 2,
                                "dataSheet")
            else:
                # 清空不需要执行的数据源中的执行时间和执行结果
                writeResult(excelObj, dataSheet, "", idx + 2, "dataSheet")
                logger.info("APP“{}”被设置为忽略执行".format(appNameCols[idx +
                                                                 1].value))
        if requiredDataNum == successfulDataNum:
            return 1
        return 0

    except Exception as e:
        logger.info("数据驱动框架主程序发生异常\n异常信息:{}" % (traceback.format_exc()))
Exemplo n.º 11
0
 def parse_alarm(data):
     if conf.get_protocol_type() == 1:
         peripheral = data[6:7]
         function_no = data[7:8]
         serial_num = data[2:4]
         alarm_return_body = '%s%s%s' % (COMPANY_NO, byte2str(peripheral),
                                         byte2str(function_no))
         alarm_return = '%s%s%s%s%s' % (
             SU_FLAG, calc_check_code(alarm_return_body),
             byte2str(serial_num), alarm_return_body, SU_FLAG)
         send_queue.put(alarm_return)
         num = int(byte2str(data[38:39]), 16)
         alarm_type = data[13:14]
         video_id = data[-5:-1]
         speed = data[19:20]
         height = data[20:22]
         latitude = data[22:26]
         longitude = data[26:30]
         alarm_time = data[30:36]
         state = data[36:38]
         if peripheral == b'\x65':
             logger.debug('')
             logger.debug('========== 收到DSM告警信息 ==========')
             logger.debug('')
             logger.debug(
                 '—————— 视频ID {} 告警类型 -------------------- {} ——————'.
                 format(byte2str(video_id),
                        alarm_type_code_su_dsm.get(alarm_type)))
         elif peripheral == b'\x64':
             logger.debug('')
             logger.debug('========== 收到ADAS告警信息 ==========')
             logger.debug('')
             logger.debug(
                 '—————— 视频ID {} 告警类型 -------------------- {} ——————'.
                 format(byte2str(video_id),
                        alarm_type_code_su_adas.get(alarm_type)))
         logger.debug(
             '—————— 速度 {} 高程 {} 纬度 {} 经度 {} 告警时间 {} 车辆状态 {} ——————'.format(
                 big2num(byte2str(speed)), big2num(byte2str(height)),
                 big2num(byte2str(latitude)), big2num(byte2str(longitude)),
                 byte2str(alarm_time), byte2str(state)))
         if conf.get_get_media_flag():
             for x in range(num):
                 media_id = byte2str(data[39 + x * 5 + 1:39 + x * 5 + 5])
                 media_type = byte2str(data[39 + x * 5:39 + x * 5 + 1])
                 media_alarm_code[media_id] = alarm_type
                 if data[6:8] == DSM_ALARM_SU:
                     if media_type == '00' or '02':
                         query_media_body = '%s%s%s%s' % (
                             COMPANY_NO, '6550', media_type, media_id)
                     else:
                         logger.error('数据解析出错{}'.format(byte2str(data)))
                 elif data[6:8] == ADAS_ALARM_SU:
                     if media_type == '00' or '02':
                         query_media_body = '%s%s%s%s' % (
                             COMPANY_NO, '6450', media_type, media_id)
                     else:
                         logger.error('数据解析出错{}'.format(byte2str(data)))
                 else:
                     logger.error('不存在的告警{}'.format(byte2str(data)))
                 query_media = '%s%s%s%s%s' % (
                     SU_FLAG, calc_check_code(query_media_body),
                     num2big(GlobalVar.get_serial_no()), query_media_body,
                     SU_FLAG)
                 query_msg_queue.put(query_media)
                 global fetch_media_flag
                 if fetch_media_flag:
                     fetch_media_flag = False
                     if not query_msg_queue.empty():
                         send_queue.put(query_msg_queue.get(block=False))
Exemplo n.º 12
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()))
Exemplo n.º 13
0
 def input_string(self, selector, inputContent):
     try:
         self.find_element(selector).send_keys(inputContent)
         logger.info("在输入框输入 %s" % inputContent)
     except NameError as e:
         logger.error("输入框无法输入 %s" % inputContent)
Exemplo n.º 14
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()))
Exemplo n.º 15
0
def appstore():
    try:
        excelObj = ParseExcel()
        excelObj.loadWorkBook(dataFilePath)
        caseSheet = excelObj.getSheetByName("测试用例")
        caseNameCols = excelObj.getColumn(caseSheet, testCase_testCaseName)
        isExecuteCaseCols = excelObj.getColumn(caseSheet, testCase_isExecute)
        # 记录需要执行的用例个数
        requiredCaseNum = 0
        # 记录执行成功的用例个数
        successfulCaseNum = 0

        for idx, i in enumerate(isExecuteCaseCols[1:]):
            # 测试用例sheet中第一行为标题,无须执行
            if i.value == "y":
                requiredCaseNum += 1
                caseRow = excelObj.getRow(caseSheet, idx + 2)
                caseName = caseNameCols[idx + 1].value
                stepSheetName = caseRow[testCase_testStepSheetName - 1].value
                # 根据用例的sheet名获取用例的sheet对象
                stepSheet = excelObj.getSheetByName(stepSheetName)
                # 记录用例步骤的个数
                stepNum = excelObj.getRowsNumber(stepSheet)
                # 记录用例步骤执行成功的个数
                successfulStepNum = 0

                logger.info("----------" + caseName)
                for j in range(2, stepNum + 1):
                    # 用例步骤中的第一行为标题,无须执行
                    stepRow = excelObj.getRow(stepSheet, j)
                    # 获取用例步骤中描述
                    StepDescription = stepRow[caseStep_caseStepDescription -
                                              1].value
                    # 获取函数名
                    keyWord = stepRow[caseStep_keyWord - 1].value
                    # 获取操作元素的定位方式
                    locationType = stepRow[caseStep_locationType - 1].value
                    # 获取操作元素定位方式的表达式
                    locatorExpression = stepRow[caseStep_locatorExpression -
                                                1].value
                    # 获取函数中的参数
                    operatorValue = stepRow[caseStep_operatorValue - 1].value
                    # 数值类数据从excel取出后为int型数据,转换为字符串,方便拼接
                    if isinstance(operatorValue, int):
                        operatorValue = str(operatorValue)
                    if keyWord and locationType and locatorExpression and operatorValue:
                        step = keyWord + "('{}','{}','{}')".format(
                            locationType, locatorExpression, operatorValue)
                    elif keyWord and locationType and locatorExpression:
                        step = keyWord + "('{}','{}')".format(
                            locationType, locatorExpression)
                    elif keyWord and operatorValue:
                        step = keyWord + "('{}')".format(operatorValue)
                    else:
                        step = keyWord + "()"
                    try:
                        # 用例步骤执行执行成功,写入执行结果和日志
                        eval(step)
                        successfulStepNum += 1
                        writeResult(excelObj, stepSheet, "Pass", j, "caseStep")
                        logger.info("执行步骤“{}”成功".format(StepDescription))
                    except Exception as e:
                        # 用例步骤执行执行成功
                        errPicPath = capture_screen()
                        errMsg = traceback.format_exc()
                        writeResult(excelObj,
                                    stepSheet,
                                    "Faild",
                                    j,
                                    "caseStep",
                                    errMsg=errMsg,
                                    errPicPath=errPicPath)
                        logger.error("执行步骤“{}”失败\n异常信息:{}".format(
                            StepDescription, traceback.format_exc()))
                if successfulStepNum == stepNum - 1:
                    successfulCaseNum += 1
                    writeResult(excelObj, caseSheet, "Pass", idx + 2,
                                "testCase")
                else:
                    writeResult(excelObj, caseSheet, "Faild", idx + 2,
                                "testCase")
            else:
                writeResult(excelObj, caseSheet, "", idx + 2, "testCase")
                logger.info("用例“{}”被设置为忽略执行".format(caseNameCols[idx +
                                                                 1].value))
        logger.error("共{}条用例,{}条需要被执行,本次执行通过{}条".format(
            len(isExecuteCaseCols) - 1, requiredCaseNum, successfulCaseNum))
    except Exception as e:
        logger.info("关键字驱动框架主程序发生异常\n异常信息:{}".format(traceback.format_exc()))