测试人社区

UI自动化测试,并发分布式执行怎么解决用户账号冲突的问题

问题来源:

系统的登录账号具有唯一性,即:同一个账号信息在第一个浏览器上已登录,再在第二个浏览器中使用该账号,会挤掉第一个浏览器中的登录状态。在做并发执行的时候会导致账号竞争问题。

出现问题的规模:

项目存在数百个UI的用例,总执行时长为7小时+,想将项目自动化执行时长优化到1小时内

项目框架为:

selenium、pytest、pytest-xdist、allure2、selenium-grid

目前思路有:

1、全局变量
2、账号队列、账号池
3、编写一个账号提供服务

@seveniruby 手动@大佬 :smiley:
问下这种竞争一般怎么处理简单方便?有的话能否提供一下思路和源码用于参考一下 :grin:

并不是浏览器冲突 ,是你登录行为冲突。你提取cookie共用下就行。服务器管理session,每次登录会导致原有的session失效,所以不要重复登录。

共用cookie的话,也就是说所有的用例全交给一个账号来执行。每次登录的时候判断以下cookies是否有效,有效则使用cookie登录,无效了则重新登录并刷新cookie。如果用同一个账号来执行所有的用例,那么以前的老用例,将会有非常非常多的需要修改了。。。头大 :weary:

比如:用例前执行了清理环境的所有测试数据,而并发的下一个用例执行时会用到其中的数据,就会导致很多失败。那么以前老用例数据上的处理就将会是一个很大的工作量呐。而如果并发的是账号,每个账号去执行不同或相同的用例,都不会造成数据上的冲突性。因为每个账号是独立的。

能否实现这样的东西呢:20个账号,并发20,每个账号去获取和执行用例呢
就是不知道pytest在并发运行的时候,用例与用例间是什么关系,怎么去操作用例与账号

你理解错了,我说的方案是解决你的单个账号浏览器冲突问题。用例要尽量分拆,尽量不要共用账号。

大范围的用例数据要拆开,不只是账号,部分测试数据也得拆分避免互相干扰。有些用例必须要用同一账号的,就可以用我的办法。

对啊,数据隔离的重要性我清楚,现在我新写的用例都是很重视这个。。。可是…我入职公司前前同事已经写了很多的用例,都没做好隔离性,现在如果推翻重做的话,肯定不得行,成本和时间都不允许。只能在以前的基础上做适配,适当修改以前的用例是可以的,但没法做太多的修改,所以才想要将并发做成账号级别的。

咳~~~~都是前人遗留的问题。。。。

目前来看,写一个账号提供服务,大概率能解决我所遇到的问题,但是不知道有没有更加便捷的方式实现这种需求,毕竟做一个UI自动化,还要单独写一个账号服务,也太绕了点。。。。

pytest使用xdist做并发执行时候,用例间是什么关系呢?单例模式能不能生效,多个用例共用一个账号池,如果可以的话,那么单例模式应该也能解决这问题,但是里面的机制不太确定。