python接口自动化测试框架设计 ( 第三章)-封装requests方法和日志

如果你不太明白这篇文章是做什么的,点击下方:

python接口自动化测试框架结构 ( 第二章)

前方高能!!正文开始!!

1、在lib文件夹内创建sendrequest_py文件

2、新建方法send_requests:

主要逻辑为,参数apidata为字典格式,通过字典的建获取值,将值做判断是否为空,为空传None,不为空则传入相应数据

def send_requests(apidata):
    """
    分析测试用例自带参数、发送请求
    :param apidata: 测试用例
    :return:
    """
    try:
        # 从读取的表格中获取响应的参数作为传递
        method = apidata["get_type"]
        url = apidata["url"]
        # 判断字典内请求头是否为空
        if apidata["header"] == '':
            #返回None
            header = None
        else:
            #将值处理后用做请求参数
            header = eval(apidata["header"])
        # 判断字典内测试数据是否为空
        if apidata["data"] == "":
        	#返回None
            body_data = None
        else:
        	#将值处理后用做请求参数
            body_data = eval(apidata["data"])
          
        s = requests.session()
        re = s.request(method=method, url='http://127.0.0.1:8000' + url, headers=header, json=body_data, verify=False) #将对应的数据填入相应位置返回res
        return re
    except Exception as error:
        logging.error("错误信息", error)

写入如下代码测试结果(不然写一大堆最后执行不了很蛋疼!):

if __name__ == '__main__':
    case_dict = {'id': 1.0, 'get_type': 'get', 'interface': '相加接口',
                 'title': '参数正常-成功', 'header': '', 'url': '/add',
                 'data': "{'a': 2, 'b': 1}",
                 'expected': "{'code': 0, 'msg': 'ok', 'value': 3}", 'code': 0,
                 'status': 200, 'msg': 'ok'}
    re = send_requests(case_dict)
    print(re.url)
    print(re.json())

运行结果如下:
在这里插入图片描述
封装完成,上述代码中url可进一步封装,封装置setting内,在创建方法判断执行环境,返回相应的url(底部有补充!!!!!!)

封装log.py之前先创建setting.py,新增如下(找不到文件在哪的回第一章!)

import os
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) #项目根目录
LOG_PATH = os.path.join(PROJECT_ROOT, 'log', 'api_test.log')  # 日志路径

3、lib文件创建__init__.py文件代码如下:

import logging

from lib.log import init_logging

# 环境切换 loc,dev,uat
surroundings = 'loc' #用来代替get_test_url方法的参数

init_logging()
logging.info("测试日志信息👇|{}环境".format(surroundings))

4、创建log.py代码如下,使用setting.py内的LOG_PATH代替路径:

import logging
from logging import handlers


def init_logging():
    # 1 初始化日志器
    logger = logging.getLogger()
    # 2 设置日志等级
    logger.setLevel(logging.INFO)
    # 3 创建控制处理器
    sh = logging.StreamHandler()
    # 4 创建文件处理器 - LOG_PATH为setting.py内的变量
    fh = logging.handlers.TimedRotatingFileHandler(filename=LOG_PATH, when='D', interval=1, backupCount=7,
                                                   encoding='utf-8')
    fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s %(funcName)s:%(lineno)d] - [%(message)s]"
    formatter = logging.Formatter(fmt)
    # 6 将格式化器添加到处理器
    sh.setFormatter(formatter)
    fh.setFormatter(formatter)
    # 7 将处理器添加到日志
    logger.addHandler(sh)
    logger.addHandler(fh)

写入如下代码测试结果(不然写一大堆最后执行不了很蛋疼!):

if __name__ == '__main__':
    init_logging()
    logging.info('——————————————你2020必暴富——————————————————')

返回结果如下,在log内生成文件,并打印信息:
在这里插入图片描述


以下是对url返回的补充
5、在setting.py文件内新增(找不到文件在哪的回第一章!!)

BASE_URL = "http://127.0.0.1:8000" # 本地url
BASE_URL_dev = 'http://127.0.0.1:8000' # 假装一下url不同
BASE_URL_uat = 'http://127.0.0.1:8000' # 假装一下url不同

在前往utils.py内创建返回URL地址的方法:

def get_test_url(msg):
    """
    返回不同环境的rul地址
    :param msg: loc:本地环境 uat:uat环境 dev:开发环境
    :return: url
    """
    if msg == 'dev':
        return setting.BASE_URL_dev #读取setting.py文件内的变量
    elif msg == 'uat':
        return setting.BASE_URL_uat
    elif msg == 'loc':
        return setting.BASE_URL

下面直接将该方法替换写死的url、并打印出请求参数,下面是完整代码

import logging
import requests
from lib.utlis import get_test_url
def send_requests(apidata):
    """
    分析测试用例自带参数、发送请求
    :param apidata: 测试用例
    :return:
    """
    try:
        # 从读取的表格中获取响应的参数作为传递
        method = apidata["get_type"]
        url = apidata["url"]
        if apidata["header"] == '':
            header = None
        else:
            header = eval(apidata["header"])
        # 判断表内是否有测试数据
        if apidata["data"] == "":
            body_data = None
        else:
            body_data = eval(apidata["data"])
        s = requests.session()
        logging.info('请求参数:{}'.format(body_data))
        re = s.request(method=method, url= get_test_url('loc') + url, headers=header, json=body_data)
        return re
    except Exception as error:
        logging.error("错误信息", error)

日常验证:

if __name__ == '__main__':
    case_dict = {'id': 1.0, 'get_type': 'get', 'interface': '相加接口',
                 'title': '参数正常-成功', 'header': '', 'url': '/add',
                 'data': "{'a': 2, 'b': 1}",
                 'expected': "{'code': 0, 'msg': 'ok', 'value': 3}", 'code': 0,
                 'status': 200, 'msg': 'ok'}
    re = send_requests(case_dict)
    print(re.url)
    print(re.json())

运行结果如下:
在这里插入图片描述
运行成功,其实最后这一步比较多余,但是告诉大家的是这只是一个封装思路!所有的需求都可以通过封装一个个方法所解决!(其实还是在凑点字数 0-0 )

下章封装执行脚本和断言

点击不迷路,python接口自动化测试框架结构 ( 第四章)
非常感谢您的阅读,第一次写博客文章,写的不好的地方多度包含,欢迎大佬指出代码中的不足,共同提升、共同进步!(要源代码 点赞关注后+VX dengwoi )

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值