天天看点

Selenium执行测试脚本稳定性的一些经验分享交流

  公司的自动化web测试框架iata已上线运行了一段时间,期间发现一些脚本稳定性的问题,与大家分享一下。

  case执行游览器:ie firefox chrome

  稳定性问题

   一、在持续执行web自动化的过程中,如需持续执行脚本,比如持续跑脚本24小时,48小时,甚至一周时间。测试case会间歇性发生持续加载页面无响 应的情况。此现象发生后,测试case就会因为持续加载页面这个动作而无响应。后续case也不会执行直到当前人为手工解决当前的测试进程。

  现象:页面持续加载 无反应,测试case 中断无法继续执行。

  解决方案:

Selenium执行测试脚本稳定性的一些经验分享交流

  1)如上图

  建议使用线程的方式来监控测试进程的web加载执行状态。若超时后则从线程中fail当前case,使脚本可以持续运行。

  方法

   在页面会发生跳转的时候 启一个 thread来监控进程的状况,在thread的run方法定义一个 计时器,如果计时器超时,则可以刷新页面,计时器清零,若此时刷新页面后,计时器再次超时,则线程会关闭当前进程的游览器,fail掉当前的 case,testng会自动启动下一个测试case。并且在全部测试case执行完毕后,testng会记载执行失败的case,然后从新执行 case。

  部分thread 代码

  refresh  code:

Selenium执行测试脚本稳定性的一些经验分享交流

  干掉线程的 code

Selenium执行测试脚本稳定性的一些经验分享交流

  这里是关掉chrome的进程 来达到关闭游览器的目的。

  通过上述步骤则可以控制游览器加载的过程从而解决case中加载页面无响应导致的case暂停问题。

 我们发现使用webdriver的过程中,testcase在执行时,并非只有get(url)的时候会发生测试case卡主的问题,以下是对会发生此情况的函数的补充

  driver.findelement(string locator) //查找页面元素

driver.refush(); //刷新页面

driver.getpagesource(); //获取页面html文本输出

element.click();//点击页面元素

  见过检查发现上述函数在加载页面或查找页面元素的时候,若发生由于网络原因或者页面模块加载出现问题时,页面都会在这个过程中卡住,直接的后果就是这个case持续执行几小时没结果。在 稳定性1文中我们已经介绍过处理的方法,在这里只针对某一个函数去放出部分代码,

  具体思路为

  以driver.refush();为例

  线程实现的代码

Selenium执行测试脚本稳定性的一些经验分享交流

  核心调用的刷新页面的函数

Selenium执行测试脚本稳定性的一些经验分享交流

  refreshthread();实现

Selenium执行测试脚本稳定性的一些经验分享交流

  调用流程

  主case执行刷新函数?刷新函数调用子线程?子线程执行刷新?执行完毕告诉主线程ok。

  若主线程判断子线程超时既页面卡主的情况,则主线程会关闭子线程执行相应的fail操作。

  欢迎交流~

====================================分割线================================

最新内容请见作者的github页:http://qaseven.github.io/