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自动化测试必定面临的性能问题的更多相关文章

  1. linux + docker + selenium grid 实现分布式执行selenium脚本

    Selenium Grid 有两个概念 hub :主节点,你可以看作 "北京总公司的测试经理". node:分支节点,你可以看作 "北京总公司的测试小兵A" 和 ...

  2. Python+Selenium+Appium对APP进行UI自动化测试

    1. 安装Python3.7版本 pythonjava的JDK java -version javac nodejs node --versionappium 若nodejs安装完毕,使用npm安装a ...

  3. 简单Web UI 自动化测试框架 pyse

    WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...

  4. Selenium UI自动化测试 Selenium Automatic Testing

    https://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html UI Automatic Testing 1. 什么样的项目适合自 ...

  5. UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)

    其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...

  6. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  7. UI自动化测试简介及Selenium工具的介绍和环境搭建

    自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...

  8. UI自动化测试(一)简介及Selenium工具的介绍和环境搭建

    自动化测试简介 1.1何为自动化测试? 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程.换言之,就是以程序实现的方式来代替手工测试. 1.2自动化测试分类 分为功能自动化测 ...

  9. 基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

随机推荐

  1. ABCD组·第五次团队作业项目需求分析改进与系统设计

    项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh 团队 ...

  2. archlinux 蓝牙耳机没有声音

    前提 蓝牙已开,并且连接成功,但是蓝牙耳机没有声音. 安装 pacman -S pulseaudio-bluetooth pulsemixer 切换设备输出为蓝牙耳机

  3. MyCat(1.1)Mycat基本介绍

    [1]学习目的 (1)掌握在数据库负载增大时的处理方法 (2)理解mycat的基础概念 (3)掌握mycat基础配置和监控方法 [2]Mycat的前世今生 官网:http://mycat.io/ 下载 ...

  4. Java中ClassLoader浅析.

    一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.lang; 2 3 public class Long { 4 public static void main(St ...

  5. Vue中img的src属性绑定

    正确:<img :src=" 'files/'+value.src "> 或 <img :src="value.src">错误:< ...

  6. Selenium常用API的使用java语言之8-模拟鼠标操作

    通过前面例子了解到,可以使用click()来模拟鼠标的单击操作,现在的Web产品中提供了更丰富的鼠标交互方式, 例如鼠标右击.双击.悬停.甚至是鼠标拖动等功能.在WebDriver中,将这些关于鼠标操 ...

  7. [cf920G][容斥原理+二分]

    https://codeforc.es/contest/920/problem/G G. List Of Integers time limit per test 5 seconds memory l ...

  8. spark sql启动优化

    ./spark-sql --conf spark.driver.maxResultSize=8g --driver-memory 20g --conf  spark.kryoserializer.bu ...

  9. 洛谷 P2347 砝码称重 题解

    每日一题 day12 打卡 Analysis 完全背包 #include<iostream> #include<cstdio> #include<cstring> ...

  10. bat批处理运用

    一.简单批处理内部命令简介 1.Echo 命令 –显示 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置. 语法: echo [{on│off}] [mess ...