pytest执行顺序:前后case存在相互影响

1. pytest执行模块不是顺序的

pytest在执行一个模块的所有case时,并不是按照代码从上往下的顺序执行的。

每个case的测试环境是一定的,有前置和后置环节,如果在测试过程中有其他case插入,就可能产生这样的情况:其他case的操作导致被插入的case执行环境异常,从而导致测试不通过。即:case之间相互影响。

2. 实际举例

以上是在某个自动化测试过程中发现了该问题。
test_live_window 这个case 在执行测试时,出现部分跑过、部分不过的问题,而且这个问题在Jenkins上跑是必现的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L1RIujAD-1588937827740)(/api/project/236324/files/20869572/imagePreview)]
另外,我通过对比那部分报错的case,发现报错的位置都是一样的,涉及具体的业务就是获取的“窗格信息”的宽和高数值反了,即宽变成了高,高变成了宽。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uf1hRN7I-1588937827742)(/api/project/236324/files/20869579/imagePreview)]

于是我在本地的pycharm中执行这个test_live_window 的case,并没有发现问题,都是可以跑过的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VG8FrXVC-1588937827744)(/api/project/236324/files/20869374/imagePreview)]

那么问题出在哪里呢?
可以看出,只有在Jenkins上跑全部的case时会出现,在本地单跑这一条测试用例可以成功,没有问题;那么我现在本地的pycharm中扩大测试范围,即跑 test_live_window 所在的脚本(模块),这样会执行该脚本中的所有case,而不只是 test_live_window 单条case,在这种方法下,终于发现了问题,能复现在使用Jenkins跑所有测试脚本时出现的问题了。

从图中可以看出,test_live_window 这个case的所有参数化构建的场景一共有18个,但并不是连续跑完的,中间竟然还跑了其他的case,这里中间插入的就是 test_live_ucode_mirror(这个case会切换镜像,难怪会产生前面提到的宽和高相反的问题),这样就破坏了test_live_window的测试环境了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1sDkbZj-1588937827746)(/api/project/236324/files/20869462/imagePreview)]

3. 解决case之间的相互影响

使用class,用类的范围将 test_live_window 包含起来,这样即使再多的参数化构建,也会一起连续跑完了,不会被其他无关的case插入,可以保证当前的测试环境没有问题。

原来是写成一个单独的函数:在这里插入图片描述
现在用class包含起来:
在这里插入图片描述
同时,在写case时,要注意每个fixture的作用范围,合理地使用function、class、module等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值