python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)
通过上篇文章日志管理模块loguru简介,我们已经知道了loguru
日志记录模块的简单使用。在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题。
这篇文章我们使用loguru
模块来记录接口自动化测试中的日志。
一,封装日志记录器
实际项目中,我们不可能每个模块都去导入loguru
模块,每个模块都单独去写一遍日志配置,这样麻烦又冗余。
最好的方式是针对项目单独封装、配置一个日志记录模块,作为公共的日志记录器,这既其他模块进行调用,也方便维护。
在loggerController.py
中封装的日志记录器,代码及注释示例如下:
# @time: 2022-04-05
# @author: 给你一页白纸
# 微信公众号:测试上分之路
from loguru import logger
from datetime import datetime
class ApiAutoLog():
'''
利用loguru封装接口自动化项目日志记录器
'''
def __new__(cls, *args, **kwargs):
log_name = datetime.now().strftime("%Y-%m-%d") # 以时间命名日志文件,格式为"年-月-日"
sink = "../log/{}.log".format(log_name) # 日志记录文件路径
level = "DEBUG" # 记录的最低日志级别为DEBUG
encoding = "utf-8" # 写入日志文件时编码格式为utf-8
enqueue = True # 多线程多进程时保证线程安全
rotation = "500MB" # 日志文件最大为500MB,超过则新建文件记录日志
retention = "1 week" # 日志保留时长为一星期,超时则清除
logger.add(
sink=sink, level=level, encoding=encoding,
enqueue=enqueue, rotation=rotation, retention=retention
)
return logger
log = ApiAutoLog()
if __name__ == '__main__':
log.debug("这是一条debug日志信息")
log.info("这是一条info日志信息")
log.warning("这是一条warning日志信息")
log.critical("这是一条critical日志信息")
这样,在别的地方需要记录日志时,只需导入该模块即可使用,且当天的日志会记录在以指定时间格式命名的.log
文件里,如2022-04-05.log
。
接下来我们通过调用该日志记录器来记录日志。
二,调用日志记录器记录日志
1. 明确接口自动化需要记录哪些日志
在做接口自动化时,我们首先需要确定测试用例需要记录哪些信息,换句话说,记录哪些日志才有意义?
为了清晰地定位执行了哪条用例,执行时测试用例名称需要记录在日志信息里。
接口的请求参数与返回参数必须记录在日志里,方便定位接口问题。
总之,博主认为,在接口自动化测试中,日志主要记录执行某条用例时对应的请求参数与返回参数
即可,当然也可以更细化,这里不做过多说明。
2. 用例中记录日志示例
在明确了测试用例中需记录哪些日志信息后,我们用封装好的日志记录器去记录测试用例执行时的日志。
测试用例模块test_log.py
中加入日志记录代码,示例如下:
# @time: 2022-04-05
# @author: 给你一页白纸
# 微信公众号:测试上分之路
import requests
import pytest
import json
# 导入封装好的日志记录器
from tools.loggerController import log
# 测试类,仅为示例
class TestLogDemo:
'''get请求'''
def test_get_weather_normal(self):
'''校验百度天气查询接口'''
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params = {
"query": "浙江杭州天气",
"srcid": 4982
}
log.info("请求参数为:{}, {}".format(url, params))
res = requests.get(url=url, params=params)
log.info("返回结果为:{}".format(res.text))
assert res.status_code == 200
assert "window.tplData" in res.text
# 测试函数,post请求
def test_login_normal():
'''正确用户名、正确密码登录'''
url = "http://127.0.0.1:5000/login"
headers = {"Content-Type": "application/json;charset=utf8"}
data = {
"username": "AndyLiu",
"password": "123456"
}
log.info("请求参数为:{}, {}, {}".format(url, headers, data))
res = requests.post(url=url, json=data, headers=headers)
log.info("返回结果为:{}".format(res.text))
# 断言
assert res.status_code == 200
assert json.loads(res.text)["token"]
if __name__ == '__main__':
pytest.main()
用例test_get_weather_normal
即请求查询天气接口。用例test_login_normal
查询的是自定义接口,该接口构造比较简单,学习过程中没有可用于请求调试的接口,则可以参考文章使用Flask开发简单接口自己开发简单接口。
接下来我们来运行该测试模块test_log.py
,结果如下:
用例test_get_weather_normal
返回的结果是一大串html文档内容。用例test_login_normal
显示在日志文件的最后面,如下所示:
从结果可以看出来,日志文件中记录的日志非常清晰,且使用loguru
默认的format
格式时,会自动记录日志对应的函数名、方法名。
三,总结
最后我们一起来做个总结,如下:
在实际项目中需要自己封装相应配置的日志记录器用于公共调用,而不是每个模块单独配置使用
loguru
或者logging
。我们要先明确自动化项目运行过程中需要哪些信息需要记录,然后再在代码中记录对应的内容。
相对于python自带的
logging
模块,我们进一步看到了loguru
模块简单得不可以思议。
python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)的更多相关文章
- Python+Pytest+Allure+Git+Jenkins接口自动化框架
Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...
- python(pytest)+allure+jenkins 实现接口自动化的思路
效果图镇楼: 上述各模块作用: python(pytest): 1:用于读测试用例(本次用例写在csv文件中) 2:环境配置相关 3:提取1中的测试数据,组成请求体 4:发送请求 5:获取结果 6:断 ...
- web项目中日志管理工具的使用
在web项目中,很多时候会用到日志管理工具,常见的日志管理用具有:JDK logging(配置文件:logging.properties) 和log4j(配置文件:log4j.properties) ...
- java项目中日志的配置
1.日志相关比较详细的介绍:https://www.cnblogs.com/tanshaoxiaoji/p/log4j_config.html 2.总结1中博客说的内容 目前市场上常用的日志有log4 ...
- falsk 项目中日志设置
app/__init__.py: 1 import logging from logging.handlers import RotatingFileHandler ''' 开发中使用DEBUG级别, ...
- 采用EntLib5.0(Unity+Interception+Caching)实现项目中可用的Caching机制
看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中, ...
- 在express项目中使用formidable & multiparty实现文件上传
安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...
- 如何在vue-cli项目中结合mockjs模拟假数据
1.前言 在如今前后端分离的开发方式已被广泛采用的今天,前端同学和后端同学各自独立开发,后端提供数据接口,前端调用接口获取数据渲染页面.但是在实际开发中,后端开发由于逻辑相对复杂接口迟迟提供不到位,而 ...
- vue 项目中安装npm--save-dev 和 --save 命令
在vue项目中我们常用npm install 安装模块或插件 有两种命令把他们写入到 package.json 文件里面去 例如安装axios 安装到开发环境npm axios --save-dev ...
随机推荐
- C语言类型转换原理
C语言类型转换 int a; a=1.23 这里把1.23赋值给a发生了隐式转换,原理如下: int a; float b=3.14; a=b; b赋值给a的过程:首先找一个中间变量是a的类型(该例中 ...
- Python的数据基础库Numpy怎样对数组进行排序
Numpy怎样对数组排序 Numpy给数组排序的三个方法: numpy.sort:返回排序后数组的拷贝 array.sort:原地排序数组而不是返回拷贝 numpy.argsort:间接排序,返回的是 ...
- C# Tutorial for Frontend Developer
1.Basic Hello World Console output -> console.log Console.WriteLine("Hello World!"); Va ...
- DOM 小总结
DOM 是什么 文档对象模型,是针对 HTML 和 XML 文档的一个 API (应用程序编程接口), 描绘了一个层次化的节点树. D: document 当 web 浏览器浏览一个页面的时候,DOM ...
- 前端工作面试HTML相关问题
前端工作面试HTML相关问题 Q: doctype(文档类型)的作用是什么? A: 在HTML中 doctype 有两个主要目的. 对文档进行有效性验证: 它告诉用户代理和校验器这个文档是按照什么DT ...
- 使用Vue2+webpack+Es6快速开发一个移动端项目,封装属于自己的jsonpAPI和手势响应式组件
导语 最近看到不少使用vue制作的音乐播放器,挺好玩的,本来工作中也经常使用Vue,一起交流学习,好的话点个star哦 本项目特点如下 : 1. 原生js封装自己的跨域请求函数,支持promise调用 ...
- css3 nth-child选择器
css3 nth-child选择器 css3的nth-child选择器,乍看起来很简单,其实不是那么容易. 简单用法 p:nth-child(n) // 选择属于其父元素的第n个子元素的每个 < ...
- [翻译]Service workers:PWA背后的英雄
原文地址:https://medium.freecodecamp.org/service-workers-the-little-heroes-behind-progressive-web-apps-4 ...
- 为什么局部内部类访问外边的局部变量必须为final
6.局部内部类访问外边的局部变量时,此变量必须为final类型 马克-to-win:由于技术方面的限制,java的设计者们做出如下语法规定:局部内部类访问外边的局部变量时,此变量必须为final类型, ...
- 前后端分离mockjs以及webpack-dev-server代理
一: 在webpack中使用mockjs mockjs 也就是模拟数据(mock.js模拟的数据可以不跨域) 安装mock新建mock.js var Mock = require('mockjs') ...