使用webdriver API实现BDD(JBehave + Webdriver)

时间:2012-05-27 14:52:14

标签: java selenium webdriver jbehave

我正在尝试通过实现BDD框架来增强我的Webdriver脚本。我开始了解JBehave(JBehave + Webdriver),但在继续讨论之前,我担心需要多少Java代码实现,因为我主要是进行自动化测试。 根据我的看法,JBehave分三步工作:

  1. 添加故事文件
  2. 将故事文件实现为Java(我对此步骤有疑问)
  3. 实施Webdriver调用。
  4. 所以使用这种方法如果我有一个用户故事,例如注册到应用程序,那么:

    • 实施用户故事
    • java中的实现 - 用Java实现完整的认证逻辑
    • 实施webdriver-自动执行用户操作

    另一个例子:我有一个执行特定工作流程的用户故事&需要在5-6页上执行一组操作然后我需要为此实现/模拟java代码。

    这是JBehave的工作方式吗?还有其他选择。

4 个答案:

答案 0 :(得分:1)

jbehave的五步概述:

  1. 写故事(纯文字)
  2. 将步骤映射到Java方法(POJO)
  3. 配置故事(仅一次)
  4. 运行故事(包括Ant,Maven,JUnit,Eclipse,IntelliJ)
  5. 查看报告(HTML)
  6. 您可以访问jbehave的详细信息: http://jbehave.org/

    您可以访问以下教程示例: https://github.com/jbehave/jbehave-tutorial

答案 1 :(得分:0)

JBehave的工作方式如下:

  1. 撰写描述系统某种理想行为的故事。这个故事必须根据JBehave DSL撰写。故事基本上描述了Given / When / Then流程中的一系列步骤。

  2. 在java代码中实现Given / When / Then步骤。这涉及针对webdriver API编写代码以与正在测试的应用程序进行交互。

  3. 运行故事并分析结果。它要么通过要么失败。

  4. 我正在撰写一篇相当详细的博客文章,并在完成后通过链接更新此答案。

答案 2 :(得分:0)

jbehave以一种方式工作,不依赖于webdriver的存在与否 如果你想在“一页”中获得方法,你可以看here

Java BDD框架http://java.dzone.com/articles/brief-comparison-bdd - 对我来说JBehave和Cucumber是最好的选择,因为它拥有大而活跃的社区

答案 3 :(得分:0)

如果您在使用“纯”Java实现故事文件时遇到问题,那么您应该尝试Ginkgo4j。它是RSpec的Java端口,允许您以与RSpec相同的方式进行测试,只需使用Java。

将此依赖项添加到您的POM:

    <dependency>
        <groupId>com.github.paulcwarren</groupId>
        <artifactId>ginkgo4j</artifactId>
        <version>1.0.9</version>
        <scope>test</scope>
    </dependency>

创建一个JUnit测试用例,指定Ginkgo4jRunner runner:

@RunWith(Ginkgo4jRunner.class)
@Ginkgo4jConfiguration(threads = 1)
public class MyTest {
  {
    Describe("ClassUnderTest", () -> {
      Context("#Method", () -> {
        BeforeEach(() -> {
          // before test logic          
        }); 
        JustBeforeEach(() -> {
          ClassUnderTest.Method();          
        }); 
        Context("given a context", () -> {
          It("should do something", () -> {
            // assertions
          });
        });
        Context("given a different context", () -> {
          It("should do something else", () -> {
            // assertions
          });
        });
        AfterEach(() -> {
          // after test logic
        });
      });
    }); 
  }
}