Как я должен передать переменную, извлеченную из полезной нагрузки через тестовые классы?

Я использую Citrus Framevork и у меня есть несколько шагов перед тестированием, чтобы получить токен авторизации, а затем использовать его во всем плане тестирования. И не совсем понятно, как использовать TestContext в этом случае и как получить доступ к var. через несколько классов testIT:

GetTokenIT.java:

        http()
                .client(HttpTqaClient)
                .receive()
                .response(HttpStatus.OK)
                .messageType(MessageType.JSON)
                .extractFromHeader("Authorization", "header_token")
                .extractFromPayload("$.id_token", "payload_token");

        action(new AbstractTestAction() {
                   @Override
                   public void doExecute(TestContext context) {
                       String token = context.getVariable("payload_token");
                       System.out.println("where is my token?" +token);

//Result: DEBUG port.LoggingReporter|where is my token?eyJhbGciOiJIUzUxMiJ9.

Эта часть отлично работает только в GetTokenIT.class. Как передать / вызвать переменную token в тестовых шагах nex? GetClientIdIT.java:

     public class GetClientIdIT extends TestNGCitrusTestDesigner {
            @Autowired
            private HttpClient HttpTqaClient;
            @Test
            @Parameters("context")
            @CitrusTest(name = "GetClientId")
            public void testGet(@Optional @CitrusResource TestContext context)

//HOW TO CALL VARIABLE "TOKEN" HERE?

            System.out.println("where is my token?" +token);
     http()
                            .client(HttpTqaClient)
                            .send()
                            .get("/account/api/lk/lk-client/current")
                            .accept("application/json")
                            .contentType("application/json")
                            .header("Authorization", "${token}");
                    http()
                            .client(HttpTqaClient)
                            .receive()
                            .response(HttpStatus.OK)
                            .messageType(MessageType.JSON);

1 ответ

Решение

В Citrus вы можете выполнять действия до всего набора тестов с TestDesignerBeforeSuiteSupport, Как это:

public class SetupAuthTokenBeforeSuite extends TestDesignerBeforeSuiteSupport {

    @Override
    public void beforeSuite(TestDesigner designer) {
        designer.echo("Setting up authentication token");

        designer.http()
                .client(HttpTqaClient)
                .send()
                ...

        designer.http()
                .client(HttpTqaClient)
                .receive()
                .response(HttpStatus.OK)
                .messageType(MessageType.JSON)
                .extractFromHeader("Authorization", "header_token")
                .extractFromPayload("$.id_token", "payload_token");

        designer.action(new AbstractTestAction() {
            @Override public void doExecute(TestContext testContext) {
                testContext.getGlobalVariables().put("global_auth_token", "${payload_token}");
            }
        });
    }
}

Независимо от того, какие тесты или сколько из вашего набора тестов вы выполняете, Citrus всегда будет выбирать их и выполнять до запуска любого теста. Вам нужно только настроить это как bean-компонент внутри вашего контекста Citrus.

Хитрость заключается в том, чтобы установить глобальную переменную со значением извлеченной переменной, как в примере выше. После этого вы можете использовать эту переменную внутри любого теста:

http()
     .client(HttpTqaClient)
     .send()
     .get("/account/api/lk/lk-client/current")
     .accept("application/json")
     .contentType("application/json")
     .header("Authorization", "${global_auth_token}");

Я должен спросить, хотя, какую версию Citrus вы используете? Рекомендуется использовать TestNGCitrusTestRunner вместо TestNGCitrusTestDesigner и, следовательно, TestRunnerBeforeSuiteSupport вместо TestDesignerBeforeSuiteSupport,

Другие вопросы по тегам