Будьте уверены с Cucumber: как поместить информацию о запросе в отчет HTML - PullRequest
0 голосов
/ 19 июня 2019

Я хотел бы показать подробности моих запросов и ответов в моем отчете HTML.

Пример файла функции:

Feature: Rest Assured under Cucumber POC

  Scenario: Azure Login Scenario
    Given Request specifications are set with base uri "https://login.microsoftonline.com/"
    When Azure Login Request Executed
    Then Verify Status Code is 200

Класс бегуна:

@RunWith(Cucumber.class)

@CucumberOptions(
        features = "src/main/resources/features",
        glue = {""},
        tags = "@tests",
        plugin = {      "pretty",
                        "json:target/cucumber-reports/Cucumber.json",
                        "html:target/cucumber-reports"}//reporting plugin
)
public class CucumberRunner {}

Шаги:

@Given("Request specifications are set with base uri {string}")
public void setRequestsSpec(String baseUri){

    RequestSpecification spec = new RequestSpecBuilder()
            .setBaseUri(baseUri)
            .addFilter(new ResponseLoggingFilter())//log request and response for better debugging. You can also only log if a requests fails.
            .addFilter(new RequestLoggingFilter())
            .build();

    testContext().setRequestSpec(spec);
}

@When("^Azure Login Request Executed$")
public void azureLoginExecuted() {

    response =
    given()  //Add x-www-form-urlencoded body params:
        .formParam(GRANT_TYPE_KEY, GRANT_TYPE_VALUE)
        .formParam(AUTO_TEAM_CLIENT_ID_KEY, AUTO_TEAM_CLIENT_ID_VALUE)
        .formParam(AUTO_TEAM_CLIENT_SECRET_KEY, AUTO_TEAM_CLIENT_SECRET_VALUE)
        .formParam(RESOURCE_KEY, RESOURCE_VALUE)
    .when()
        .post(AUTO_TEAM_TENANT_ID + RESOURCE); //Send the request along with the resource

    testContext().setResponse(response);

    setAuthorizationToken();
}

@Then("Verify Status Code is {int}")
public void verifyStatusCode(int expected_repsonse_code) {
    testContext().getResponse().then().statusCode(expected_repsonse_code);
}

В настоящее время я узнал, как отображать эти данные только в моей консоли IntelliJ:

Например:

@tests
Feature: Rest Assured under Cucumber POC

  @tests
  Scenario: Azure Login Scenario                                                            # src/main/resources/features/poc.feature:5
    Given Request specifications are set with base uri "https://login.microsoftonline.com/" # CommonStepsDefinitions.setRequestsSpec(String)
Request method: POST
Request URI:    https://login.microsoftonline.com/6ae4e000-b5d0-4f48-a766-402d46119b76/oauth2/token
Proxy:          <none>
Request params: <none>
Query params:   <none>

и более ..

Но HTML-отчет показывает только:

enter image description here

Спасибо!

1 Ответ

1 голос
/ 19 июня 2019

Я могу дать вам некоторые подробности, которые могут не полностью ответить на ваш вопрос.

Чтобы добавить данные в отчет о огурцах в формате HTML, вы можете использовать:

@After
public void addDataToReport(Scenario scenario) { //scenario is provided from Cucumber
    scenario.write(string with the information about scenario);
}

Это не будетотформатирован, и я не знаю, как изменить, как отчет отображает его.Каждое из сообщений будет находиться под каждым контрольным примером.

Вы должны каким-то образом передать информацию на @After ловушку.

Я надеюсь, что кто-то еще ответит с более подробной информацией.

РЕДАКТИРОВАТЬ:

Для того, чтобы хранить информацию о том, что сценарий выполняется в данный момент или даже параллельно, мы можем создать класс для хранения необходимой информации, основываясь наПоток, поэтому он будет Потокобезопасным.

Давайте создадим класс для хранения Scenario.Давайте назовем это Storage

public class Storage {
    private static final HashMap<Thread, Scenario> map = new HashMap<>();

    public static void putScenario(Scenario scenario) {
        map.put(Thread.currentThread(), scenario);
    }

    public static Scenario getScenario() {
        return map.get(Thread.currentThread());
    }
}

Теперь нам нужно как-то получить Scenario.Это может быть достигнуто с помощью @Before хука следующим образом:

public class BeforeHook {

    @Before(order = 1)
    public void getScenario(Scenario scenario) {
        Storage.putScenario(scenario);
    }
}

@Before хуки запускаются перед каждым сценарием.Мы получаем информацию о сценарии и помещаем ее в хранилище, чтобы знать, какой сценарий запущен в каком потоке.Помните, что хуки должны быть доступны с помощью параметра glue в Cucumber Runner!

А теперь, если мы хотим записать в отчет дополнительную информацию:

    @Then("Data is saved to the report")
    public void data_is_saved_to_the_report() {
        System.out.println("Saving data to report");
        Storage.getScenario().write("Test data and stuff");
    }

Мы просто получаем текущийСценарий из хранилища и метод Scenario.write() для добавления информации в отчет.

В отчете это будет выглядеть так: enter image description here

...