Trasforma la variabile Citrus in variabile Java


Sto affrontando un problema: ho bisogno di usare il valore di una variabile citrus come parametro per una funzione Java. Sto cercando di fare con contesti e comportamenti, ma nulla sembra funzionare.

import com.playtika.hof.mgs.config.Context;
import org.springframework.http.HttpStatus;
import com.consol.citrus.http.client.HttpClient;
import lombok.AllArgsConstructor;

@AllArgsConstructor
public class CreateSessionBehavior extends BaseBehavior {

private HttpClient httpClient;
private Long uid;
private String sidVar;
private Context appContext;

public void apply() {
    // Create Session ID
    http().client(httpClient).send()
            .post("/utils/hof/redis/sessions?uid=" + uid);

    http().client(httpClient).receive().response(HttpStatus.OK)
            .extractFromPayload("$.sid", sidVar).validationCallback((response, context) -> {
        appContext.addValue(sidVar, context.getVariable(sidVar));
    });

    echo("New session in variable " + sidVar + ": ${" + sidVar + "}");

    }
 }

Qui ho bisogno di usare sidVar:

import com.playtika.hof.mgs.Kafkaproducer;
import com.playtika.hof.mgs.behavior.CreateSessionBehavior;
import com.playtika.hof.mgs.config.Context;
import org.testng.annotations.Test;
import com.consol.citrus.annotations.CitrusTest;
import com.playtika.hof.mgs.AbstractMGSTest;

@Test
public class TestPublishMessage extends AbstractMGSTest {

@CitrusTest(name = "Test Publish Message")

public void testPublishMessage() {

    description("Publish messages on Kafka");

    Context appContext = new Context();

    applyBehavior(new CreateSessionBehavior(testServer(), getValidUid(0),
            sessionName(0), appContext));

    String sessionId = appContext.getValue(sidVar);

  }
}

C'è un modo per restituire la variabile sidVar in modo che possa usarla ovunque ne abbia bisogno?

Vi ringrazio molto.

Author: GHM, 2018-04-04

1 answers

Citrus salva tutte le variabili in un contesto di test comune valido per l'intera esecuzione del test case. È possibile iniettare il contesto di test Citrus all'implementazione come parametro del metodo di test:

public class TestContextInjectionIT extends JUnit4CitrusTestRunner {
    @Test
    @CitrusTest
    public void contextInjection(@CitrusResource TestContext context) {
        context.setVariable("message", "Hello, I am a variable!");

        echo("${message}");

        String message = context.getVariable("message");
        log.info(message);
    }
}

Si prega di notare che ho usato il test runner invece di test designer. Questo perché le azioni di test runner vengono eseguite immediatamente in modo che le modifiche al contesto del test siano visibili subito dopo l'esecuzione dell'azione.

In aggiunta a ciò tutte le azioni di test hanno accesso a anche il contesto del test. Quindi puoi semplicemente aggiungere un'azione personalizzata tramite Java DSL e accedere al contesto di test.

public class TestContextAccessIT extends JUnit4CitrusTestRunner {
    @Test
    @CitrusTest
    public void contextInjection() {
        variable("message", "Hello, I am a variable!");

        echo("${message}");

        run(new AbstractTestAction() {
            @Override
            public void doExecute(TestContext context) {
                String message = context.getVariable("message");
                log.info(message);
            }
        });      
    }
}
 2
Author: Christoph Deppisch, 2018-04-09 05:20:14