class HttpRequests: """ 1.通过http_request方法来完成http请求,并得到返回结果 2.同一个session对象调用request方法才会自动传入cookies到下一个请求中 3.不同对象中,cookies不共享 4.这种方式不需要获取登录后的cookies,自动收集cookies """ log_ob = MyLog(__name__).my_log() def __init__(self): # 打开一个session self.session = requests.sessions.session() def http_request(self, method, url, data=None, json=None): # 由于传参是json格式,这里先把参数进行eval.eval函数:脱掉数据的外套 if type(data) == str: data = eval(data) # 拼接地址和url url = ReadConfig().get_value('api', 'base_url') + url self.log_ob.debug('请求的方式:{}'.format(method)) self.log_ob.debug('请求的地址:{}'.format(url)) self.log_ob.debug('请求的数据:{}'.format(data)) # 根据get和post传参不同来进行判断 if method.upper() == 'GET': resp = self.session.request(method=method, url=url, params=data) elif method.upper() == 'POST': if json is not None: # 或者 if json: resp = self.session.request(method=method, url=url, json=data) else: resp = self.session.request(method=method, url=url, data=data) else: self.log_ob.error('不支持的请求方式') self.log_ob.info('返回的结果:{}'.format(resp.text)) return resp # 关闭请求 def close(self): self.session.close()
def DoRe(data): """ 1.用正则表达式来匹配测试数据中的指定字符 2.根据指定字符获取到配置文件中对应的值 3.然后进行替换 """ # 正则表达式 匹配组当中多次或者最多一次单个字符 pattern = '#(.*?)#' while re.search(pattern, data): # 从任意位置开始找,找第一个就返回Match object, 如果没有找None search = re.search(pattern, data) # 拿到参数化的KEY group = search.group(1) try: # 根据KEY取配置文件里面的值 value = ReadConfig().get_value('data', group) except configparser.NoOptionError as e: # 如果配置文件里面没有的时候,去do_re模块中类Context里面取 # 判断类属性名是否在Context中 if hasattr(Context, group): # 获取类属性值 value = getattr(Context, group) else: MyLog(__name__).my_log().error('找不到参数化的值。报错:{}'.format(e)) raise e """ 记得替换后的内容,继续用data接收 """ # 查找替换,count查找替换的次数 data = re.sub(pattern, value, data, count=1) return data
class GetNodeList_auth: doexcel_ob = DoExcel(contants.case_file, 'GetNodeList') log_ob = MyLog(__name__).my_log() @pytest.mark.parametrize('case', doexcel_ob.get_cases()) def test_auth_GetNodeList(self, before_after_request, case): self.log_ob.debug('第 {} 条用例'.format(case.case_id)) self.log_ob.debug('用例名称:{}'.format(case.case_name)) resp = before_after_request.http_request(case.method, case.url, case.data) self.result = resp.json() row = case.case_id + 1 result = str(self.result) try: assert self.result['code'] == eval(case.expected)['code'] DoExcel(contants.case_file, 'GetNodeList').write_case(row, result, 'pass') self.log_ob.debug("成功用例回写EXCEL成功") except: DoExcel(contants.case_file, 'GetNodeList').write_case(row, result, 'failed') self.log_ob.debug("失败用例回写EXCEL成功") assert self.result['code'] == eval(case.expected)['code']
""" # @Time : 2019/8/30 11:52 # @Author : 谢超 # @File : conftest.py # @Function: 测试前置后置等 """ import pytest from Common.http_request import HttpRequests from Common.do_log import MyLog log_ob = MyLog(__name__).my_log() @pytest.fixture(scope="class") def before_after_request(): log_ob.info("--------------------开始执行用例--------------------") request_ob = HttpRequests() yield request_ob request_ob.close() log_ob.info("--------------------用例执行完毕--------------------")