一种浏览器自动化场景下的多客户端并发控制方法与流程

摘要: 本发明属于计算机,尤其涉及一种浏览器自动化场景下的多客户端并发控制方法。背景技术:1、随着浏览器自动化在软件测试、业务流程自动化、网页监控及多终端协同操作等场景...
一种浏览器自动化场景下的多客户端并发控制方法与流程

本发明属于计算机,尤其涉及一种浏览器自动化场景下的多客户端并发控制方法。

背景技术:

1、随着浏览器自动化在软件测试、业务流程自动化、网页监控及多终端协同操作等场景中的持续应用,浏览器控制方式逐渐由单个脚本独占浏览器运行环境发展为多个客户端经由统一自动化服务访问共享浏览器上下文。

2、在传统模式下,selenium、playwright等浏览器自动化技术通常按照脚本、任务或者客户端建立彼此隔离的浏览器实例或浏览器上下文,不同任务分别维护自身的登录状态、页面状态及站点存储,该方式适合相互独立的自动化任务,但在需要连续复用登录状态、跨步骤传递业务对象标识以及多个客户端协同处理同一业务会话的场景中,会产生重复登录、重复页面初始化和重复建立业务上下文等开销。

3、多个客户端共享同一浏览器上下文能够使已经形成的会话状态和页面环境得到复用,但同时使不同客户端的浏览器操作进入同一运行空间,进而产生新的并发控制问题。采用全局互斥或者统一的读写控制方式时,一个客户端执行页面修改操作会阻塞其他客户端,即使这些客户端实际操作的是不同页面或者不同业务对象,也需要等待前一操作结束,导致共享浏览器上下文中的多页面并行能力难以充分利用;若将控制粒度缩小到单个页面,又难以识别不同页面针对同一业务对象产生的并发修改,例如两个标签页分别打开同一个项目,一个客户端依据较早的项目状态准备创建业务数据,而另一个客户端已经从另一页面完成了对该项目的修改,此时两个操作虽然发生在不同页面,却实际依赖同一个业务状态。

4、浏览器自动化还具有明显的异步执行特征,客户端形成点击、输入或者提交操作时所依据的页面和业务状态,与该操作真正产生业务结果时的状态之间可能存在时间间隔,期间其他客户端已经完成的操作可能使原操作所依据的状态失效。更进一步,浏览器前端动作经常继续触发改变远端业务数据的网络请求,一旦该请求已经发送并由业务服务器执行,后续即使发现原操作基于失效状态,也难以仅通过恢复页面内容撤销已经形成的远端业务结果;部分网页还会在请求完成前执行按钮变化、表单关闭或者页面内容预更新,使错误操作同时影响浏览器本地状态和远端业务状态。

5、因此,共享浏览器上下文中的多客户端并发控制既需要识别不同页面对同一业务状态形成的实际竞争,又需要在远端业务修改真正生效以前确定原操作是否仍然具备有效执行条件,并在操作失效时阻止旧请求继续执行,从而兼顾不同客户端之间的并行能力与实际业务结果的一致性。

技术实现思路

1、本发明公开了一种浏览器自动化场景下的多客户端并发控制方法,以解决现有技术中的上述问题。

2、为了达到上述目的,本发明提供了一种浏览器自动化场景下的多客户端并发控制方法,用于浏览器自动化服务器,所述浏览器自动化服务器为多个客户端提供共享浏览器上下文,包括:

3、接收客户端提交的待执行浏览器操作,确定所述待执行浏览器操作对应的目标页面、当前业务上下文和状态依赖对象,读取所述状态依赖对象当前的状态版本,将所述待执行浏览器操作、所述目标页面、所述当前业务上下文、所述状态依赖对象和所述状态版本写入同一条操作记录,形成并发执行凭证;

4、在所述目标页面执行所述待执行浏览器操作的前端操作,拦截所述目标页面发起的网络请求,从拦截到的网络请求中识别副作用请求,在所述副作用请求发送至目标业务服务器之前暂停所述副作用请求,并将暂停后的副作用请求与所述并发执行凭证绑定,形成受控副作用请求;所述副作用请求为能够引起远端业务状态发生变化的网络请求;

