我正在尝试设置selenium网格以实现我的测试的并行执行。首先,我将解释我目前的情况。
我的目标是同时在多个vm上运行我的测试。 我错过了一个我需要配置我的测试并行运行的部分。有一些关于网络中网格设置的例子,因为我使用的是不同的框架,我无法与我的场景相关联。
提前致谢
答案 0 :(得分:5)
我能够通过利用Jenkins和Selenium Grid来实现这一目标......为什么Jenkins? a)Jenkins是一个构建工具,默认情况下用于运行并行作业。我利用这种能力并行发送测试到Selenium Grid,Grid从那时起管理流程。 b)Jenkins是许多开发构建过程的一部分。 Dev可以调用你的QA jenkins在他们提交/构建时启动测试。 c)Jenkins提供了一个很好的UI来查看测试的通过/失败(以及发送失败的电子邮件通知)和d)Jenkins有一个很棒的Cucumber报告插件。
你可以避开Jenkins,但是你需要将你的黄瓜特征与网格并行发送。如果您只运行黄瓜,它会将作业转移到网格,但它们将按顺序运行。你需要一些东西来启动每个功能异步。
以下是我的完整设置。詹金斯基本上被用来开始多个/同时的黄瓜工作。详情如下:
我有10个VM。我把VM1作为我的主要。它是一个Windows服务器盒,所以我把selenium网格独立放在它上面并写了一个批处理文件,如下所示:
@echo off
“C:\[Add your Java Path Here]\java.exe” -jar “C:\[Add your Selenium Grid Jar Path]\selenium-server-standalone-2.31.0.jar” -role hub
然后使用Windows服务器任务在VM重启时自动运行该批处理文件。
在其他每个虚拟机上,我通过向VM1(集线器)注册它们使它们成为网格的一部分:
java -jar selenium-server-standalone-2.31.0.jar -role node -hub http://[the server name of your Selenium Hub]:4444/grid/register -browser browserName=chrome,maxInstances=5
在Cucumber中,我在features / support文件夹中设置了一个env.rb文件。这允许我在测试运行之前指定命令行参数,以及当它们停止时会发生什么。我添加了一个begin语句,用于设置使用浏览器的值,以及使用Grid ...
在env.rb文件中我添加:
def browser_name
(ENV['BROWSER'] ||= ‘firefox’).downcase.to_sym
end
def environment
(ENV['ENVI'] ||= ‘int’).downcase.to_sym
end
然后我补充说:
Before do |scenario|
p "Starting #{scenario}"
if environment == :int
@browser = Watir::Browser.new(:remote, :url=>"http://[Your Selenium Grid Hub]:4444/wd/hub", :desired_capabilities=> browser_name)
#Optional: in the case of setting your default start page @browser.goto "http://[your start page of your test site]:8080"
elsif environment == :local
@browser = Watir::Browser.new browser_name
@browser.goto "http://[some other environment]:8080"
end
end
现在你可以传递一个参数,如: cucumber feature / login.feature BROWSER = firefox ENV = int ,它会把所有工作都归咎于Grid HUB - 它应该把它传递给Grid NODES它与浏览器支持连接(即将login.feature的测试发送到firefox兼容节点 - 可能并非所有节点都有firefox,如果它们都有,那么它将转到它们中的任何一个。 )
此时,您一次只能找到一份工作。那么如何运行多一个呢?
你会有一个脚本通过相同的浏览器配置文件启动所有功能文件(或sans-Cucumber,你的测试)以使用Grid HUB。如果您使用脚本,则需要异步进行这些调用 - 因此所有功能/测试将同时发送到网格,并且网格管理作业。
我是怎么做到的......
Jenkins用于构建/部署代码 - 但在我的情况下,我使用它来触发QA作业。 Jenkins是一个Java JAR,你刚刚运行...即java jenkins.jar它在某个端口上启动本地UI,你可以开始添加作业。
我建立了Jenkins工作,并有一个运行所有工作的父工作 - 将它们发送到网格。然后,Selenium Grid Hub将管理作业流程。
我希望能够启动单个功能测试,浏览器的单个功能测试以及浏览器的所有测试。为此,我开始使用浏览器为每个功能创建单独的作业。
在詹金斯,我创造了" 新工作"并选择" 自由风格的软件组件"然后使用" [我的功能名称] [浏览器名称]"填写说明。即通过IE 登录测试
在这个Jenkins作业的Build部分中,我选择使用BATCH命令。由于它是一个Windows框,我选择了Windows Batch命令并输入如下内容:
bundle exec cucumber BROWSER=ie ENVI=int features/login.feature --format json -o login-results/login.json
来自--format的那些东西,它们都在使用Jenkins的Cucumber报告插件。它使得通过/失败的功能测试的这些漂亮的图形驱动报告。你不需要它,它是可选的。
如果你"建立"在Jenkins作业中,它将执行该Windows批处理文件并执行以下操作:
但它还没有并行运行。
现在Jenkins可以通过功能和浏览器,通过网格开始测试 - 我们现在可以最终并行运行作业,我们只需要更多的工作。所以创造一些工作......比如: Jenkins为registration.feature工作,jenkins为subscription.feature工作。每个人都有自己的Windows批处理命令,如:
bundle exec cucumber BROWSER=ie ENVI=int features/registration.feature --format json -o registration/registration.json
或
bundle exec cucumber BROWSER=ff ENVI=int features/registration.feature --format json -o registration/registrationff.json
最后一个是注册测试的副本,只是调用另一个浏览器 詹金斯默认限制你可以运行的同时作业数量。我认为它是10.你可以在Jenkins配置中更改它。我把我变成了40岁。
现在,您可以点击您的第一个Jenkins工作: 通过IE登录测试 并单击构建
开始时,点击" BUILD"在你的第二份工作: 通过IE进行注册测试
和你的其他工作一样......
Jenkins将并行开始每项工作,将它们培养到Grid HUB,Grid HUB将作业发送到相应的节点!全部并行。 默认情况下,Jenkins将作业限制为5或10个并行作业。你可以改变它。根据我的需要,我将我的修改为25到40。Jenkins还将使用pass / fail更新UI,并在每个作业的日志中详细说明失败。您可以看到失败的历史......另一个Jenkins回购(即开发回购)可以对您的仓库进行休息调用,以便在构建时自动触发这些测试。
而不是手动运行单个作业,您可以构建父作业。在Jenkins中,父作业将是 NEW 作业,类型相同," 自由样式软件组件。"你走到最底层,它应该有一个名为" 建立其他项目"在该字段中,您可以将每个项目用于部署:登录,注册等。
现在,当你" Build"这个父母的工作,你会看到Jenkins同时启动所有工作/项目。基本上,您可以通过一次单击开始整个测试集 - 所有测试都将发送到Selenium Grid,然后管理流程。
在Jenkins中,我为我的测试创建标签... IE测试,FF测试,Chrome测试等。 在每个标签中我都放了相应的功能。
然后我创建一个新的父作业来启动所有类型的作业: 所有的IE测试 所有FF测试 等
如果你愿意,你可以避免吃黄瓜。你需要一些东西来并行开始工作,对我来说,我用詹金斯来做这件事。您可以使用运行异步作业的脚本(开始测试。)
希望帖子中的内容对您的需求有用。
我在我的网站上记录了这些,以及Jenkins流程的一些图片......
我的设置Cucumber和Selenium Grid的教程: http://sdet.us/selenium-grid-with-watir-and-cucumber-browser-automation/
我使用Jenkins设置黄瓜报告的教程: http://sdet.us/jenkins-and-cucumber-reports/
答案 1 :(得分:0)
查看MBUnit,因为它可以并行运行测试,这应该有所帮助。它只会在一个程序集中并行运行测试,并且不会跨多个程序集进行协调。