通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用。在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题。

这篇文章我们使用loguru模块来记录接口自动化测试中的日志。

一,封装日志记录器

实际项目中,我们不可能每个模块都去导入loguru模块,每个模块都单独去写一遍日志配置,这样麻烦又冗余。

最好的方式是针对项目单独封装、配置一个日志记录模块,作为公共的日志记录器,这既其他模块进行调用,也方便维护。

loggerController.py中封装的日志记录器,代码及注释示例如下:

  1. # @time: 2022-04-05
  2. # @author: 给你一页白纸
  3. # 微信公众号:测试上分之路
  4. from loguru import logger
  5. from datetime import datetime
  6. class ApiAutoLog():
  7. '''
  8. 利用loguru封装接口自动化项目日志记录器
  9. '''
  10. def __new__(cls, *args, **kwargs):
  11. log_name = datetime.now().strftime("%Y-%m-%d") # 以时间命名日志文件,格式为"年-月-日"
  12. sink = "../log/{}.log".format(log_name) # 日志记录文件路径
  13. level = "DEBUG" # 记录的最低日志级别为DEBUG
  14. encoding = "utf-8" # 写入日志文件时编码格式为utf-8
  15. enqueue = True # 多线程多进程时保证线程安全
  16. rotation = "500MB" # 日志文件最大为500MB,超过则新建文件记录日志
  17. retention = "1 week" # 日志保留时长为一星期,超时则清除
  18. logger.add(
  19. sink=sink, level=level, encoding=encoding,
  20. enqueue=enqueue, rotation=rotation, retention=retention
  21. )
  22. return logger
  23. log = ApiAutoLog()
  24. if __name__ == '__main__':
  25. log.debug("这是一条debug日志信息")
  26. log.info("这是一条info日志信息")
  27. log.warning("这是一条warning日志信息")
  28. log.critical("这是一条critical日志信息")

这样,在别的地方需要记录日志时,只需导入该模块即可使用,且当天的日志会记录在以指定时间格式命名的.log文件里,如2022-04-05.log

接下来我们通过调用该日志记录器来记录日志。

二,调用日志记录器记录日志

1. 明确接口自动化需要记录哪些日志

在做接口自动化时,我们首先需要确定测试用例需要记录哪些信息,换句话说,记录哪些日志才有意义?

  • 为了清晰地定位执行了哪条用例,执行时测试用例名称需要记录在日志信息里。

  • 接口的请求参数与返回参数必须记录在日志里,方便定位接口问题。

总之,博主认为,在接口自动化测试中,日志主要记录执行某条用例时对应的请求参数与返回参数即可,当然也可以更细化,这里不做过多说明。

2. 用例中记录日志示例

在明确了测试用例中需记录哪些日志信息后,我们用封装好的日志记录器去记录测试用例执行时的日志。

