コード例 #1
0
    def xlutils_excel(self, row_value, col_value, value, info=None):
        rb = xlrd.open_workbook(self.file_path,
                                formatting_info=True)  # formatting_info 带格式导入
        wb = copy(rb)  # 利用xlutils.copy下的copy函数复制
        ws = wb.get_sheet(0)  # 获取表单0
        rs = rb.sheet_by_index(0)
        # ws.write(0, 0, 'changed!')  # 改变(0,0)的值
        value_row_col = rs.cell(row_value, col_value).value  # 表格原有值
        if not value:
            ws.write(row_value, col_value, value)

        else:
            if not value_row_col:
                ws.write(row_value, col_value, value)  # 增加指定列的值
            else:
                ws.write(row_value, col_value,
                         "{};{}".format(value_row_col, value))  # 增加指定列的值
        if info:
            logger.debug("{}:({}, {}, {})".format(info, row_value, col_value,
                                                  value))
        else:
            logger.debug((row_value, col_value, value))
        try:
            wb.save(self.file_path)  # 保存文件
        except Exception as msg:
            logger.error("保存excel文件失败:{}".format(msg))
コード例 #2
0
    def __init__(self):
        self.device_name = None
        pipeline = os.popen("adb devices")  # cmd获取设备名称
        adb_version = os.popen(
            "adb shell getprop ro.build.version.release")  # cmd获取Android系统版本
        adb_devices = pipeline.read()
        try:
            self.device_name = adb_devices.split()[4]
        except Exception as msg:
            logger.error("请检查移动设备是否连接正常,异常信息{}".format(msg))
            raise

        # 初始化信息
        self.desired_caps = {}
        self.desired_caps["platformName"] = "Android"
        self.desired_caps["platformVersion"] = adb_version = adb_version.read()
        self.desired_caps["deviceName"] = self.device_name
        self.desired_caps["appPackage"] = "com.yunke.enterprisep"
        self.desired_caps["appActivity"] = ".module.main.MainActivity"
        self.desired_caps["unicodeKeyboard"] = True  # 隐藏手机中的软键盘
        self.desired_caps["resetKeyboard"] = True
        self.desired_caps["noReset"] = True

        # desired_caps = {"platformName": "Android",
        #                 "platformVersion": adb_version,
        #                 "deviceName": self.device_name,
        #                 "appPackage": "com.yunke.enterprisep",
        #                 "appActivity": ".module.main.MainActivity",
        #                 "unicodeKeyboard": True,
        #                 "resetKeyboard": True,
        #                 "noReset": True
        # }

        logger.info("[{}]driver初始化‖platformVersion:{},deviceName:{}".format(
            os.path.basename(__file__), adb_version, self.device_name))
コード例 #3
0
 def test006(self):
     """视频推荐结果查询接口"""
     url_T10 = f'{self.base_url}{self.path_code["T10"][0]}'
     data_T10 = {"userId": self.user_id, "rcmdNum": 10, "pageNum": 1}
     res_text_T10 = request_post(url_T10, data_T10)
     try:
         res_dict_T10 = json.loads(res_text_T10)
         if res_dict_T10["code"] != 1000:
             case_message_T10 = {
                 "case_num": "T10",
                 "description": f'{self.path_code["T10"][1]}——接口响应异常',
                 "log": f"{res_text_T10}"
             }
             SMS_message.append(case_message_T10)
         else:
             if len(res_dict_T10["recommendation"]) == 0:
                 case_message_T10 = {
                     "case_num": "T10",
                     "description": f'{self.path_code["T10"][1]}——推荐列表返回为空',
                     "log": f"{res_text_T10}"
                 }
                 SMS_message.append(case_message_T10)
             else:
                 pass
     except Exception as msg:
         case_message_T10 = {
             "case_num": "T10",
             "description": f'{self.path_code["T10"][1]}——服务响应异常',
             "log": f"{res_text_T10}"
         }
         SMS_message.append(case_message_T10)
         logger.error(f"系统异常记录:{case_message_T10};报错信息:{msg}")
