【问题标题】:In Cucumber, how do you iterate through the feature for multiple locales?在 Cucumber 中,如何迭代多个语言环境的功能?
【发布时间】:2014-12-09 05:59:44
【问题描述】:

我需要测试许多语言环境并确定应用是否阻止了正确的语言环境、某些语言环境是否存在正确的信息等。

据我所知,Cucumber 没有提供遍历给定输入列表的方法,即“为美国、加拿大、日本、英国...运行此测试”,这是我能想到的唯一方法它是在一个函数中循环测试代码中的国家 - 这意味着一个语言环境中的失败会导致该特定测试完全失败,并且非常难看

有没有一种运行黄瓜功能的好方法,我可以为每个区域设置一个单独的测试结果,而不必使用不同的“假设我有一个 {locale} 帐户”来编写测试本身 60 多次'?

理想情况下,我想做类似“对于列表中的每个国家/地区 {invalidCountries} 做 {test}”

【问题讨论】:

    标签: java testing cucumber qa


    【解决方案1】:

    你可以通过两种方式做到这一点

    首先,您可以使用场景大纲:https://github.com/cucumber/cucumber/wiki/Scenario-Outlines(使用示例列表中的语言。

    其他方式:您可以使用变量进行所有测试(例如:“我以'美国'语言打开应用程序”作为第一步),然后通过命令行传递语言。 示例:黄瓜 LAN=US 然后,您只需在测试启动时设置变量。

    【讨论】:

      【解决方案2】:

      Locale 可以通过安装 I18 gem 来实现。访问I18n testing with Cucumber

      Then /^I should be greeted$/ do
        page.should have_content(I18n.t('dashboard.welcome', :name => first_name))
      end
      

      像这样,

      希望对你有所帮助。

      【讨论】:

        【解决方案3】:

        首先尝试用抽象语言编写您想要的功能。专注于什么和为什么,而不是如何。如果你能解释你为什么要这样做,你会得到一个关于如何做的更好的答案。

        一般这种问题的解决方法是“推倒如何”。这意味着您在步骤定义中执行所有循环。您可以通过将工作委托给辅助方法来使完成工作的特定步骤定义优雅,例如(假设是红宝石)

        When "I do something with each blocked locale" do
          do_something(locales: blocked_locales)
        end
        
        module LocaleStepHelper 
          def do_something
            ...
          end
        end
        World LocaleStepHelper
        

        您可以使用您的标准编程技能使完成所有工作的方法优雅。这比在 Cucumber 中尝试要容易得多。

        总结:不要尝试在 Cucumber 中编程,将所有编程向下推,从场景中删除如何,专注于什么和为什么

        【讨论】:

        • 所以我只想转到一个页面,单击一个按钮并验证我在不同的页面上,但我想为许多语言环境执行此操作。在您的示例中, do_something 是否包括页面的初始加载、点击和加载验证?这对我来说似乎不对,因为如果任何一个国家失败了,整个测试就会失败。由于我必须为许多测试执行此操作,因此它们都非常脆弱,并且要找到真正的根本原因会更加困难。
        • 这样想,你想做一个动作(navigate_from_foo_to_bar),你想做很多事情,你想收集结果。因此,为提供结果的操作编写一个方法。然后遍历语言环境,收集每个操作的结果。最后报告结果。如果您不希望在测试所有语言环境之前测试失败,请不要在您的操作中抛出异常。得到结果后,如果结果不好,可以抛出异常。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多