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

将cucumber场景示例作为一个场景处理

宦翔
2023-03-14

我对Cucumber有一个问题-现在我正在做一个移动自动化,我有使用场景大纲的功能-我在场景中有几个变量:

方案大纲:菜单项

Given the user is on the hamburger menu
And the language is <language>
Then menu item is <menu item>

Examples:
  | menu item           | language |
  | Search              | EN       |
  | Zoeken              | NL       |
  | Recherche           | FR       |
  | Saved properties    | EN       |
  | Bewaarde zoekertjes | NL       |
  | Biens sauvés        | FR       |
  | Saved searches      | EN       |
  | Bewaarde zoekacties | NL       |
  | Recherches sauvées   | FR       |
  | Settings            | EN       |
  | Instellingen        | NL       |
  | Paramètres          | FR       |

当我运行这个场景时,它会为每一行重新启动应用程序(在某些情况下,这可能是好的,但不是这样),这非常耗时。有没有一种方法可以指出应用程序什么时候应该重启应用程序,什么时候应该继续运行?

我尝试将这些示例作为列表处理,但这没有帮助。

@Then("^menu item is (.*)$")
public void menuItem(List<String> menuItems){
    for(String menuItem : menuItems)
        Assert.assertEquals( menuItem, Common.getElementAttributeByName(menuItem,"text"));
}

共有2个答案

萧阳波
2023-03-14

听起来您在每个场景之前重新启动应用程序,对于场景大纲,您希望应用程序只启动一次。

方案大纲是编写许多方案的速记方法。每个示例都将展开并变成一个场景,然后执行。

您的选择是

    < li >在每个场景之前不重新启动应用程序 < li >接受应用程序重新启动 < li >重写您的情景,这样您就没有每种语言的示例了

最后一种替代方法意味着您将语言列表向下移动堆栈。可能进入帮助程序类的步骤委托到。

这意味着这样的场景:

Given the user is on the hamburger menu
When he order a hamburger
Then he should be able to do it on all languages  

我对这里的措辞不满意。但是这个想法是你把语言列表藏在某个深处。这将允许您对它们进行迭代,而不是在场景大纲中列出语言列表。

这将解决您面临的重启问题,因为您在每个场景之前都要重启。

它还将提高您的场景中的抽象级别。目前,你的场景对我来说更像是一个脚本,而不是一个期望行为的规范。

彭宏深
2023-03-14

正如托马斯·桑德伯格所说,你有很多选择。然而,对于您的特殊情况,您可能需要保持所有规格不变

那么他应该能在所有语言上做到这一点

不够具体。您可以像这样重写场景:

Scenario: Menu items
    Given the user is on the hamburger menu
    Then the possible menu items are
      | Search              | EN       |
      | Zoeken              | NL       |
      | Recherche           | FR       |
      | Saved properties    | EN       |
      | Bewaarde zoekertjes | NL       |
      | Biens sauvés        | FR       |
      | Saved searches      | EN       |
      | Bewaarde zoekacties | NL       |
      | Recherches sauvées   | FR       |
      | Settings            | EN       |
      | Instellingen        | NL       |
      | Paramètres          | FR       |

然后你可以这样处理这些:

    @Then("^the possible menu items are$")
    public void menuItems(Map<String, String> menuItems){
        for(Map.Entry<String, String> menuItem:menuItems.entrySet()) {
            switchToLanguage(menuItem.getValue());
Assert.assertEquals( menuItem.getKey(), Common.getElementAttributeByName(menuItem.getKey(),"text"));
}
 类似资料:
  • 前面虽然介绍了几十个常用的 Logstash 插件的常见配置项。但是过多的选择下,如何组合使用这些插件,依然是一部分用户的幸福难题。本节,列举一些最常见的日志场景,演示一下针对性的组件搭配。希望能给读者带来一点启发。 链接 nginx访问日志 nginx错误日志 postfix日志 ossec日志 windows系统日志 Java日志 MySQL慢查询日志

  • 我有几个测试如下: 对于每个测试,我应该添加相同的表格示例。 有没有办法提取这个表,以便在所有测试中使用同一个表?

  • 我想在一个扩展场景的类中画一张画布。当我按下场景上的按钮时,这个场景应该显示出来,这个场景是在扩展的类“GUI”中创建的。 为设置图像(我不知道要将ImageView作为子节点添加到哪个节点{类似不起作用}) 试图在画布上画画。(与上面的问题相同。在哪里添加此画布?) 类: 和类: PS:Jeah!我在这个论坛上的第一个问题。你好世界!

  • 我有一个示例项目,其中使用了Maven、TestNg和Cucumber。我使用testrunner类运行测试。 我创建了一个包含两个方案的功能文件,但两个方案都失败了。我有两个具有不同功能文件的测试运行者类 - 1。特征文件指向所有功能,2。指向仅失败的方案。 当我尝试重新运行场景时,它只运行一个场景。 1- 请告知如何执行所有失败的方案。

  • cucumber场景使用JUnit运行。 我有一个用例,需要根据Jira票据的状态跳过特定的Cumber场景。然后,我需要将该场景标记为在html报告中传递。 我可以使用PendingException()或AssumptionViolatedException()轻松跳过场景,两者都可以正常跳过场景执行并将步骤标记为跳过。但是场景本身将被标记为失败,我希望它被通过。 无论如何,我可以做到这一点?

  • 之前在 codec 章节,曾经提到过,对 Java 日志,除了使用 multiline 做多行日志合并以外,还可以直接通过 log4j 写入到 logstash 里。本节就讲述如何在 Java 应用环境做到这点。 Log4J 首先,需要配置 Java 应用的 Log4J 设置,启动一个内置的 SocketAppender。修改应用的 log4j.xml 配置文件,添加如下配置段: <appende

  • 本节作者:林鹏 配置OSSEC SYSLOG 输出 (所有agent) 编辑ossec.conf 文件(默认为/var/ossec/etc/ossec.conf) 在ossec.conf中添加下列内容(10.0.0.1 为 接收syslog 的服务器) <syslog_output> <server>10.0.0.1</server> <port>9000</port> <for

  • postfix 是 Linux 平台上最常用的邮件服务器软件。邮件服务的运维复杂度一向较高,在此提供一个针对 postfix 日志的解析处理方案。方案出自:https://github.com/whyscream/postfix-grok-patterns。 因为 postfix 默认通过 syslog 方式输出日志,所以可以选择通过 rsyslog 直接转发给 logstash,也可以由 log