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

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

作者: 米洛丶 | 来源:发表于2021-08-19 10:13 被阅读0次

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

欢迎大家关注我的龚仲耗: 测试开发坑货

回顾

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

一点想法

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

前端优化展示

image

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

image

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

开始本节旅程

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

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

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

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

初步设想

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

实际操作

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

image

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

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

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

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

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

着手改造Executor

  • 新增init()方法
image

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

  • 改造Executor下的方法
image

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

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

编写case_log装饰器

image

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

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

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

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

我们去看看TestCase类的改动:

image

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

改造执行方法

image

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

这里需要实例化

看看print的效果:

image

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

进阶

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

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

项目地址

帮点个star,作者会更努力创作!

相关文章

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

    大家好,这里是米洛,一个想和大家一起分享测试开发相关的技术,面试经验和成长经历的博主! 欢迎大家关注我的龚仲耗: ...

  • Python测试框架:pytest之fixture使用浅析

    fixture通过装饰函数,使函数名可以作为变量传递给测试用例,最终在执行测试用例之前执行这个装饰过的函数。可以...

  • 5.完善自动化脚本

    添加装饰器 我们发现,当我们每执行一条用例就会执行一次setUp跟tearDown。也就是每执行一条用例就初始化a...

  • 测试平台系列(29) 编写用例执行的方法

    回顾 上期编写了用例详情页,这期我们快刀斩乱麻,来编写用例执行功能。 编写执行用例的方法 由于之前我们已经编写过了...

  • 第32讲 Unittest单元测试框架

    单元测试框架提供功能如下: 用例组织和执行 丰富的断言方法。检查点 丰富的日志 重要概念 TestCase。测试用...

  • pytest的单个用例多次执行

    pip install pytest-repeat 安装插件 再所要执行的用例上添加装饰器 @pytest.mar...

  • pytest中的hooks函数

    pytest的测试用例执行完成后,我们需要获取执行结果,以便统计测试结果,保存测试失败日志..... 常用函数: ...

  • 接口自动化2.0-多线程分享

    前言:接口测试平台由于越来越多的用例维护在上面,5000~6000条的用例执行线上执行1小时左右,而预发环境由于机...

  • Python两种方式实现单例模式

    装饰器模式实现单例 通过拦截类创建的是模式实现单例 测试结果

  • 装饰器

    函数装饰器:通常用于插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计 类装饰器:...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/npuobltx.html