コード例 #4
0
 def test005(self):
     """项目二级栏目推荐结果查询接口"""
     url_T08 = f'{self.base_url}{self.path_code["T08"][0]}'
     data_T08 = {"userId": self.user_id}
     res_text_T08 = request_post(url_T08, data_T08)
     try:
         res_dict_T08 = json.loads(res_text_T08)
         if res_dict_T08["code"] != 1000:
             case_message_T08 = {
                 "case_num": "T08",
                 "description": f'{self.path_code["T08"][1]}——接口响应异常',
                 "log": f"{res_text_T08}"
             }
             SMS_message.append(case_message_T08)
         else:
             if len(res_dict_T08["recommendation"]) == 0:
                 case_message_T08 = {
                     "case_num": "T08",
                     "description": f'{self.path_code["T08"][1]}——推荐列表返回为空',
                     "log": f"{res_text_T08}"
                 }
                 SMS_message.append(case_message_T08)
             else:
                 # 执行T09接口
                 url_T09 = f'{self.base_url}{self.path_code["T09"][0]}'
                 data_T09 = {
                     "userId": self.user_id,
                     "tabId": res_dict_T08["recommendation"][0]["id"],
                     "rcmdNum": 50,
                     "pageNum": 1
                 }
                 res_text_T09 = request_post(url_T09, data_T09)
                 res_dict_T09 = json.loads(res_text_T09)
                 if res_dict_T09["code"] != 1000:
                     case_message_T09 = {
                         "case_num": "T07",
                         "description":
                         f'{self.path_code["T09"][1]}——接口响应异常',
                         "log": f"{res_text_T09}"
                     }
                     SMS_message.append(case_message_T09)
                 else:
                     pass
                     # if len(res_dict_T09["recommendation"]) == 0:
                     #     case_message_T09 = {
                     #         "case_num": "T09",
                     #         "description": f'{self.path_code["T09"][1]}——推荐列表返回为空',
                     #         "log": f"{res_text_T09}"
                     #     }
                     #     SMS_message.append(case_message_T09)
                     # else:
                     #     pass
     except Exception as msg:
         case_message = {
             "case_num": "T08/T09",
             "description": 'T08/T09接口——服务响应异常',
         }
         SMS_message.append(case_message)
         logger.error(f"系统异常记录:{case_message};报错信息:{msg}")
コード例 #5
0
 def wrapper(*args,**kw):
     for i in range(n):
         try:
             r = func(*args,**kw)
             return r
         except Exception as err:
             logger.error('[{}]用例第{}次失败原因{}'.format(os.path.basename(__file__), i+1, err))
     raise Exception
コード例 #6
0
 def test002(self):
     """项目推荐结果查询接口/项目相关项目查询接口"""
     url_T02 = f'{self.base_url}{self.path_code["T02"][0]}'
     data_T02 = {"userId": self.user_id, "rcmdNum": 10, "pageNum": 1}
     res_text_T02 = request_post(url_T02, data_T02)
     try:
         res_dict_T02 = json.loads(res_text_T02)
         if res_dict_T02["code"] != 1000:
             case_message_T02 = {
                 "case_num": "T02",
                 "description": f'{self.path_code["T02"][1]}——接口响应异常',
                 "log": f"{res_text_T02}"
             }
             SMS_message.append(case_message_T02)
         else:
             if len(res_dict_T02["recommendation"]) == 0:
                 case_message_T02 = {
                     "case_num": "T02",
                     "description": f'{self.path_code["T02"][1]}——推荐列表返回为空',
                     "log": f"{res_text_T02}"
                 }
                 SMS_message.append(case_message_T02)
             else:
                 # 执行T06接口
                 url_T06 = f'{self.base_url}{self.path_code["T06"][0]}'
                 data_T06 = {
                     "projectId": res_dict_T02["recommendation"][0]["id"],
                     "rcmdNum": 3,
                     "pageNum": 1
                 }
                 res_text_T06 = request_post(url_T06, data_T06)
                 res_dict_T06 = json.loads(res_text_T06)
                 if res_dict_T06["code"] != 1000:
                     case_message_T06 = {
                         "case_num": "T06",
                         "description":
                         f'{self.path_code["T06"][1]}——接口响应异常',
                         "log": f"{res_text_T06}"
                     }
                     SMS_message.append(case_message_T06)
                 else:
                     if len(res_dict_T06["recommendation"]) != 3:
                         case_message_T06 = {
                             "case_num": "T06",
                             "description":
                             f'{self.path_code["T06"][1]}——推荐列表返回为空或不足3条',
                             "log": f"{res_text_T06}"
                         }
                         SMS_message.append(case_message_T06)
                     else:
                         pass
     except Exception as msg:
         case_message = {
             "case_num": "T02/T06",
             "description": 'T02/T06接口——服务响应异常'
         }
         SMS_message.append(case_message)
         logger.error(f"系统异常记录:{case_message};报错信息:{msg}")
コード例 #7
0
 def findId(self, loc):
     try:
         el = self._driver.find_element_by_id(loc)
     except (NoSuchElementException):
         logger.error('[{}]寻找元素失败, 定位方式为id:{}'.format(
             os.path.basename(__file__), loc))
         raise NoSuchElementException(msg='[{}]寻找元素失败, 定位方式为id:{}'.format(
             os.path.basename(__file__), loc))
     return el