5、在所述副作用请求发送至所述目标业务服务器之前,基于所述并发执行凭证和所述受控副作用请求进行提交判定,生成副作用提交指令,所述提交判定的判断条件包括页面连续性、版本连续性、业务对象连续性和请求连续性;

6、当所述副作用提交指令为允许提交时,恢复所述副作用请求发送至所述目标业务服务器,并在业务结果确认生效后更新所述状态依赖对象对应的状态版本;当所述副作用提交指令为禁止提交时,终止所述副作用请求。

7、进一步地,所述确定所述待执行浏览器操作对应的目标页面,包括:

8、当客户端请求中携带目标页面标识时,根据所述目标页面标识查询页面实例登记记录,取得对应的页面实例作为所述目标页面;所述页面实例登记记录在浏览器页面创建或者首次接管时建立,保存页面标识与页面实例之间的对应关系;

9、当客户端请求中未携带所述目标页面标识时,读取所述客户端当前登记的活动页面,将所述活动页面确定为所述目标页面;

10、当所述目标页面标识不能对应实际页面实例且所述客户端没有活动页面登记时,返回目标页面缺失结果,不生成所述并发执行凭证。

11、进一步地,所述当前业务上下文按照固定来源顺序取得,包括:

12、当客户端请求中携带业务对象标识时,直接采用所述业务对象标识作为所述当前业务上下文;

13、当客户端请求中未携带所述业务对象标识时,读取当前任务前序步骤已经保存的业务对象标识,作为所述当前业务上下文;

14、当所述当前任务中尚未保存业务对象标识且目标业务系统已经预先配置页面地址解析规则时,从所述目标页面当前地址中的固定位置读取业务对象标识,作为所述当前业务上下文;

15、上述来源按照既定顺序选取一个有效结果作为所述当前业务上下文。

16、进一步地,所述确定状态依赖对象,包括:

17、当所述待执行浏览器操作具有明确的所述当前业务上下文时,将所述当前业务上下文作为所述状态依赖对象,使不同页面操作同一业务对象时共享所述业务对象对应的状态版本;

18、当所述待执行浏览器操作不对应具体业务对象时,将所述目标页面作为所述状态依赖对象。

19、进一步地,所述状态版本的确定方式包括:

20、所述业务上下文首次被登记或者所述目标页面首次被登记时建立初始状态版本;

21、在针对所述状态依赖对象的浏览器自动化操作已经实际完成并确认生效时,将所述状态版本推进至下一版本;

22、当前操作执行过程中产生的按钮变化、加载提示或者尚未形成有效业务结果的局部页面变化,沿用操作开始时取得的状态版本。

23、进一步地,所述拦截所述目标页面发起的网络请求,从拦截到的网络请求中识别副作用请求,包括:

24、通过浏览器自动化框架提供的网络请求拦截接口,在请求实际发送至所述目标业务服务器之前取得所述目标页面发起的网络请求;

25、按照请求归属规则将拦截到的网络请求与所述并发执行凭证建立关联;所述请求归属规则包括:确认请求来源页面与所述目标页面对应;对于所述目标页面内部子页面产生的请求,根据浏览器自动化框架提供的页面从属关系归入同一目标页面;在当前操作已经产生一个明确关联请求后,所述关联请求进一步产生的重定向请求或者连续请求,根据浏览器提供的前序请求关系继续沿用所述并发执行凭证;

26、依据所述目标业务系统预先配置的接口规则,按照请求地址和请求方法匹配对应接口,识别能够引起远端业务状态发生创建、修改、删除或者提交结果变化的网络请求作为所述副作用请求。

27、进一步地,所述提交判定包括:

28、基于所述受控副作用请求中保存的原始请求拦截句柄读取当前暂停请求,通过当前暂停请求所属的页面实例取得实际来源页面,根据所述并发执行凭证中的目标页面标识查询页面实例登记记录,判断所述实际来源页面与所述目标页面保持对应,得到页面连续性判断结果;

