【问题标题】:Cucumber framework creation [closed]黄瓜框架创建[关闭]
【发布时间】:2018-06-27 03:31:41
【问题描述】:

我即将开始一个新的工作,期望建立一个测试框架以允许使用 Cucumber 交付新功能。虽然我熟悉功能文件的自动化和创建,但从头开始创建框架将是我以前从未做过的任务。在这里被抛入深渊。

在我们进入 BDD 以交付新功能之前,我们期望将激动人心的系统行为写成功能并自动化。在我跑得太远之前,我想确保我对如何开始这项任务的想法是正确的。

我想我从功能文件开始,然后我的步骤定义,然后编写一些代码来执行这些步骤。关于代码结构,我还会有一个单独的页面类包和一个单独的测试类吗?或者最好的方法是只为包含我们可以对页面执行的所有操作的页面类提供一个包?

有任何资源可以帮助完成这个初始设置结构吗?

【问题讨论】:

  • 这个问题不适合 SO,因为它是关于建议而不是特定的编程问题。我会问这个sqa.stackexchange.com
  • 谢谢@JeffC 我什至不了解 SQA,所以在提出新问题之前,我会确保我和 SO 一样查看那里。

标签: java selenium automated-tests cucumber bdd


【解决方案1】:

使用 Cucumber 不应以任何方式影响您管理代码的方式。因此,无论您拥有和习惯什么都很好。您唯一需要添加的是“胶水”代码,它是一种中介类,可将 Cucumber 步骤转换为实际的类和方法,然后执行它们。

因此,通常您从功能文件开始,根本不考虑实现。这是至关重要的,因为它可以帮助您将业务逻辑与实现分离,这是首先使用 Cucumber 的重点。下一步是使用 Cucumber 运行器运行功能文件,它会自动建议您应该为“胶水”类方法指定哪些名称以与步骤匹配。

例如,假设您在功能文件中创建了以下步骤:

I have logged in to the system

由于还没有实现,如果你尝试运行场景,Cucumber 会抛出异常:

cucumber.api.PendingException: TODO: implement me

但它也会建议此功能步骤的步骤实现应如何。所以在这种情况下:

You can implement missing steps with the snippets below:

@Given("^I have logged in to the system$")
public void i_have_logged_in_to_the_system() throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

最后一步是实现这些方法,在这里您可以重用您希望的任何实现。

【讨论】:

  • 谢谢。这是有道理的。因此,当我一无所有开始时,我最初的想法是开始编写页面类和测试类并返回到功能文件。但听起来我实际上需要扭转这一点,从功能文件开始,让 cucumber 在创建 step defs 方面为我做一些提升。有道理。
  • @Matt 正确。这称为由外而内的方法,这样您和您的业务团队将专注于开发什么,而不是如何开发并可能节省宝贵的时间。
【解决方案2】:

据我所知,结构应该如下 -

+---.idea
+---main
|   +---java
|   +---resources
\---test
|   +---java
|   |   \---stepdefs
|   |   |   |---ServiceHooks.java
|   |   |   |---StepDefinitions.java
|   |   |---TestRunner.java
|   \---resources
|       \---features
|           |---LoginProfile.feature
|           |---UpdateProfile.feature
|---pom.xml
|---testng.xml

参考:https://medium.com/agile-vision/cucumber-bdd-part-2-creating-a-sample-java-project-with-cucumber-testng-and-maven-127a1053c180

【讨论】:

  • OP 从未提及他使用 Java
  • 谢谢。关于结构的问题更多地是围绕用于驱动或测试系统的代码结构,以及步骤 defs 将调用的方法。传统上,我会为驱动系统的页面类创建一个文件夹,并为针对系统状态断言的测试类创建一个文件夹。我是否也需要以这种方式分开运送黄瓜?
  • @EugeneS 这是一个很好的假设!我正在使用 Java。对不起,应该说明这一点。
【解决方案3】:

正如@Eugene S 所说 - 使用 Cucumber 功能文件的目的是描述系统的行为,而不是实现(随着时间的推移,您会发​​现这种方式更容易维护)。 @Confused kangaroo 描述的结构也非常标准(如果您将项目作为 Maven 项目启动,您将获得相同/相似的结构。注意 .idea 文件夹是 IntelliJ 特定的)。

除了这些答案,我强烈推荐“The Cucumber for Java book”(如果您使用 Java)或“The Cucumber book”(如果您使用 Ruby)。这些书描述了如何最好地使用 Cucumber 及其原因,包括如何设置它以获得最大的好处并保持您的测试值得信赖和可维护。 最后,与 Cucumber 社区互动的方式有很多,您可以在 Cucumber 网站上找到(https://cucumber.io/support - Slack 频道是最活跃的 atm。)

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • @GerhardBarnard 好点,我已经澄清你可以在 Cucumber 网站上找到支持选项。
【解决方案4】:

如果你在这里使用 java 我已经为 Selenium-Cucumber 框架创建了一个骨架,你可以在它上面构建:

https://github.com/far11ven/Selenium-CucumberJUnitFramework

【讨论】:

  • 这很棒。非常感谢您抽出时间来做这件事。
猜你喜欢
  • 2016-10-14
  • 2021-12-07
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2021-09-27
相关资源
最近更新 更多