关于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 作为执行 ...
随机推荐
- git daemon 安装和使用
git daemon 安装和使用 系统:Cent OS 8 安装 git 和 git daemon(不同系统有不同的安装命令) yum install -y git yum install -y gi ...
- P2746 P2812 [USACO5.3]校园网Network of Schools[SCC缩点]
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校").注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学 ...
- java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver
SpringBoot运行报错——java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or rep ...
- Dos命令获取当前时间
= = 这个真的折腾死我了.... 参考:http://bbs.bathome.net/thread-3328-1-1.html 操作系统不同,日期格式也可能不同: 星期二 2008-07-29 20 ...
- H5s播放rtsp和rtmp视频
最近接触的几个项目都有对接视频的功能,目前国内视频厂商以海康和大华为主,其对应的视频流格式也不一致,导致对接起来很麻烦.有幸在客户那接触到一种新的视频对接解决方案,支持Html5标准.废话不多少,看一 ...
- python_反射:应用
class User(object): def denglu(self): print('欢迎来到登录页面!') def zhuce(self): print('欢迎来到注册页面!') def you ...
- 清除MSSQL历史记录
declare @dt datetime select @dt = cast(N'2019-05-21T14:13:45' as datetime) exec msdb.dbo.sp_delete_b ...
- CSS3限,2行3行等文字在块元素显示的文字内容超出显示省略号
大家都知道文字超出一行显示省略号用css就可以搞定,但2行.3行等多行超出显示省略号有的人就不知怎么搞了,我用js做过一个文字判断有兴趣的可以看一下传送门,今天就来试验一下多行超出省略号 使用时注意浏 ...
- Linux 内存分配失败(关于overcommit_memory)
1.问题现象和分析:测试时发现当系统中空闲内存还有很多时,就报内存分配失败了,所有进程都报内存分配失败:sshd@localhost:/var/log>free tota ...
- am335x system upgrade rootfs custom service using systemd script(十七)
1 Scope of Document systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序.功能包括:支持并行化任务: ...