通用技术 断言的东西如果是有延迟的要怎么处理?

卡丁车卡丁丁 · 2020年09月05日 · 最后由 泰斯特 回复于 2020年09月09日 · 2085 次阅读

比如用 testng,每个用例执行后,需要断言某个数据,但是这个数据有延迟,可能 10 分钟后才会生成

那总不能每个用例都在干等?有没有什么办法让别的用例先执行,回头再查询这个数据?

共收到 12 条回复 时间 点赞

可以用多线程执行用例,单独开一个线程跑这个用例。但是对于你这个异步查询用例所在的线程来说 还是阻塞的。
如果所有用例都是你说的这种要等 10 分钟才能进行断言的情况,似乎也没有想到有更好的办法

分成两份 job 呗,第一个 job 是发起,等十分钟后第二个 job 去逐个验证。只要中间把对应数据的关联信息建立起来就好。

把时间往前改 10 分钟

pytest 可以用 pytest-xdist 并发执行用例,testng 应该也有类似方法

用例拆成两个部分,一个是触发数据的生成,另一个是校验生成后的数据?

不过可以的话,建议还是看下是否可以加速。每次重新测试都要等待 10 分钟时间还是挺久的。

我还遇到过隔日再去验证的,需要将用例拆分成 2 份,测试过后就锁住,等待校验

改成几秒后生成。实在不行建议拆分,单独对这种进行验证。

Ouroboros 回复

这个改不了,这个数据是要一系列处理之后才会展示,并不是单纯时间限制

泰斯特 回复

具体一点?锁住咋锁

泰斯特 回复

拆分之后用例的成功失败咋标记?

可以给所有测试用例加逻辑判断是否需要执行或者等待断言,我是使用装饰器的形式:

其中 @DataStatsBehavior

这一行代码: DataReport.TEST_STATUS[current_func] = True 代表已经完成测试,

直到满足断言条件并完成断言后才会释放。

在 afterclass 中判断如果测试用例(数据统计)行为都已经完成后会进入到待验证的阶段:

然后有一条用例专门去做断言:

验证完成后又会在 afterclass 中将初始变量重制,开启下一轮循环。

(os:其实我也不想这么实现,奈何测试组长一定要当日手动完成行为,隔日 8 点去验证昨天的行为是否被系统统计到)

这个还是一样的在断言处完成

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册