我正在尝试设置硒网格以实现测试的并行执行。首先,我将解释我当前的场景。
我的目标是在多个虚拟机上同时运行我的测试。我遗漏了一部分,我需要配置我的测试来并行运行。网上有一些关于网格设置的例子,因为我使用的是不同的框架,我无法联系到我的场景。
提前谢谢
看看MBUnit,因为它可以并行运行测试,这应该会有所帮助。它将只在一个程序集中并行运行测试,而不会在多个程序集中协调。
我能够通过利用Jenkins和Selenium Grid做到这一点...为什么是詹金斯?a) Jenkins是一个构建工具,默认情况下用于运行并行作业。我利用这种能力将测试并行发送到Selenium Grid,网格从那一点开始管理流程。b) Jenkins是许多开发构建流程的一部分。开发人员可以打电话给你的QA jenkins,在他们提交/构建时开始测试。c) Jenkins提供了一个很好的用户界面来查看你的测试通过/失败(以及发送失败的电子邮件通知), d) Jenkins有一个很棒的cucumber报告插件。
您可以避免Jenkins,但您需要将cucumber特性与网格并行发送。如果你只运行cucumber,它会将作业农场到网格,但它们会按顺序运行。您需要一些东西来异步启动每个功能。
以下是我的完整设置。Jenkins 基本上在这里用于启动多个/同时的cucumber作业。详情如下:
我有10个虚拟机。我把VM1作为我的主要课程。这是一个windows服务器盒,所以我将硒网格独立放置在上面,并编写了一个批处理文件,如下所示:
@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重新启动的情况下自动运行该批处理文件。
在其他每个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语句,为使用浏览器和网格设置a值...
在 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
现在您可以传递一个参数,如:cumber feature/login。feature BROWSER=firefox ENV=int,它会将所有工作转移到Grid HUB,Grid HUB应该将其传递到与之连接的Grid节点,并提供浏览器支持(即将login.feature测试发送到firefox兼容的节点-可能不是所有节点都有firefox,如果它们都有,那么它将转到其中任何一个节点。)
在这一点上,你一次只能得到一份工作。那么,如何运行不止一个?
您将有一个脚本,通过同一个浏览器配置文件启动所有的特性文件(或者sans-cumber,您的测试),以使用Grid HUB。如果你使用一个脚本,它需要异步地进行这些调用——所以所有的特性/测试同时被发送到网格,网格管理这些工作。
我是怎么做到的是和…
Jenkins用于代码的构建/部署——但在我的例子中,我用它来触发QA作业。Jenkins是一个JavaJAR,你刚刚运行…即javajenkins.jar它在某个端口上启动一个本地用户界面,你可以开始添加作业。
我构建了Jenkins作业,并有一个运行所有作业的父作业——将它们发送到网格。然后,Selenium网格中心将管理作业流。
我希望能够启动单个功能测试,通过浏览器启动单个功能测试,通过浏览器启动所有测试。为此,我从浏览器每个功能的单独作业开始。
在Jenkins中,我创建了“一个新任务”并选择了“自由风格软件组件”,然后填写了“[我的功能名称][浏览器名称]”的描述,即通过IE进行登录测试
在这个Jenkins作业的构建部分,我选择使用html" target="_blank">BATCH命令。因为它是一个windows框,我选择了Windows Batch命令并输入如下内容:
bundle exec cucumber BROWSER=ie ENVI=int features/login.feature --format json -o login-results/login.json
这一切都是利用Jenkins的Cucumber报告插件实现的。它使这些通过/失败的功能测试的图表驱动报告看起来很漂亮。你不需要它,它是可选的。
如果你“构建”Jenkins 作业,它将执行该 Windows 批处理文件并执行以下操作:
不过,它还没有并行运行作业。
现在Jenkins可以通过Grid通过功能和浏览器启动测试了,我们现在终于可以并行运行作业了,我们只需要更多的作业。所以,再创造一些工作……比如:詹金斯注册工作。feature和subscription.feature的jenkins作业。每个都有自己的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
最后一个是注册测试的副本,只是调用了不同的浏览器。< br >默认情况下,Jenkins会限制您可以同时运行的作业数量..我想是10。您可以在Jenkins配置中进行更改。我把我的改成了40。
所以现在,你可以点击你的第一个Jenkins工作:登录测试通过IE和点击BUILD
开始时,单击第二项工作的“构建”:通过IE注册测试
你的其他工作也一样…
Jenkins将并行启动每个作业,将它们发送到网格中心,网格中心将作业发送到适当的节点!全部并行。默认情况下,Jenkins将作业限制为5或10个并行作业。你可以改变这一点。我把我的修改为25到40,看我的需要。
Jenkins还将使用通过/失败更新UI,并在每个作业的日志中记录失败的详细信息。你可以看到失败的历史...另一个Jenkins repo(即dev repo)可以对您的repo进行rest调用,以便在构建时自动触发这些测试。
您可以构建父作业,而不是手动运行单个作业。在Jenkins中,父作业将是一个相同类型的新作业,即“自由式软件组件”。您可以深入到最底层,它应该有一个名为“构建其他项目”的字段。在该字段中,您可以放置每个项目以供部署:登录、注册等。
现在,当您“构建”这个父作业时,您将看到Jenkins同时启动所有作业/项目。基本上,您的整个测试集可以从一次单击开始——所有测试都发送到Selenium Grid,然后由它管理流。
在Jenkins中,我为我的测试创建选项卡…IE测试、FF测试、Chrome测试等。在每个选项卡中,我都放置了相应的功能。
然后我创建一个新的Parent作业来启动所有类型的作业,如:all IE Tests all FF Tests等。
如果你喜欢,你可以不吃cucumber。你只是需要一些东西来启动并行工作,对我来说,我用詹金斯做到了这一点。您可以使用运行异步作业的脚本(开始您的测试。)
希望帖子中的内容对您的需求有用。
我在我的网站上记录了这一点,还有一些詹金斯流程的图片...
我关于设置Cucumber和Selenium网格的教程:http://sdet . us/Selenium-Grid-with-watir-and-Cucumber-browser-automation/
我用Jenkins设置Cucumber Reports的教程:http://sdet.us/jenkins-and-cucumber-reports/
我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。
我一直在周而复始地试图弄明白这一点,在Selenium网格集群上使用cucumber和maven并行选项几乎是不可能的。 我的跑步者根据标签跑步,应该会选择5到6个特征文件。 我使用Cucumber for Java、Maven surefire 2.19和Junit。 到目前为止,pom的surefire配置如下所示:- 我的跑步者看起来像这样:- 我和马文一起跑步:- 清洁测试-P RunFe
当我尝试运行我的代码时,它只显示cucumber骨架。我使用JUnitRunner类作为JUnit测试套件。 下面是所有三个类的代码。 特点是: 硒类: JUnit类: 步骤定义 : 显示的输出是:
从这里下载selenium-server-4.0.0.jar之后 我将这个jar文件放在c文件夹中,然后使用cmd命令尝试使用这个命令启动selenium grid hub 我无法运行selenium网格中心,它显示以下内容 我试着把这个网址放在chrome浏览器中 然后它显示这个
我得到这个错误: 我知道我不应该从其他机器给出本地主机,我在这里很困惑。