测试用例模块test_log.py中加入日志记录代码,示例如下:

  1. # @time: 2022-04-05
  2. # @author: 给你一页白纸
  3. # 微信公众号:测试上分之路
  4. import requests
  5. import pytest
  6. import json
  7. # 导入封装好的日志记录器
  8. from tools.loggerController import log
  9. # 测试类,仅为示例
  10. class TestLogDemo:
  11. '''get请求'''
  12. def test_get_weather_normal(self):
  13. '''校验百度天气查询接口'''
  14. url = "https://weathernew.pae.baidu.com/weathernew/pc"
  15. params = {
  16. "query": "浙江杭州天气",
  17. "srcid": 4982
  18. }
  19. log.info("请求参数为:{}, {}".format(url, params))
  20. res = requests.get(url=url, params=params)
  21. log.info("返回结果为:{}".format(res.text))
  22. assert res.status_code == 200
  23. assert "window.tplData" in res.text
  24. # 测试函数,post请求
  25. def test_login_normal():
  26. '''正确用户名、正确密码登录'''
  27. url = "http://127.0.0.1:5000/login"
  28. headers = {"Content-Type": "application/json;charset=utf8"}
  29. data = {
  30. "username": "AndyLiu",
  31. "password": "123456"
  32. }
  33. log.info("请求参数为:{}, {}, {}".format(url, headers, data))
  34. res = requests.post(url=url, json=data, headers=headers)
  35. log.info("返回结果为:{}".format(res.text))
  36. # 断言
  37. assert res.status_code == 200
  38. assert json.loads(res.text)["token"]
  39. if __name__ == '__main__':
  40. 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模块)的更多相关文章

  1. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  2. python(pytest)+allure+jenkins 实现接口自动化的思路

    效果图镇楼: 上述各模块作用: python(pytest): 1:用于读测试用例(本次用例写在csv文件中) 2:环境配置相关 3:提取1中的测试数据,组成请求体 4:发送请求 5:获取结果 6:断 ...

  3. web项目中日志管理工具的使用

    在web项目中,很多时候会用到日志管理工具,常见的日志管理用具有:JDK logging(配置文件:logging.properties) 和log4j(配置文件:log4j.properties) ...

  4. java项目中日志的配置

    1.日志相关比较详细的介绍:https://www.cnblogs.com/tanshaoxiaoji/p/log4j_config.html 2.总结1中博客说的内容 目前市场上常用的日志有log4 ...

  5. falsk 项目中日志设置

    app/__init__.py: 1 import logging from logging.handlers import RotatingFileHandler ''' 开发中使用DEBUG级别, ...

  6. 采用EntLib5.0(Unity+Interception+Caching)实现项目中可用的Caching机制

    看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中, ...

  7. 在express项目中使用formidable & multiparty实现文件上传

    安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...

  8. 如何在vue-cli项目中结合mockjs模拟假数据

    1.前言 在如今前后端分离的开发方式已被广泛采用的今天,前端同学和后端同学各自独立开发,后端提供数据接口,前端调用接口获取数据渲染页面.但是在实际开发中,后端开发由于逻辑相对复杂接口迟迟提供不到位,而 ...

  9. vue 项目中安装npm--save-dev 和 --save 命令

    在vue项目中我们常用npm install 安装模块或插件 有两种命令把他们写入到 package.json 文件里面去 例如安装axios 安装到开发环境npm axios --save-dev ...

随机推荐

  1. ES6技术之“判空方案”

    一.常用方案 直接判断 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  2. 控制算法的划分(自适应控制、预测控制、模糊控制等,PID等;蚁群算法、神经网络,还有机器学习、人工智能中的很多方法)

    一般来说,控制器的设计,分为控制框架的选取,跟参数的优化.自适应控制.预测控制.模糊控制等,跟PID一样,是控制算法(我习惯称为控制框架). 而粒子群.遗传算法(类似的还有蚁群算法.神经网络,还有机器 ...

  3. Initialization failed for 'https://start.spring.io

    本文精华(没空的小伙伴,直接看精华部分即可) 1.精华1: 开发/下载项目的时候考虑系统必备的版本兼容性 2.精华2: 通过火狐浏览器访问官网的旧版本,下载到任意需要的项目版本,然后通过项目导入ide ...

  4. IDEA安装配置Scala环境

    这里有详细步骤:windows上 IntelliJ IDEA安装scala环境 详细 初学

  5. CentOS7 Network Setting

    #display devices[root@localhost ~]# nmcli d #set ipv4 address[root@localhost ~]# nmcli c modify eth0 ...

  6. vuecli中配置webpack加快打包速度

    webpack4中webpack 的DllPlugin插件可以将常见的库文件作为dll文件来,每次打包的时候就不用再次打包库文件了. 但是游鱼西在vuecli中已经去除这个选项,意识到带来的打包速度提 ...

  7. vuejs兄弟组件之间的通信

    var Event = new Vue();//准备一个空的实例对象 //A组件 var A = { template: ` <div> <span>我是A组件的数据-> ...

  8. 使用cookie/session实现简单的用户信息的保存

    cookie一般用来存储非关键信息 , 用户名和密码等敏感信息一般采用session 来存储:cookie和session的最大区别是当服务器端存储session 之后,用户再次请求时候只是请求了一个 ...

  9. ansible模块解析及使用

    模块一:setup(收集远程主机信息) [root@zabbix30 /]# ansible test -m setup 模块二:ping(测试主机是否在线) [root@zabbix30 /]# a ...

  10. centos和redhat的区别

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...