29、根据所述并发执行凭证中的目标页面和当前业务上下文,从所述浏览器自动化服务器维护的有效状态记录中读取当前状态版本,与所述并发执行凭证中保存的原始状态版本进行比较,得到版本连续性判断结果;

30、将所述并发执行凭证中的当前业务上下文、所述受控副作用请求中的业务对象信息以及所述目标页面当前登记的业务上下文进行比较,得到业务对象连续性判断结果;

31、判断所述原始请求拦截句柄仍指向处于暂停状态的副作用请求,并且当前读取的请求地址、请求方法和请求内容与所述受控副作用请求中的记录保持对应,得到请求连续性判断结果;

32、将所述页面连续性判断结果、所述版本连续性判断结果、所述业务对象连续性判断结果和所述请求连续性判断结果进行布尔逻辑合取,得到所述提交判定。

33、进一步地,所述当所述副作用提交指令为允许提交时,恢复所述副作用请求发送至所述目标业务服务器,并在业务结果确认生效后更新所述状态依赖对象对应的状态版本,包括:

34、调用浏览器自动化框架的请求继续执行接口恢复原始请求,使所述副作用请求按照浏览器原有网络链路发送至所述目标业务服务器;所述副作用请求恢复后沿用原请求已经形成的会话信息、认证信息、请求内容和业务对象信息;

35、等待所述目标业务服务器返回执行结果,按照所述副作用请求对应接口在业务接入阶段配置的成功判定规则读取返回结果;

36、当返回结果满足所述成功判定规则时,将返回结果中的业务对象标识按照预先配置的响应字段位置写入当前任务的业务变量存储,并允许所述目标页面继续处理服务器响应;

37、根据本次操作实际改变的对象更新所述状态版本:当所述目标页面发生有效状态改变时,更新所述目标页面对应的状态版本;当所述当前业务上下文对应的业务数据发生改变时,更新所述当前业务上下文对应的状态版本。

38、进一步地,所述当所述副作用提交指令为允许提交时,还包括:

39、当请求恢复后发生网络超时、所述目标业务服务器返回失败或者返回结果未满足成功判定规则时,不推进所述目标页面或所述当前业务上下文对应的状态版本,将当前操作记录为失败结果后释放所述目标页面的操作占用。

40、进一步地,所述当所述副作用提交指令为禁止提交时,终止所述副作用请求,包括:

41、通过原始请求拦截句柄终止处于暂停状态的副作用请求,使处于暂停状态的副作用请求不再发送至所述目标业务服务器,并结束与处于暂停状态的副作用请求关联的当前浏览器自动化操作任务;

42、记录当前操作因原执行状态已经失效而终止,并释放所述目标页面对应的操作占用;

43、当所述目标页面在执行所述前端操作后已经进入等待网络结果的状态时,在请求终止后取得页面当前地址和页面实例状态,依据浏览器实际页面状态继续维护页面登记记录,使发起当前操作的客户端基于当前目标页面、当前业务上下文和最新状态版本重新生成新的并发执行凭证。

44、本发明的有益技术效果在于:通过并发执行凭证将操作形成时的目标页面、业务上下文和状态版本与后续实际产生的副作用请求持续关联,在请求真正发送至业务服务器之前完成状态一致性验证。一方面,不同页面只要操作同一业务对象即共享同一状态版本,使得发生在不同页面但针对同一业务对象的并发修改能够被准确识别,克服了传统页面级控制无法识别跨页面业务状态竞争的问题;另一方面,副作用请求在暂停状态下接受页面连续性、版本连续性、业务对象连续性和请求连续性的综合判定,使失效操作能够在远端业务结果实际形成之前被阻断,避免了传统方式中错误请求到达业务服务器后难以撤销的问题。状态版本仅在业务结果确认生效后推进,保证后续客户端始终基于真实有效的状态继续操作,既保持了不同页面之间互不影响的操作并行能力,又确保了共享浏览器上下文下多客户端自动化执行的业务状态一致性。