带你入门jenkins-jenkins与selenium的结合
整合selenium的webdriver(或RC)与jenkins,以运行完整的端至端/ UI自动化测试作为构建过程的一部分吗?好了,我们有一个好消息和一个坏消息:
- 好消息是,这是比较容易运行Selenium测试作为jenkins建设的一部分,假设你已经在使用一个测试框架JUnit等或TestNG的。我们将解释一些方法来进一步实现其在此页上。
- 坏消息是,有相当多的挑战,需要考虑:
- 建立与Selenium测试需要更长的时间来运行。
- 你会发现它难以涵盖所有相关的浏览器和平台。
- 你可能有大量的维护工作,安装浏览器/操作系统。
- 想要扩大您的测试将是复杂的,你需要部署selenium浏览器和/或重写你的测试,支持多线程。
我们在实验室在云测试平台上运行的数以百万计的Selenium测试。我们有一个易于使用的硒詹金斯插件,让您在我们的云服务运行Selenium测试,以轻松的可扩展性和很酷的功能。(请记住酱是一种商业服务,但我们有一个有限的免费计划,是免费的开源项目。)
如果你想要做自己selenium与jenkins,使用开源软件,看看我们总结的詹金斯硒解决方案表,或访问下面的部分,看看它是如何做,每种解决方案的优点和缺点:
- 选项1:selenium在一个机器无头测试 -跑selenium结合你的jenkins工作站在一具无头的浏览器
- 选项2:selenium对一体机-真正的浏览器 -你jenkins工作站真正的浏览器,仅限于工作站的能力上运行的selenium。
- 方案3:selenium局域电网多台计算机上实时浏览器 -
在一些机器上运行Selenium前提,通过詹金斯使用Selenium Grid,激活他们。
- 选项4:实验室jenkins插件设置插件和运行selenium,jenkins如何测试超过了250浏览器/操作系统组合,无需安装浏览器和设置在内部特殊的基础设施。
对决:挑战你可能会遇到当詹金斯运行Selenium测试
这不是好玩的阅读有关的问题。但它更不好玩的跑入他们进一步沿着你的项目!因此,我们希望您节省一点疼痛与我们采取的硒詹金斯整合的挑战。
(这里的讨论是基于我们拥有经验亿Selenium测试的酱实验室运行的云测试平台-其中许多是通过CI平台)
挑战1:Selenium测试需要很长的时间来运行
的确,在一个典型的项目,可以有成千上万的单元测试,但只有几十或几百Selenium测试。然而,这些Selenium测试要花上更长的时间比放在一起你所有的单元测试运行。在一个真正的浏览器上运行Selenium测试,他们需要执行实际的浏览器的操作和常等待HTTP服务器作出响应。再加上启动和停止的浏览器需要一定的时间 - 你得到的图片。
言下之意是,如果你有Selenium测试作为构建的一部分,构建需要更长的时间来运行 - 所以,如果你目前正在对每一个运行的版本提交,或一天几次,你可能不得不求助于运行构建过夜,你可能需要升级您的jenkins的工作站,甚至增加更多的机器,你的jenkins集群。有两种方法来实现这一点:
- 建立一个local Selenium Grid.。
- 就酱实验室的运行测试Sauce Jenkins Plugin.。
挑战2:有限的浏览器覆盖
如果您选择运行在真实的浏览器的Selenium测试(而不是无头的浏览器),你会真正需要你的詹金斯工作站上安装多个浏览器。您将只能对浏览器的实际安装是运行Selenium测试:
- 如果工作站为Windows,它是很难测试的OSX。如果是苹果,你不能在Internet Explorer测试(除非运行Windows虚拟机,它可以是复杂的自动执行)。
- 与Windows机器,你会不会无法测试Firefox的行为方式上的Linux,Chrome浏览器如何运行在Mac上,等等。
- 只有这么多的浏览器,你可以在一台机器上安装。
- 由于测试需要很长的时间,即使你已经安装了无数的浏览器,你可能会无法运行所有的所有的人的测试。这将使编译甚至更长的时间。
你可能会想:
- 根本不算什么,我会做无头测试!当然,我们下面就介绍一下它是如何完成的。但请记住它不是用你的访问者浏览器的真正考验。到底有人来测试实际火狐等的应用
- 我将使用Selenium网!也是一个不错的选择,这里是如何做到这一点。通过这种方式,你可以运行更多的浏览器,减少构建时间。但它可以变成是相当复杂的。
- 让我们做的多线程!好吧,但你可能需要重写所有的测试。看到我们的系列博客文章,解释如何做到多线程测试与JUnit 4中,这必将加快构建,但它仍然需要很长的时间相比,非selenium检测。
或者-你可以使用实验室jenkins插件上的无缝运行测试。这将使你获得了250浏览器/操作系统组合的全面和不断增长的名单。
挑战3:更新浏览器
如果你走了“真正的浏览器”的路线(相对于无头测试),你需要担心更新您的浏览器。每次IE /火狐/ Chrome浏览器/ Safari浏览器的新版本出来的时候,你需要在你的本地计算机/ s的安装。并卸载旧的浏览器已不再相关。而对付那些希望自动更新自己的浏览器,而你想在一个旧版本专门测试。所有这一切都造成很大的日常维护工作。
在酱实验室,我们的服务的很大一部分是照顾这个维护工作的你。我们可以建立一个云计算的虚拟机为你的有浏览器和操作系统的几乎任何组合飞行,我们努力工作的所有时间,添加最新的平台。
挑战4:难扩大
重要的是要考虑你将如何扩展你在未来的测试。如果添加更多Selenium测试 - 例如,为了测试更多的功能或者新的功能 - 这会增加编译时间和所需的系统资源。另外,如果你想测试的其他浏览器/平台,这会增加编译时间。
请记住,您的测试运行能力将任何限制:
- 您詹金斯工作站的能力(除非你用分发詹金斯从节点版本),或
- 在可用的机器数量local Selenium Grid ,如果你设置一个。
一种方法来解决,这是无头的测试,其运行比真正的浏览器测试快得多。另一种方法是我们的实验室jenkinsselenium插件。实验室做的云数以千计的组织硒的测试。我们有一个易于使用的集成jenkins,让您在我们的云服务运行Selenium测试,以轻松的可扩展性和很酷的功能。
4途径整合jenkins与selenium - 优点和缺点
解 |
复杂性 |
优点 |
缺点 |
1.selenium对一体机-无头的浏览器。直接运行Selenium测试你的jenkins工作站上。使用无头的浏览器,以节省时间和至少近似GUI行为。 |
低 |
|
|
2.selenium在一台机器-真正的浏览器, |
Medium |
|
|
3.selenium电网。运行Selenium测试的电池迅速和广泛的浏览器/操作系统组合,投资于基础设施。成立硒电网分布在多个节点测试执行。 |
高 |
|
|
4.酱实验室jenkins插件。外包的基础设施酱实验室,很快就超过250浏览器/ OS的组合进行测试,而不会中断您的CI过程,无需安装和维护本地的浏览器。 |
低 |
|
|
选项1:selenium对一体机 - 无头测试
最简单的方法是直接在jenkins的工作站上运行Selenium测试。在这种结构中,连续运行测试针对成熟的浏览器将会耗费大量的时间和计算机功率。节约的方法之一是使用无头(“无GUI”)的浏览器来运行它们。你可以节省时间配置和运行这些仿真器,以及至少近似GUI行为。
有几种方法可以设置无头selenium检测,具体取决于您的浏览器需要和操作系统。一些流行的无头的浏览器是了HtmlUnit,Xvfb来,Spynner,Cabybara,鬼,和PhantomJS。作为一个例子,我们将展示如何使用selenium和PhantomJS Web应用程序进行功能测试。
PhantomJS运行具有完整的JavaScript访问的WebKit引擎,只是没有图形用户界面。它支持几乎所有的平台。PhantomJS是适合于自动化测试作为CI系统像詹金斯的一部分,因为它可以直接在詹金斯节点上安装,并从命令行执行。
下面是一些常见步骤:
- 在创建包含所有你需要得到该项目将依赖新的项目目录中的Maven pom.xml文件。
- 在命令行中运行
MVN全新安装
下载的依赖关系。 - 从安装PhantomJS phantomjs.org/download.html。确保phantomjs是通过命令行访问。
- 如果你还没有这样做呢,创建一个测试。
-
运行测试。在提示符下,键入:
MVN测试
,测试将运行使用PhantomJS并输出结果到目标/万无一失,报告在由jenkins了解JUnit的XML格式。 -
使安装在所有的jenkins节点将运行测试肯定PhantomJS。
-
创建一个新的jenkins工作,将其设置为运行后生成部署。
-
保存作业,运行它,并查看测试结果。
有关详细信息,请参阅本博客文章由AppNeta。
优点和无头selenium检测利弊
优点
- 的无头浏览器仿真器的主要优点是,测试运行得更快。
- 无头的浏览器很容易运行和配置,你可以在几乎任何平台上运行的。
- 他们很容易实现自动化的持续集成流程的一部分,因为他们在命令行中运行,不执行一个完整的浏览器界面。
缺点
- 该浏览器是抽象的,没有模拟真实平台用户操作。无头的浏览器可以屏蔽,只有真正的浏览器遇到很多问题。
- 无头的浏览器有部分的JavaScript / AJAX支持。所以,你不能完全测试Web应用程序,其中包括JavaScript和Ajax元素。
选项2:selenium对一体机 - 真正的浏览器
比方说,你要直接针对真正的(非“无头”),您的浏览器jenkins工作站上运行Selenium测试。你的身材会需要更长的时间,因为它运行完全成熟的浏览器和用户界面完全自动化,但你能够测量所使用的网站访问者最常用的浏览器真正的浏览器的反应。
以下是实现的webdriver集成jenkins,使用Maven的一种方法。
下面是一些常见步骤:
-
安装时,jenkins工作站上,你想测试你的应用程序上(如Chrome浏览器,火狐,IE浏览器),所有的浏览器。
-
确保jenkins启动并运行。
-
确保已安装的Java和Maven。
-
运行测试先在本地(4级)
- 创建具有这种结构的文件夹:
- ProjectName
-- pom.xml
-- src
----- test
----- java
----- YourTest.java- 创建一个pom.xml文件
- 把你的selenium脚本的Java文件夹:
[/项目名/ src目录/测试/ java中]
-
打开一个终端,并cd到
[/项目名]
,然后运行:MVN测试
您应该看到运行测试,结果一旦他们完成。
-
现在,整合ProjectName
-- pom.xml
-- src
----- test
----- java
----- YourTest.java(9级):- 创建“构建一个自由风格的软件项目”ProjectName
-- pom.xml
-- src
----- test
----- java
----- YourTest.java的工作。 - 配置新创建的作业。
- 使用任何可用的版本管理系统(GIT,SVN,CVS或其他)参考源代码。
- 请对你的本地目录中的ProjectName
-- pom.xml
-- src
----- test
----- java
----- YourTest.java工作。 - 从生成下拉框'调用顶级Maven的目标“。
- 输入“测试”为目标。
- 保存配置。
- 运行作业。您应该会失败第一次轮。
- 现在,所有你的数据复制项目目录到jenkins工作区下,然后再次运行该作业。现在你可以看到测试运行。
- 创建“构建一个自由风格的软件项目”ProjectName
有关详细信息,请参阅本博客文章由Anoop菲利普。
selenium对一体机与真正的浏览器的优点和缺点
优点
- 真正的测试平台 -在这个方法可以测试至少几所使用的访问者最流行 的平台。
- 开源的,没有基础设施的成本 -selenium是免费的,因为浏览器将现有的jenkins工作站上运行的典型,有基础设施没有额外的投资。
缺点
-
测试需要很长时间来运行 -因为Selenium测试涉及启动真正的浏览器,等待一个或多个网页的加载和执行它们的动作,这些测试需要显著长于普通的单元测试运行。如果您以前被用来运行建立在每一个提交,或一天几次,你就可以运行得较少,或者可能诉诸每晚构建。它仍然可以运行在白天构建,跳过Selenium测试。
-
难以形成规模 -如果你想扩大规模的试验的次数,你可能需要添加更多的机器,而这将需要使用Selenium网看看如何做到这一点下文。
-
浏览器限制范围 -这个场景涉及到的物理安装在本地jenkins工作站上的浏览器进行测试。只有这么多的浏览器,你可以在一台机器上安装,如果,例如,您在Windows上运行,你不能测试Safari浏览器,也可以测试网络浏览器在Mac上,没有正在运行的虚拟机。所以这种情况是固有地局限在类型和平台可以测试次数。
-
需要安装,更新,维护的浏览器 -你可能会比在本地机器上的几个浏览器中安装更多,然后,你需要安装的,因为他们来了,请卸载旧版本浏览器的新版本,并处理浏览器想自动更新自己,而你有兴趣测试专门的旧版本。这将成为一个大的,持续的维护工作。
方案3:selenium电网局部 - 在多台机器真正的浏览器
如果您需要快速和广泛的浏览器/操作系统组合运行Selenium测试的电池,则需要在基础设施投资的其他计算机的形式,不同的操作系统和浏览器设置,以覆盖更多的场景。随后,成立了selenium网格分布在多个节点上执行测试。
若要设置,你需要:
- 独立的jarselenium。
- Chrome浏览器的驱动程序
既可以在这里下载:https://code.google.com/p/selenium/downloads/list
这些都是一般的步骤来得到它的工作:
-
设置了两个或更多的计算机,你想在其上运行与真正的浏览器的Selenium测试。这是你的selenium网格集群。
-
创建一个目录,它看起来像这样:(dir) chrome-<ver_1>
(dir) chrome-<ver_2>
(dir) chrome-drive-zipfiles
(dir) jdk android-server
chromedriver
grid-startup-batch
selenium-server-standalone -
写这产生一个节点的webdriver以及selenium电网枢纽的批处理文件(我们叫它电网启动-batch.bat)。运行在selenium电网的机器之一的批处理文件。
-
打开网格控制台,通过发射了您的选择和类型的Web浏览器:
HTTP://本地主机:4444 /网格/台
-
检查网格控制台。将鼠标移到浏览器图标来检查浏览器的名称,实例数和节点类型。
-
在鼠标悬停显示信息立足自己,尝试连接到一个实例(假设的Internet Explorer)是由您的selenium电网提供。创建DesiredCapabilities对象的一个新实例,设置你正在测试的浏览器,例如:
capabilities.setBrowserName(DesiredCapabilities.internetExplorer()getBrowserName());
-
为了运行测试,例如,你的执行被路由到一个特定的平台上运行特定的浏览器,你需要开始你的webdriver节点时使用节点配置文件。要创建节点配置文件,复制的例子在这里,并根据您的需要进行修改。
-
修改网格启动,batch.bat文件(从更早的版本),并添加参数
-nodeConfig webconfig.txt
,其中webconfig.txt
您创建您的网启动- batch.bat文件是配置文件,在当前目录中可用。 -
现在,针对不同的版本在你的网格浏览器的测试,说火狐8,通过设置浏览器的版本也在你DesiredCapabilities对象,像这样:
capabilities.setVersion(“8”);
并修改webconfig.txt文件,添加一个版本参数给它,就像这样:“版本”:“8”
-
重新启动网格重新运行测试。
-
jenkins连接到Selenium Grid和运行它作为构建的一部分,使用jenkinsselenium插件(实际上是selenium网格插件),在这里。
有关详细信息,请参阅本博客文章由克里希南马哈德。
当地硒电网的利弊运行真正的浏览器
优点
- 测试需要少得多的运行时间(相对于硒对一体机) -因为他们可以同时运行,减少建造时间显著。
- 真正的测试平台(不同于无头测试) -你现在对真正的浏览器上测试,如果你补充足够的机器网格,测试将运行速度不够快,让频繁的构建。
- 能够支持更多的浏览器和操作系统 -用更多的机器扩展的基础设施,可以对多个浏览器/ OS平台上运行测试。
- 开源 -硒电网是自由软件,因为你自己的基础设施,你不必每次运行测试分钟支付(不同于商业硒服务)。
缺点
- 复杂的初始设置 -让硒网格工作是不平凡的,像任何群集解决方案。
- 需要更新的浏览器 -来跟上不断释放新的浏览器版本,你必须不断地补充和更新已经安装在集群中的浏览器。
- 很难进一步扩展 -拓展你的测试能力,你需要增加更多的机器和配置它们。
- 硬件和后期维护成本高 -购买更多的机器,并可能不得不雇用人员维护,配置和更新,有它的价格。
- 浏览器的覆盖范围仍然有限 -因为可以通过机器的集群的数量来支持许多操作系统/浏览器组合,你只能测试上。目前正在使用的300多个OS /浏览器组合今天。
选项4:酱实验室詹金斯插件 - selenium检测,没有维护和轻松的可扩展性
比方说,你想詹金斯运行硒自动测试,每日数次,甚至每次有一个代码提交,在广泛的浏览器/操作系统平台。由于Selenium测试是资源的猪,这需要大量的计算能力和并行运行的测试能力。这是复杂的设置自己的整个测试集群,因此另一种是外包测试基础设施酱实验室。
酱Labs的云测试平台已经运行超过9000万Selenium测试的狗吠声,火狐,英国广播公司,以及成千上万的其他组织。我们的云可以根据需要,而不破坏你的传播过程,而不需要安装和维护浏览器快速运行Selenium测试,在尽可能多的平台上。
酱实验室提供了一个易于使用的詹金斯的插件,它允许你:
- 运行Selenium测试作为构建的一部分,
- 有他们在云酱快速执行,对超过300浏览器/ OS的组合,
- 喂结果反馈给詹金斯包括截图,甚至视频截屏显示所发生的事情对每个测试的浏览器。您可以直接从詹金斯界面查看这些。
怎么样测试应用程序运行在防火墙后面?
当酱实验室整合詹金斯,这是常见的被测系统在本地防火墙后面运行。因为酱油是一个远程的云服务,它需要有你的应用程序的安全访问。为此,我们开发了酱连接,Web服务器和酱云之间的安全隧道。它让酱实验室测试你的防火墙后面的应用程序,同时保持所有的加密。
设立酱实验室詹金斯插件
在开始之前,请确保您有一个酱实验室用户帐户。你需要指定安装过程中您的用户名和API访问密钥。注册为免费计划。
这些都是建立在酱实验室詹金斯插件的一般步骤:
- 在詹金斯管理页面中,选择管理詹金斯 > 管理插件 > 可用。
-
下载酱实验室詹金斯插件。确保你选择的詹金斯重新启动安装完成时,没有作业正在运行选项。查看更多详细信息,安装酱实验室詹金斯插件。
-
验证您的酱实验室用户帐户。在詹金斯管理页面中,选择管理詹金斯 > 配置系统。在酱按需部分,提供您的用户名和API访问密钥。还有在附加身份验证选项酱詹金斯插件配置。
-
单击测试连接来完成认证。
-
配置詹金斯工作。最关键的步骤是:
- 更新测试,以引用的插件设置的环境变量。
- 输出酱会话ID到标准输出,使酱插件测试结果关联到酱乔布斯。
按照配置这些作业类型的详细说明:
-
现在运行测试通过点击现在建立在詹金斯招聘导航pane.There是后生成的活动,可以从丰富的Selenium测试收到詹金斯数据的其他选项-见酱詹金斯插件集成测试。
-
检查编译结果:导航到詹金斯构建摘要页面,并点击链接到一个版本。
你就大功告成了!现在,您可以运行Selenium测试作为您的詹金斯建设的一部分,并依靠云酱根据需要执行测试上尽可能多的浏览器和操作系统。