测试平台系列(37) 运用装饰器给用例加上执行日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 运用装饰器给用例加上执行日志

大家好,这里是米洛,一个想和大家一起分享测试开发相关的技术,面试经验和成长经历的博主!


回顾


上一节成功把全局变量运用到了用例之中,后续我们的目标就是要完善执行用例的过程,暂时我们还是单接口+简单断言的经验宝宝,后面我们慢慢成长。

一点想法


其实React挺多观众还是不太熟悉的,后续如果我给同事培训的话,可能会分享一些学习React的资料。后续这个教程就不太讲前端部分了,应该大部分人都没啥兴趣。不过我会大概展示一下最新的页面效果。

前端优化展示


14.jpg

image

把基础部分,headers,body拆出来分3个tab展示。

15.PNG

image

有用到全局变量的地方,会拉取出全局变量,并能看到对应的值。这个选项也可以收起来。

开始本节旅程


看标题就可以知道我们本节要做啥子了。关于用例执行的日志,想起我在上家单位是类似这样的做法:


self.logger.append("正在替换全局变量: {}".format(xxx))

在一个用例的执行过程中,可以看到非常多这样的语句。那我们有没有更好的办法呢?

答案是有的。我们可以用装饰器去完成这个操作,在方法执行之前记录日志,执行之后继续记录日志,最终汇总到测试报告中。

初步设想


编写一个case_log的装饰器,给安排到Executor的每个方法上面,并在每个方法执行之前输出日志就好了。

实际操作


首先,我们回忆一下之前的Executor类。

16.jpg

image

当时是把Executor中的方法都设置为了staticmethod,也就是说里面的方法/变量都是通过来访问的。

那这样就导致了一个很麻烦的问题,我们的日志数据,存到哪里呢?因为是类方法,所以要知道装饰器接受的参数是不带有self或者cls的

有的同学会轻蔑一笑: "你在Executor类里面加一个logger的变量,存放日志不就好了?"

那样是不行的,因为Executor是面向所有用户的,一旦有多个用户在执行用例,那你的logger不就错乱了?简单的说就是这个方法不支持并发

我们在实际开发的时候一定要考虑到,你不是一个人在用这个系统。那我们改造其实很简单,把方法都设为实例方法,并且在生成Executor实例的时候,初始化一个list()用来存放日志数据。

着手改造Executor


  • 新增init()方法

17.jpg

image

这个_logger是专门存放日志数据的。

  • 改造Executor下的方法

18.jpg

image

就像这样,去掉@staticmethod的装饰器,把Executor.xxx都换成self.xxx

这样就解决了并发的问题,因为我每个线程拥有的实例是独立的,并不像class一样是共享的。

编写case_log装饰器


19.jpg

image

我们通过args[0]就能获取到self了(至于为什么,大家可以思考一下),通过self就能获取到logger变量了。(我这里写的cls,没啥关系,能理解它是self就行)

接着就是对参数的获取,日志话术的整理。

需要注意的是,我这里对每个方法都获取了一下__doc__,也就是方法的注释,如果没有的话就会取方法的名字。

对于一些类参数,我们直接输出它的话会比较难以阅读,那我们需要重写它的str方法,就可以达到话术友好的目的。

我们去看看TestCase类的改动:

20.jpg

image

我们标记了他是用例,并且给出了用例名字和id,因为显示用例全部信息不太现实(主要是占位置)。

改造执行方法


21.jpg

image

把日志给join一下并返回即可。

22.jpg

这里需要实例化

看看print的效果:

23.jpg

image

虽然效果不如直接用self.logger.append自由度高,但是也足够使用了。

进阶


其实很多时候日志需要高亮,我们其实可以输出html格式的日志,方便展示关键信息

今天的后端内容就到这儿了,博主继续去写前端部分了。




相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Java Shell
「sh脚步模版自取」测试线排查的三个脚本:启动、停止、重启、日志保存
「sh脚步模版自取」测试线排查的三个脚本:启动、停止、重启、日志保存
39 1
|
8天前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
18天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
82 1
|
1月前
|
Java 程序员 应用服务中间件
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
23 1
「测试线排查的一些经验-中篇」&& 调试日志实战
|
1月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
53 2
|
18天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
43 0
|
14天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
49 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
67 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
248 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
257 3
快速上手|HTTP 接口功能自动化测试
下一篇
无影云桌面