1

我目前正在构建一个框架来测试 Rest-API 端点。由于我计划编写大量测试用例,因此我决定组织项目以允许我重用常见的步骤定义方法。

结构如下;

FunctionalTest
    com.example.steps
        -- AbstractEndpointSteps.java
        -- SimpleSearchSteps.java
    com.example.stepdefinitions
        -- CommonStepDefinition.java
        -- SimpleSearchStepDefinition.java`

但是,当我尝试调用SimpleSearchSteps.java方法时,我得到了 NullPointerException

CommonStepDefinition Code

package com.example.functionaltest.features.stepdefinitions;

import net.thucydides.core.annotations.Steps;

import com.example.functionaltest.steps.AbstractEndpointSteps;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;


public class CommonStepDefinition {

    @Steps
    private AbstractEndpointSteps endpointSteps;

    @Given("^a base uri \"([^\"]*)\" and base path \"([^\"]*)\"$")
    public void aBaseUriAndBasePath(String baseURI, String basePath) {
        endpointSteps.givenBasepath(baseURI, basePath);
    }

    @When("^country is \"([^\"]*)\"$")
    public void countryIs(String country) 
    {
        endpointSteps.whenCountry(country);
    }

    @Then("^the status code is (\\d+)$")
    public void theStatusCodeIs(int statusCode) {
        endpointSteps.executeRequest();
        endpointSteps.thenTheStatusCodeIs200(statusCode);
    }

}

SimpleSearchStepDefinition.java

package com.example.functionaltest.features.stepdefinitions;

import net.thucydides.core.annotations.Steps;
import com.example.functionaltest.steps.EndpointSteps;
import cucumber.api.java.en.When;


public class SimpleSearchStepDefinition {

    @Steps
    private SimpleSearchSteps searchSteps;



    @When("^what is \"([^\"]*)\"$")
    public void whatIs(String what) {
        searchSteps.whenWhatIsGiven(what);
    }

}
4

3 回答 3

1

看起来您缺少 Cucumber 注释的持有者类,您应该拥有这样的东西,以便黄瓜知道并确定您的步骤和功能:

@RunWith(Cucumber.class)
@CucumberOptions(
    glue = {"com.example.functionaltest.features.steps"},
    features = {"classpath:functionaltest/features"}
)
public class FunctionalTest {
}

请注意,根据此示例,在您的 src/test/resources 中,您应该有带有 .feature 文件的functionaltest/features 文件夹,您可以通过设计更改它

于 2017-07-05T14:21:40.813 回答
0

我通过在 AbstractEndpointSteps 中使用RequestSpecBuilder的静态实例而不是RequestSpecification解决了这个问题。

因此,我能够完全避免 StepDefinitions 和 NPE 问题的重复

于 2017-07-13T10:46:25.757 回答
0

你能看看空手道吗,这正是你想要建立的!由于您习惯了 Cucumber,因此这里有一些 Karate提供的增强功能(基于 Cucumber-JVM)

  • 内置步骤定义,无需编写Java代码
  • 重用 *.feature 文件并从其他脚本调用它们
  • 动态数据驱动测试
  • 并行执行测试
  • 每个功能仅运行一次例程的能力

免责声明:我是开发者。

于 2017-07-05T02:51:12.713 回答