当前位置: 首页 > 知识库问答 >
问题:

cucumber硒网格

司马辉
2023-03-14

我正在尝试设置硒网格以实现测试的并行执行。首先,我将解释我当前的场景。

    < li >我用watir webdriver在cucumber中编写了我的全功能测试套件 < li >我需要在多个环境中执行所有测试。 < li >我为selenium hub和node创建了一个设置 < li >我可以通过hub在单个节点上运行我的测试

我的目标是在多个虚拟机上同时运行我的测试。我遗漏了一部分,我需要配置我的测试来并行运行。网上有一些关于网格设置的例子,因为我使用的是不同的框架,我无法联系到我的场景。

提前谢谢

共有2个答案

刘京
2023-03-14

看看MBUnit,因为它可以并行运行测试,这应该会有所帮助。它将只在一个程序集中并行运行测试,而不会在多个程序集中协调。

袁俊弼
2023-03-14

我能够通过利用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 批处理文件并执行以下操作:

  • 开始工作
  • 运行cucumber命令以使用特定浏览器(本例为IE)
  • 运行该特性文件的所有测试(即login.feature可能有20个测试)
  • 所有测试都通过网格运行,网格将它们分配给节点

不过,它还没有并行运行作业。

现在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浏览器中 然后它显示这个

  • 我得到这个错误: 我知道我不应该从其他机器给出本地主机,我在这里很困惑。