Example #1
0
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()
Example #2
0
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
Example #3
0
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']
Example #4
0
"""
# @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("--------------------用例执行完毕--------------------")