【问题标题】:Is it possible to integrate Jbehave with testNG?是否可以将 Jbehave 与 testNG 集成?
【发布时间】:2015-11-22 22:22:12
【问题描述】:

目前我们正在使用 TDD,并计划使用 Jbehave 迁移到 BDD。我刚刚进行了一些谷歌搜索,但无法使用 Jbehave 找到任何用于 testNG 的站点。我刚刚浏览了 Jbehave 官方网站,在那里我了解到可以将 jbehave 库与任何类型的单元测试工具(如 TestNg、Junit)集成。但是我没有找到任何实际操作的示例代码。 我期待一些专家采取以下步骤:

  1. 如何使用 Jbehave+TestNG 创建一个简单的 java 文件。
  2. 我用Jbehave实现后是否可以使用TestNG的所有功能(Like, annotations. BeforeClass, afterClass, 前套件,后套件)

  3. 如何通过TestNG.xml文件运行Jbehave特性文件/类。

  4. 如何在 Jbehave 中集成自定义测试报告?

我真的不期待任何实际示例或工作代码。我只想了解概览之旅,以及完成此任务的一些输入。

如果有人分享链接,它真的很有帮助,而且非常基本的代码让我更清楚。

到目前为止我尝试了以下事情:

功能文件:

Scenario: Check the google search engine
Given : Open the google home page www.google.com
When : Enter test automation in search box
Then : Proper result should be displayed in results page

测试步骤类文件:

public class GoogleSearchEngine_Steps {

    public static WebDriver driver;

    @Given("Open the google home page $url")
    public static void openUrl(String url) throws Exception {
        try {

            driver = new FirefoxDriver();
            driver.get(url);

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @When("Enter $searchKeyword in search box")
    public static void searchKeyword(String searchKeyword) throws Exception {
        try {

            driver.findElement(By.xpath(".//*[@id='gs_htif0']")).sendKeys(searchKeyword);
            driver.findElement(By.xpath(".//*[@id='tsf']/input[1]")).click();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @Then("Proper result should be displayed in results page")
    public static void result() throws Exception {
        try {

            driver.quit();

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

但坚持使用 TestNg 创建一个测试运行器类文件。我不确定如何开始。

谁能帮我创建一个测试运行器类文件来执行上述代码。

我阅读了一些材料,但我没有足够的时间阅读所有这些,并实施如果有人帮助我,将非常感谢。

【问题讨论】:

    标签: java testng bdd jbehave


    【解决方案1】:
    1. 来自JBehave's FAQ:

    使用 TestNG 运行的快速修复方法是简单地注释 run() 方法 在您的根 JUnitStory/Stories 类中使用 TestNG @Test 注释:

    public class YourStory extends JUnitStory/Stories {
    
        @org.testng.annotations.Test 
        public void run() throws Throwable {
            super.run();
        }
    }
    

    请注意,这只是运行故事的一种方式,如果您使用其他基于 Embedder 的方法,则需要更改相应使用的测试注释。

    对于基于 Embedder 的方法,有文档here。

    1. 您可能希望使用 JBehave's annotations 而不是 TestNG,因为您将运行故事和场景而不是类和套件。如您所见,一个故事(多个场景)被视为一个测试,如果您考虑诸如背景之类的事情,这是有道理的。

    2. 由于 TestNG 将一个故事视为一个测试,我看不出有什么理由不接受它。试试看吧。

    3. 有关测试报告,请再次参阅JBehave's documentation。它允许注入自定义报告器。

    说了这么多,不要从 TDD 迁移。理想的情况是拥有一些遍历整个系统的高级场景、更多的集成测试以及大量的单元测试。

    例如,如果您有一个表单要验证,只需举几个例子来说明如何引导用户填写表单。通过为验证类创建单元测试来检查验证的其余部分。 (您仍然可以将它们视为示例,并将 Given / When / Then 放在 cmets 中,但使用 JBehave 对于技术受众的测试来说太过分了。)

    请参阅testing pyramid 了解更多信息,避免使用testing ice-cream cone。

    【讨论】:

    • @Lunivore.- 感谢您的意见。让我检查一下链接。
    • 你能给我一些用于运行 jbehave 测试步骤的示例类文件吗?我刚刚用我迄今为止尝试过的东西更新了这个问题。请帮助我实现这一目标。
    • 你能帮我解决这个问题吗?
    • @SKumar 您是否尝试过查看 JBehave 源代码中的示例类文件?我不再担任开发人员,因此无法轻松帮助您。
    • @SKumar 他们没有解释,但他们有例子。你的是here。
    猜你喜欢
    • 2015-10-23
    • 2023-03-12
    • 2013-04-07
    • 2011-06-14
    • 2015-09-28
    • 1970-01-01
    • 2023-03-07
    • 2016-11-18
    • 2011-10-18
    相关资源
    最近更新 更多