def get_relevance_conf(self): relevance = dict() logging.debug("读取初始关联文件内容: %s" % self.host.items()) for key, value in self.host.items(): relevance[key] = function_replace(value) logging.debug("初始关联内容数据处理后: %s" % relevance) return relevance
def get(header, address, data, timeout=8): """ get 请求 :param header: 请求头 :param address: host地址 :param data: 请求参数 :param timeout: 超时时间 :return: """ response = requests.get(url=address, params=data, headers=header, timeout=timeout) if response.status_code == 301: response = requests.get(url=response.headers["location"]) try: return response.status_code, response.json() except json.decoder.JSONDecodeError: return response.status_code, '' except simplejson.errors.JSONDecodeError: return response.status_code, '' except Exception as e: logging.exception('ERROR') logging.error(e) raise
def put(header, address, request_parameter_type, data=None, timeout=8, files=None): """ put 请求 :param header: 请求头 :param address: host地址 :param request_parameter_type: 接口请求参数格式 (form-data, raw, Restful) :param data: 请求参数 :param timeout: 超时时间 :param files: 文件路径 :return: """ if request_parameter_type == 'raw': data = json.dumps(data) response = requests.put(url=address, data=data, headers=header, timeout=timeout, files=files) try: return response.status_code, response.json() except json.decoder.JSONDecodeError: return response.status_code, '' except simplejson.errors.JSONDecodeError: return response.status_code, '' except Exception as e: logging.exception('ERROR') logging.error(e) raise
def scroll_text_click(self, text_value): self.driver.find_element_by_android_uiautomator( 'new UiScrollable(' 'new UiSelector().scrollable(true).instance(0))' '.scrollIntoView(' 'new UiSelector().text("' + text_value + '").instance(0));').click() MyLog.info("找到text:{}".format(text_value))
def click_element(self, locator): element = self.wait_element_visibility(locator) try: MyLog.info("点击元素:{}".format(locator)) element.click() except Exception as e: MyLog.error("点击元素:{}失败".format(locator)) self.save_image() raise e
def input_text(self, locator, value): element = self.wait_element_visibility(locator) try: MyLog.info("点击:{},输入:{}".format(locator, value)) element.send_keys(value) except Exception as e: MyLog.error("输入数据:{}失败".format(value)) self.save_image() raise e
def get_element_text(self, locator): element = self.wait_element_visibility(locator) try: MyLog.info("获取:{}元素文本:{}".format(locator, element.text)) return element.text except Exception as e: MyLog.error("获取元素文本:{}失败".format(element.text)) self.save_image() raise e
def wait_element_visibility(self, locator) -> WebElement: MyLog.info("等待元素:{}".format(locator)) try: element = WebDriverWait(self.driver, 20).until( expected_conditions.presence_of_element_located(locator)) return element except Exception as e: MyLog.error("等待元素:{}超时".format(locator)) self.save_image() raise e
def long_click(self, locator): action = TouchAction(self.driver) element = self.wait_element_visibility(locator) try: MyLog.info("长按:{}元素".format(locator)) action.long_press(element).wait(10000).perform() except Exception as e: MyLog.error("长按元素:{}失败".format(locator)) self.save_image() raise e
def get_toast_msg(self, locator): #return (By.XPATH, "//*[@class='android.widget.Toast']") #return (By.XPATH, "//*[@text='审核成功']") toast_msg = self.wait_element_visibility(locator) try: MyLog.info("获取toast元素:{},文本:{}".format(locator, toast_msg.text)) return toast_msg.text except Exception as e: MyLog.error("获取toast元素文本:{}失败".format(toast_msg.text)) self.save_image() raise e
def get_relevance(data, relevance_list, relevance): """ 从返回结果中获取关联键的值 :param data: 返回结果 :param relevance_list: 关联键列表 :param relevance: 关联对象 :return: """ # 关联键是否时list if not relevance_list: return relevance logging.debug("从返回结果中根据关联键%s提取值" % relevance_list) if isinstance(relevance_list, list): # 遍历关联键 for j in relevance_list: # 从结果中提取关联键的值 relevance_value = get_value(data, j) if relevance_value: # 考虑到一个关联键,多个值 if j in relevance: if isinstance(relevance[j], list): a = relevance[j] a.append(relevance_value) relevance[j] = a else: a = relevance[j] b = list() b.append(a) b.append(relevance_value) relevance[j] = b else: relevance[j] = relevance_value else: return False else: relevance_value = get_value(data, relevance_list) if relevance_value: # 考虑到一个关联键,多个值 if relevance_list in relevance: if isinstance(relevance_list, list): a = relevance[relevance_list] a.append(relevance_value) relevance[relevance_list] = a else: a = relevance[relevance_list] b = list() b.append(a) b.append(relevance_value) relevance[relevance_list] = a else: relevance[relevance_list] = relevance_value logging.debug("提取后,关联键对象\n%s" % relevance) return relevance
def save_image(self): try: base_dir = os.path.dirname(os.path.dirname(__file__)) screenshot_dir = os.path.join(base_dir, "image") screenshot_img = os.path.join(screenshot_dir, str(int(time.time())) + ".png") self.driver.get_screenshot_as_file(screenshot_img) MyLog.info('保存截图至:{}'.format(screenshot_img)) except NameError as e: MyLog.info('保存截图失败:%s' % e) self.save_image() return screenshot_img
def __init__(self, model): global host, port, timeout host = None try: host = localReadConfig.get_http(model) except Exception: host = localReadConfig.get_http("default_base_url") port = None try: port = localReadConfig.get_port(model) except Exception: port = localReadConfig.get_port("default_port") timeout = None try: timeout = localReadConfig.get_time_out(model) except Exception: timeout = localReadConfig.get_time_out("default_timeout") self.log = Log.get_log() self.logger = self.log.get_logger() self.__headers = {} self.__params = {} self.__data = {} self.__url = None self.__files = {}
def __init__(self): global host, user, password, port, sender, title host = localReadConfig.get_Email("mail_host") user = localReadConfig.get_Email("mail_user") print(user) password = localReadConfig.get_Email("mail_pass") print(password) port = localReadConfig.get_Email("mail_port") sender = localReadConfig.get_Email("sender") title = localReadConfig.get_Email("subject") # content = localReadConfig.get_email("content") # get receiver list self.value = localReadConfig.get_Email("receiver") self.receiver = [] for n in str(self.value).split("/"): print(n) self.receiver.append(n) # defined email subject date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.subject = "接口测试报告" + " " + date self.log = MyLog.get_log() self.logger = self.log.get_logger() self.msg = MIMEMultipart('related')
def setUp(self): """ :return: """ self.log = Log.get_log() # 实例化日志 self.logger = self.log.get_logger() print(self.case_name + "测试开始前准备")
def __init__(self): global log, logger, resultPath log = Log.get_log() logger = log.get_logger() resultPath = log.get_report_path() self.caseListFile = os.path.join(readConfig.proDir, "caselist.txt") self.caseFile = os.path.join(readConfig.proDir, "caseCase") self.caseList = []
def setUp(self): ''' :return: ''' self.log = MyLog.get_log() self.logger = self.log.get_logger() print(self.case_name + '-测试开始前准备')
def __init__(self): global base_url, timeout base_url = configs.get_url("Base_Url") timeout = configs.get_url("Time_Out") self.log = Log.get_log() self.logger = self.log.get_logger() self.params = {} self.headers = {} self.data = {}
def __init__(self): global host, port, username, password, database host = localReadConfig.get_db("host") port = localReadConfig.get_db("port") username = localReadConfig.get_db("username") password = localReadConfig.get_db("password") database = localReadConfig.get_db("database") # init log class self.getLog = MyLog.getLog() self.log = self.getLog.logger
def __init__(self): global log, logger, resultPath, on_off log = Log.get_log() logger = log.get_logger() resultPath = log.get_report_path() on_off = localReadConfig.get_Email("on_off") self.caseListFile = os.path.join(readConfig.proDir, "caselist.txt") self.caseFile = os.path.join(readConfig.proDir, "testcase/dccj") # self.caseFile = None self.caseList = [] self.email = MyEmail.get_email()
def __init__(self): global localhost, db_user, db_password, test_db localhost = Config().get('db')['localhost'] db_user = Config().get('db')['db_user'] db_password = Config().get('db')['db_password'] test_db = Config().get('db')['test_db'] self.localhost = localhost self.db_user = db_user self.db_password = db_password self.test_db = test_db self.log = Log.get_log() self.logger = self.log.get_logger()
def __init__(self): global host, port, timeout host = localReadConfig.get_http("baseurl") port = localReadConfig.get_http("port") timeout = localReadConfig.get_http("timeout") self.log = Log.get_log() self.logger = self.log.get_logger() self.headers = {} self.params = {} self.data = {} self.url = None self.files = {}
def save_cookie(header, address, timeout=8, data=None, files=None): """ 保存cookie信息 :param header: 请求头 :param address: 请求地址 :param timeout: 超时时间 :param data: 请求参数 :param files: 文件路径 :return: """ cookie_path = setupMain.PATH + '/aff/data/cookie.txt' response = requests.post(url=address, data=data, headers=header, timeout=timeout, files=files) try: cookie = response.cookies.get_dict() for i in cookie: values = cookie[i] with open(cookie_path, 'w+', encoding='utf-8')as f: f.write(i+"="+values) logging.debug("cookies已保存,结果为:%s" % (i+"="+values)) except json.decoder.JSONDecodeError: return response.status_code, '' except simplejson.errors.JSONDecodeError: return response.status_code, '' except Exception as e: logging.exception('ERROR') logging.error(e) raise
def post(header, address, request_parameter_type, timeout=8, data=None, files=None): """ post请求 :param header: 请求头 :param address: 请求地址 :param request_parameter_type: 请求参数格式(form_data,raw) :param timeout: 超时时间 :param data: 请求参数 :param files: 文件路径 :return: """ if 'form_data' in request_parameter_type: for i in files: value = files[i] if '/' in value: file_parm = i files[file_parm] = (os.path.basename(value), open(value, 'rb')) enc = MultipartEncoder( fields=files, boundary='--------------' + str(random.randint(1e28, 1e29 - 1)) ) header['Content-Type'] = enc.content_type response = requests.post(url=address, data=enc, headers=header, timeout=timeout) else: response = requests.post(url=address, data=data, headers=header, timeout=timeout, files=files) try: if response.status_code != 200: return response.status_code, response.text else: return response.status_code, response.json() except json.decoder.JSONDecodeError: return response.status_code, '' except simplejson.errors.JSONDecodeError: return response.status_code, '' except Exception as e: logging.exception('ERROR') logging.error(e) raise
def __init__(self): global scheme, host, port, timeout scheme = Config().get('scheme') host = Config().get('host') port = Config().get('port') timeout = Config().get('timeout') self.log = Log.get_log() self.logger = self.log.get_logger() self.headers = {} self.params = {} self.data = {} self.url = None self.files = {} self.state = 0
def setUp(self): self.httprequest = configHttps.ConfigHttps() self.token = selfArgs.get_userDefindArgs("X-XSRF-TOKEN") self.js = selfArgs.get_userDefindArgs("JsessionId") self.headers = { "appDeviceType": "IOS", "language": "en_UK", "Content-Type": "application/json; charset=utf-8", "XSRF-TOKEN": self.token, 'Cookie': "JSESSIONID=" + self.js } self.getLog = MyLog.getLog() self.testlog = self.getLog.logger
def ini_request(case_dict, relevance, _path, result): """ 用例前提条件执行,提取关联键 :param case_dict: 用例对象 :param relevance: 关联对象 :param _path: case路径 :param result: 全局结果 :return: """ if isinstance(case_dict["premise"], list): logging.info("执行测试用例前置接口") with allure.step("接口关联请求"): for i in case_dict["premise"]: relevance_list = relevance.copy() for j in range(0, 3): # 获取前置接口关联数据失败 code, data = send_request( i, case_dict["testinfo"].get("host"), case_dict["testinfo"].get("address"), relevance_list, _path, result) if not data: with allure.step("接口请求失败!等待三秒后重试!"): pass logging.info("接口请求失败!等待三秒后重试!") continue if i["relevance"]: if len(i["relevance"]): relevance = get_relevance(data, i["relevance"], relevance) if isinstance(relevance, bool): with allure.step("从结果中提取关联键的值失败!等待3秒后重试!"): pass logging.info("从结果中提取关联键的值失败!等待3秒后重试!") time.sleep(3) continue else: break else: break else: break if isinstance(relevance, bool): logging.info("从结果中提取关联键的值失败!重试三次失败") result["result"] = False raise failureException("获取前置接口关联数据失败") return relevance
def __init__(self): global scheme, host, port, timeout, host_au scheme = localReadConfig.get_http("scheme") host = localReadConfig.get_http("baseurl") port = localReadConfig.get_http("port") timeout = localReadConfig.get_http("timeout") host_au = localReadConfig.get_http("Authorization_url") self.log = Log.get_log() self.logger = self.log.get_logger() self.headers = {} self.params = {} self.data = {} self.url = None self.files = {} self.state = 0
def __init__(self): global host, username, password, port, database, config host = localReadConfig.get_db("host") username = localReadConfig.get_db("username") password = localReadConfig.get_db("password") port = localReadConfig.get_db("port") database = localReadConfig.get_db("database") config = { 'host': str(host), 'user': username, 'passwd': password, 'port': int(port), 'db': database } self.log = Log.get_log() self.logger = self.log.get_logger() self.db = None self.cursor = None
def __init__(self): '''初始化邮件属性''' self.Rc = RC.ReadConfig() self.server = self.Rc.getMail('Smtp_Server') self.sender = self.Rc.getMail('Smtp_Sender') self.password = self.Rc.getMail('Password') self.LReceiver = self.Rc.getMail('OnLine_Receiver') self.PReceiver = self.Rc.getMail('Pre_Receiver') self.TReceiver = self.Rc.getMail('Test_Receiver') self.Msg_Title = self.Rc.getMail('Msg_Title') self.Content_Type = self.Rc.getMail('Content_Type') self.Content_Disposition = self.Rc.getMail('Content_Disposition') self.resultPath = self.Rc.getMail('resultPath') # 实例化MyLog self.log = MyLog.getLog('SendEmail') self.logger = self.log.logger # 实例化msg self.msg = MIMEMultipart()