关于Selenium remote模式分布式执行UI自动化测试必定面临的性能问题
1、大部分自动化测试人员都是在本地执行UI自动化测试,也就是代码和浏览器必须在同一台机器上,这样的的缺陷很多,无法多任务并发执行UI自动化测试用例,效率极低
2、正是如此,Selenium 的remote模式为我们带来了解决办法(俗称Selenium gird)工作原理就是分布式的,由一个中央控制器来控制多个节点机器(用例执行机)来同时多任务并发执行UI自动化测试用例,详见博客:(http://www.cnblogs.com/zw520ly/p/5995708.html)
3、虽然这样解决了多任务并发的问题,减少了测试时间,减轻了中央控制器的负载压力,但是又带来另外一个性能问题,节点机器(用例执行机)有很大的风险出现内存溢出,具体原因我来分析一下:Selenium驱动浏览器靠的是第三方插件driver(对应到不同的浏览器有不同的driver),这个driver启动时会在节点机器上另起一个进程,用来驱动浏览器工作,通常执行测试完毕后,我们会调用driver.quit()和driver.close()关闭driver的进程和退出浏览器,【quit()方法会退出浏览器并且杀死driver的进程,但是它只会杀死当前的driver进程close()方法纯粹关闭当前浏览器,不会杀死当前driver进程,如果不处理,driver进程永久占用内存资源】,看上去driver.quit()方法似乎很完美的解决了我们的问题,但是你的测试用例(代码)在执行过程中异常终止,你的driver进程被永久保存下来,测试用例异常终止的次数多了,driver进程把你的内存占用的也差不多了,节点机器(用例执行机)卡顿、死机就是家常便饭了。
4、我们该如何解决节点机器(用例执行机)出现的内存溢出的问题,解决办法,每次执行用例之前或者执行完用例之后通过telnet远程到节点机器(用例执行机)执行shell或dos命令,关闭driver的进程和浏览器进程(taskkill /f /t /IM chrome.exe taskkill /f /t /IM chromedriver.exe),做的更保险一点,每次执行完用例之后调用driver.quit()方法,双保险,保证每次driver和浏览器都被正常关闭。
代码片段:
@Test
public void test1() throws Exception {
//telnet远程win主机的工具类
TelnetUtils telnetUtils = new TelnetUtils("VT220", ">");
//杀死浏览器进程
telnetUtils.excuteWinCmd("172.19.21.216", "23", "xxxx", "xxxx","taskkill /f /t /IM chrome.exe");
//杀死driver进程
telnetUtils.excuteWinCmd("172.19.21.216", "23", "xxxx", "xxxx","taskkill /f /t /IM chromedriver.exe");
//构建用例对象
WebUiEntity entity = new WebUiEntity();
entity.setId("username");
entity.setElementAction("sendKeys");
entity.setElementValue("xxxx");
WebUiEntity entity1 = new WebUiEntity();
entity1.setId("password");
entity1.setElementAction("sendKeys");
entity1.setElementValue("xxxx");
WebUiEntity entity2 = new WebUiEntity();
entity2.setName("submitLogin");
entity2.setElementAction("click");
WebUiEntity entity3 = new WebUiEntity();
entity3.setId("patient_management");
entity3.setElementAction("click");
entity3.setCaseFunction("{WaitElement}[waitElementPresence]<>()");
WebUiEntity entity4 = new WebUiEntity();
entity4.setIframe("paFrame");
entity4.setId("patiName");
entity4.setElementAction("sendKeys");
entity4.setElementValue("自动化测试患者");
WebUiEntity entity5 = new WebUiEntity();
entity5.setId("Account_box");
entity5.setCaseFunction("{JavaScriptExecute}[changeStyle]<String;String>(display;block)");
WebUiEntity entity6 = new WebUiEntity();
entity6.setClassName("i-exit1");
entity6.setCaseInformation("退出登录");
entity6.setElementAction("click");
entity6.setCaseFunction("{WaitElement}[fixedWait]<String>(4000)");
WebUiDriver webUiDriver = new WebUiDriver("", "", "chrome",
"https://passporttest.pawjzs.com/login?targetType=wanjiaB_SZ&service=https%3A%2F%2Fmyclinictest.pawjzs.com%2F");
PageElement pageElement = new PageElement();
pageElement.elementAction(webUiDriver.driver, entity);
pageElement.elementAction(webUiDriver.driver, entity1);
pageElement.elementAction(webUiDriver.driver, entity2);
pageElement.elementAction(webUiDriver.driver, entity3);
pageElement.elementAction(webUiDriver.driver, entity4);
pageElement.elementAction(webUiDriver.driver, entity5);
pageElement.elementAction(webUiDriver.driver, entity6);
//安全退出【当前】driver进程并关闭当前浏览器
webUiDriver.driver.quit();
}
关于Selenium remote模式分布式执行UI自动化测试必定面临的性能问题的更多相关文章
- linux + docker + selenium grid 实现分布式执行selenium脚本
Selenium Grid 有两个概念 hub :主节点,你可以看作 "北京总公司的测试经理". node:分支节点,你可以看作 "北京总公司的测试小兵A" 和 ...
- Python+Selenium+Appium对APP进行UI自动化测试
1. 安装Python3.7版本 pythonjava的JDK java -version javac nodejs node --versionappium 若nodejs安装完毕,使用npm安装a ...
- 简单Web UI 自动化测试框架 pyse
WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...
- Selenium UI自动化测试 Selenium Automatic Testing
https://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html UI Automatic Testing 1. 什么样的项目适合自 ...
- UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)
其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...
- Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...
- UI自动化测试简介及Selenium工具的介绍和环境搭建
自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...
- UI自动化测试(一)简介及Selenium工具的介绍和环境搭建
自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...
- 基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...
随机推荐
- P1281 书的复制[二分]
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. ...
- python - Flask 基础 - 蓝图( Blueprint )(2)
""" 蓝图:为开发者提供的目录结构 - 使用: 1. 根目录创建一个跟项目名一样的文件 - 创建后第一步,在这个文件夹中添加一个 __init__.py 的配置文件 - ...
- pyharm无法安装包的问题
1.换成下面这个网址 https://github.com/pypa/pip/issues/5236 2.下载最新的pip 3. 然后换回 https://pypi.org/simple/
- 51、[源码]-Spring容器创建-容器创建完成
51.[源码]-Spring容器创建-容器创建完成 12.finishRefresh();完成BeanFactory的初始化创建工作:IOC容器就创建完成: 1).initLifecycleProce ...
- [Dart] Understand Classes and Inheritance in Dart
We will look at how we can create classes and explore some various features. Dart adopts a single-in ...
- SQL数据库调优
1.使用With As做数据库递归,调优树形表结构 例如:设计表结构简化如:ID.ParentID.Name:这里的ParentID就是这个表本身的某个ID WITH cte AS ( UNION A ...
- 自定义MVC--增删改查
使用自定义mvc框架完成CRUD操作 1.通用分页的jar.自定义mvc框架.自定义标签 导入jar.导入之前写好的pageTag.自定义mvc.xml 1.1导入需要用到的jar包 1.2导入之前已 ...
- 一些VMware vCenter Appliance的默认用户名和密码
一些VMware vCenter Appliance的默认用户名和密码 2014-03-30 17:30:03 flowershade_21 阅读数 13367更多 分类专栏: vmware VM ...
- Spring security invalid-session-url 的坑(配了permitAll仍然跳转到登录页)
Spring security session配置中如果配了如下的invalid-session-url,配置了permitAll链接首次链接系统时会跳转到登录页,将该配置删除即可解决此问题. < ...
- JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)
一.函数声明和函数表达式的区别: 函数声明放在if——else语句中,在IE8中会出现问题 函数表达式则不会 <script> if(true){ function f1(){ conso ...