コード例 #8
0
 def takeScreenshot(self):
     rq = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
     try:
         self._driver.get_screenshot_as_file(
             os.path.dirname(os.path.dirname(os.path.dirname(__file__))) +
             r'\result\screenshots\{}.png'.format(rq))
         logger.info("[{}]已截屏并保存{}.png!".format(os.path.basename(__file__),
                                                rq))
     except Exception as e:
         logger.error("[{}]无法截屏!{}".format(os.path.basename(__file__), e))
コード例 #9
0
 def findAndroidUiautomator(self, text):
     try:
         el = self._driver.find_element_by_android_uiautomator(
             'new UiSelector().text("{}")'.format(text))
     except (NoSuchElementException):
         logger.error('[{}]寻找元素失败, 定位方式为uiautomator:{}'.format(
             os.path.basename(__file__), text))
         raise NoSuchElementException(
             msg='[{}]寻找元素失败, 定位方式为uiautomator:{}'.format(
                 os.path.basename(__file__), text))
     return el
コード例 #10
0
 def get_conn(self):
     try:
         conn = pymysql.connect(host=self.host,
                                user=self.user,
                                passwd=self.password,
                                db=self.db,
                                port=self.port,
                                charset='utf8')
     except pymysql.Error as e:
         logger.error("Connect database failed.{}".format(e))
         conn = False
     return conn
コード例 #11
0
 def sendKeys(self, el, vaule, clear_first=True, click_first=True):
     try:
         if click_first:
             el.click()
         if clear_first:
             el.clear()
             el.send_keys(vaule)
     except (NoSuchElementException) as e:
         logger.error("[{}]页面中未能找到元素{}".format(os.path.basename(__file__),
                                               e))
         raise NoSuchElementException(
             msg='[{}]页面中未能找到元素{}'.format(os.path.basename(__file__), e))
コード例 #12
0
 def connect(self, port=4723):
     url = 'http://localhost:%s/wd/hub' % str(port)
     try:
         driver = webdriver.Remote(url, self.desired_caps)
         logger.info("[{}]启动接口为:{},手机ID为:{}".format(
             os.path.basename(__file__), port, self.device_name))
     except Exception as msg:
         logger.error("[{}]appium启动失败,请检查appium服务是否开启;异常原因:{}".format(
             os.path.basename(__file__), msg))
         os.popen("taskkill /f /im adb.exe")
         raise
     return driver
コード例 #13
0
def request_post(url, data):
    header_dict = {'Content-Type': 'application/json'}
    try:
        r = requests.post(url=url, headers=header_dict, json=data)  # 发送请求
        data_str = r.text
        # logger.debug("###" + data_str)
        logger.info("请求url:{};请求头:{};请求数据:{};服务器响应:{}".format(
            url, header_dict, data, data_str))
    except Exception as e:
        data_str = -1
        logger.error("请求url:{};请求头:{};请求数据:{};系统异常信息:{}".format(
            url, header_dict, data, e))
    return data_str
コード例 #14
0
 def read_excel(self, file_name):
     if isinstance(file_name, str):  # 判断是否是字符串类型
         if file_name.endswith('.xls'):  # 判断字符串以什么结尾
             self.file_path = os.path.dirname(os.path.dirname(
                 __file__)) + '/dataFile/{}'.format(file_name)
             workbook = xlrd.open_workbook(self.file_path)  # 打开一个workbook
             # 抓取所有sheet页的名称
             worksheets = workbook.sheet_names()
             for worksheet_name in worksheets:
                 worksheet = workbook.sheet_by_name(worksheet_name)
                 # 遍历sheet1中所有行row
                 num_rows = worksheet.nrows  # 获取sheet行数
                 row_demo = [
                     '用例集编号', '用例标识', '模块名称', '接口名称', '用例描述', '请求url',
                     '请求方式', '请求头部', '用例说明', '前置处理', '请求数据', '匹配规则', '预期结果',
                     '后置处理', '优先级', '是否执行', '被依赖value', '响应数据', '状态码',
                     '执行结果', '执行时间', '备注'
                 ]
                 # 判断模板第二行格式
                 # print(worksheet.row_values(1))
                 if worksheet.row_values(
                         1)[0:22] == row_demo:  # 判断sheet1表头是否与预期模板一致
                     all_row_value = []
                     for curr_row in range(num_rows -
                                           2):  # 获取表格三行以后数据,包括第三行
                         row_value = worksheet.row_values(curr_row + 2)
                         all_row_value.append(
                             row_value[0:17])  # 将表格0-16列数据转化为列表
                     logger.debug("{}".format(
                         worksheet.row_values(1)))  # 表头
                     logger.debug("{}".format(all_row_value))  # 表格0-16列数据
                     return all_row_value  # 返回第三列后的所有数据
                 else:
                     logger.error("用例模板表头格式有误")
                     exit(0)
                     # return "用例模板格式有误"
         else:
             logger.error("读取的不是.xls文件")
             exit(0)
     else:
         logger.error("用例文件格式有误")
         exit(0)
