web 自动化测试 (2): 选择 selenium 优势?与 PhantomJS/QTP/Monkey 对比
上篇 《web自动化测试(1):再谈UI发展史与UI、功能自动化测试》,自动化测试工具众多,
PC 端常用的功能自动化测试工具
Selenium:开源工具集,用于回归功能测试或者系统用例说明,也可浏览器的兼容性。支持 JavaScript、java、C 等主流语言
Monkey:安装自带的 UI 测试工具,主要用来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。monkey 命令
Loadrunner:商业性能测试工具,收费,功能强大,适合做复杂场景的性能测试。java 编写测试用例
QTP(=》UFT):商业收费软件,支持 web,桌面自动化测试。主要是用于回归测试和测试同一软件的新版本,支持 VBScript
WinRunner
QARun
Robot
为什么选择 selenium 做讲解呢?
selenium
selenium 是一个用于 Web 应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 IE7+,Firefox,Safari,Chrome,Opera 等。
selenium 主要功能
测试与浏览器的兼容性:测试应用程序能否兼容工作在不同浏览器和操作系统之上。
测试系统功能:录制用例自动生成测试脚本,检验软件功能和用户需求,用于回归功能测试或者系统用例说明。支持自动录制动作和自动生成 .Net、Java、Perl 等不同语言的测试脚本。
与其他打交道的测试工具对比
Monkey
Monkey 是 Android 自带的一套命令行自动化测试小工具,使用 Java 语言写成,在 Android 文件系统中的存放路径是: /system/framework/monkey.jar;Monkey.jar 程序是由一个名为“monkey”的 Shell 脚本来启动执行,shell 脚本在 Android 文件系统中 的存放路径是:/system/bin/monkey;
monkey 测试
Monkey 测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲。通过 Monkey 程序模拟用户触摸屏幕、滑动 Trackball、 按键等操作,向系统发送伪随机的用户事件流(点击、滑动、Application 切换、横竖屏、应用关闭),从而对设备上的程序进行压力测试,检测程序多久的时间会发生异常。
monkey 测试是一种为了测试软件的稳定性,健壮性的快速有效的方法(如测试 app 是否会 Crash)。monkey 测试是一种为了测试软件的稳定性,健壮性的快速有效的方法(如测试 app 是否会 Crash)。app release 版本(发布)前,Monkey 跑出来的结果中 crash 要为 0,final release 前,Monkey 跑完的总次数应为 25W,结果里不允许有 nullPointException 出现。
Android monkey 命令只针对 Activity 做测试,不能对 Service 做测试。
对于前端 H5 测试,我们可以编写相应的 monkey 脚本,完成基本的 UI 交互测试
关于 monkey 推荐阅读《Android压力测试:monkey测试命令详解与案例演示》
Loadrunner
Loadrunner 之前广州学了一下,放弃了。真的用起来还是在深圳百果园。不过现在有基本全忘记了。感觉这个东西就是测试工具中屠龙刀,奈何我只把当杀猪刀用(有 java 基本功、搞下性能测试啥的还是可以的)。
loadrunner 的教程非常多,书也很多。慕课网上面的课程也不错:https://www.imooc.com/search/?words=Loadrunner
所以,这里也就不多说了。
PhantomJS
phantomjs headless(无头) 浏览器,官网: http://phantomjs.org/,感觉非常硬核*_*,感动的泪流满面。但是,我只是使用一下其 API,也确实能够整明白咯。
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API,它无需浏览器的支持即可实现对 Web 的支持,且原生支持各种 Web 标准,如 DOM 处理、JavaScript、CSS 选择器、JSON、Canvas 和可缩放矢量图形 SVG。PhantomJS 主要是通过 JavaScript 和 CoffeeScript 控制 WebKit 的 CSS 选择器、可缩放矢量图形 SVG 和 HTTP 网络等各个模块。PhantomJS 主要支持 Windows、Mac OS、Linux 三个平台,并且提供了对应的二进制安装包。
PhantomJS 的使用场景如下:
无需浏览器的 Web 测试:无需浏览器的情况下进行快速的 Web 测试,且支持很多测试框架,如 YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha 等。
页面自动化操作:使用标准的 DOM API 或一些 JavaScript 框架(如 jQuery)访问和操作 Web 页面。
屏幕捕获:以编程方式抓起 CSS、SVG 和 Canvas 等页面内容,即可实现网络爬虫应用。构建服务端 Web 图形应用,如截图服务、矢量光栅图应用。
网络监控:自动进行网络性能监控、跟踪页面加载情况以及将相关监控的信息以标准的 HAR 格式导出。
PhantomJS 已形成了一个功能非常强大的生态圈内容,相关项目如下:
CasperJS:一个开源的导航脚本处理和高级测试工具
Poltergeist :测试工具 Capybara 的测试驱动
Guard::Jasmine:能够基于 Rails 实现自动化测试 Jasmine 的 Specs
GhostDriver:远程 WebDriver 有线协议的开源实现
PhantomRobot:PhantomJS 机器人测试框架
Mocha-PhantomJS:JavaScript 测试框架 Mocha 的客户端
此外,生态圈还包括基于 PhantomJS 实现了众多截屏工具,如 capturejs、pageres、phantomjs-screenshots、manet、screenshot-app 等;以及 Node.js、Django、PHP、Sinatra 等语言的截图 API 和 Confess、GhostStory、Grover 等众多工具。
之前用这玩意儿做过爬虫。现在用的最多还是数据页面截屏及监控。用它做测试比较少。
PhantomJS VS Selenium
Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 IE(7、8、9)、Mozilla Firefox、Mozilla Suite 等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl 等不同语言的测试脚本。
用过的同学估计都有感受,就是这货本质上是依赖于浏览器的,每一步操作都是直接操纵图形化的浏览器,这样无论是从性能还是可编程性上来说都差多了。
PhantomJS 则不然,它除了拥有 Selenium 的绝大部分功能之外,更强大的地方在于他是一个“无头浏览器”,没有图形化界面,直接面向程序 API 接口,性能和可操作性比 Selenium 高了很多。
QPT
QTP是Quick Test Professional的简称,是 HP 公司的产品。
QTP 是一个侧重于功能回归的自动化测试工具。使用 QTP 的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等。
UI 对象的管理和存储:QTP 的内置了良好的支持。Selenium 可以通过用户扩展 UI-Element 来管理???,不过要在代码中写死,不像 QTP 一样可以自动录制添加。
selenium 的优势
官网:https://selenium.dev/ 推介:Open source record and playback test automation for the web
selenium 是一套完整的 web 应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。
终端用户的角度来测试应用程序:
通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。框架底层使用 JavaScript 模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
selenium 可以模拟真实浏览器,自动化测试工具,
Selenium 的核心 Selenium Core 基于 JsUnit,完全由 JavaScript 编写,因此可以用于任何支持 JavaScript 的浏览器上。爬虫中主要用来解决 JavaScript 渲染问题。
支持语言多:C、 java、ruby、python、或都是 C# ,你都可以通过 selenium 完成自动化测试
概况为:Selenium 是一款可以录制用户操作,帮助 Web 测试人员简化重复劳动的开源软件。
反正,selenium 真香!
Selenium 实现原理
Selenium1 引入了 Remote Control Server 这样一个代理 Server,JavaScript 脚本注入和与 Server 通讯都通过这个代理 Server 来进行。如下图所示:
之所以引入这个代理 Remote Control Server 是因为“同源策略”的限制,通过这个代理服务器来“欺骗”远程 Server,达到使其以为是从同一个地方 load 代码以正确返回请求数据的效果。
流程说明:
客户端建立与 selenium-RC server 的连接。
Selenium RC Server 启动一个浏览器(或是已经使用中),并注入 JS 代码
将 Selenese 代码传到客户端的 Selenium-Core 中。
Selenium-Core 翻译并解析执行用户录制的操作。
让代理 Server 进行通讯
Remote Control Server 负责跟远程 Web 应用服务器进行通讯。
操作完成,显示结果,并执行下一指令。
以上就是 Selenium Remote Control 的执行原理,接下来的章节中将一步步以图例加说明的方式快速说明如何使用 Selenium 来录制脚本,导入 Java 工程,然后定期维护工程。
下篇终于回到重点,selenium 的使用实战 《web自动化测试(3):selenium web测试用例与常用API简介》
使用 Selenium 实现基于 Web 的自动化测试 https://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/index.html参考文章:
Android Monkey 压力测试使用 https://www.jianshu.com/p/c8844327f5e9
Android Monkey 的使用 https://blog.csdn.net/zhaoyanjun6/article/details/71750907
Selenium 与 QTP 的比较 https://www.jianshu.com/p/593736bd44b3
Web 自动化测试与智能爬虫利器:PhantomJS 简介与实战 https://cloud.tencent.com/developer/article/1043912
转载本站文章《web自动化测试(2):选择selenium优势?与PhantomJS/QTP/Monkey对比》,请注明出处:https://www.zhoulujun.cn/html/Operation/test/2017_0518_8312.html
版权声明: 本文为 InfoQ 作者【zhoulujun】的原创文章。
原文链接:【http://xie.infoq.cn/article/85b54b7a2c44cf761933fd7d1】。文章转载请联系作者。
评论