コード例 #15
0
 def test001(self):
     """文章推荐结果查询接口/文章相关文章查询接口/文章相关项目查询接口"""
     url_T01 = f'{self.base_url}{self.path_code["T01"][0]}'
     data_T01 = {"userId": self.user_id, "rcmdNum": 10, "pageNum": 1}
     res_text_T01 = request_post(url_T01, data_T01)
     try:
         res_dict_T01 = json.loads(res_text_T01)
         if res_dict_T01["code"] != 1000:
             case_message_T01 = {
                 "case_num": "T01",
                 "description": f'{self.path_code["T01"][1]}——————接口响应异常',
                 "log": f"{res_text_T01}"
             }
             SMS_message.append(case_message_T01)
         else:
             if len(res_dict_T01["recommendation"]) == 0:
                 case_message_T01 = {
                     "case_num": "T01",
                     "description": f'{self.path_code["T01"][1]}——推荐列表返回为空',
                     "log": f"{res_text_T01}"
                 }
                 SMS_message.append(case_message_T01)
             else:  # 执行T05/T07接口
                 # 执行T05接口
                 url_T05 = f'{self.base_url}{self.path_code["T05"][0]}'
                 data_T05 = {
                     "articleId": res_dict_T01["recommendation"][0]["id"],
                     "rcmdNum": 3,
                     "pageNum": 1
                 }
                 res_text_T05 = request_post(url_T05, data_T05)
                 res_dict_T05 = json.loads(res_text_T05)
                 if res_dict_T05["code"] != 1000:
                     case_message_T05 = {
                         "case_num": "T05",
                         "description":
                         f'{self.path_code["T05"][1]}——接口响应异常',
                         "log": f"{res_text_T05}"
                     }
                     SMS_message.append(case_message_T05)
                 else:
                     if len(res_dict_T05["recommendation"]) != 3:
                         case_message_T05 = {
                             "case_num": "T05",
                             "description":
                             f'{self.path_code["T05"][1]}——推荐列表返回为空或不足3条',
                             "log": f"{res_text_T05}"
                         }
                         SMS_message.append(case_message_T05)
                     else:
                         pass
                 # 执行T07接口
                 url_T07 = f'{self.base_url}{self.path_code["T07"][0]}'
                 data_T07 = {
                     "articleId": res_dict_T01["recommendation"][0]["id"],
                     "rcmdNum": 3,
                     "pageNum": 1
                 }
                 res_text_T07 = request_post(url_T07, data_T07)
                 res_dict_T07 = json.loads(res_text_T07)
                 if res_dict_T07["code"] != 1000:
                     case_message_T07 = {
                         "case_num": "T07",
                         "description":
                         f'{self.path_code["T07"][1]}——接口响应异常',
                         "log": f"{res_text_T07}"
                     }
                     SMS_message.append(case_message_T07)
                 else:
                     if len(res_dict_T07["recommendation"]) != 3:
                         case_message_T07 = {
                             "case_num": "T07",
                             "description":
                             f'{self.path_code["T07"][1]}——推荐列表返回为空或不足3条',
                             "log": f"{res_text_T07}"
                         }
                         SMS_message.append(case_message_T07)
                     else:
                         pass
     except Exception as msg:
         case_message = {
             "case_num": "T01/T05/T07",
             "description": 'T01/T05/T07接口——服务响应异常'
         }
         SMS_message.append(case_message)
         logger.error(f"系统异常记录:{case_message};报错信息:{msg}")
コード例 #16
0
    suite.addTest(MyTestCase('test004'))
    suite.addTest(MyTestCase('test005'))
    suite.addTest(MyTestCase('test006'))
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)
    if SMS_message:  # 存在错误信息发送短信
        # for msg in SMS_message:
        #     if message:
        #         message = message + ";{}:{}".format(msg["case_num"], msg["description"])
        #     else:
        #         message = "【线上接口监控】{}:{}".format(msg["case_num"], msg["description"])
        # robot_data = {
        #                 "msgtype": "text",
        #                 "text": {
        #                     "content": SMS_message
        #                 }
        #             }
        robot_data = {
            "msgtype": "text",
            "text": {
                "content":
                f"【线上接口监控异常消息】{json.dumps(SMS_message).encode('utf-8').decode('unicode_escape')}",
                "mentioned_mobile_list": ["18637607203"]
                # "mentioned_mobile_list": ["18637607203", "@all"]
            }
        }
        request_post(robot_url, robot_data)  # 发送企业微信信息
        logger.error("监控接口异常记录:{}".format(SMS_message))
    else:
        pass