Я использую Citrus 2.7.8 с Cucumber 2.4.0. Я делаю вызов soap и хочу получить ответ и выполнить его расширенный анализ, чтобы проверить, есть ли у ответа graphql совпадающие значения. (Я понимаю, как выполнять валидацию, когда в ней есть только один элемент, но мне нужно что-то, что можно обработать, когда может быть возвращен один или несколько элементов (например, 1 транспортное средство или 4 транспортных средства)). Чтобы сделать мою проверку очень динамичной c и способной обрабатывать много разных «кавычек», я хочу сохранить ответ в переменной Citrus, а затем сделать его доступным для java для чтения в файле и выполнения расширенного анализа и проверки ,
Внедрение TestContext в настоящее время не работает с огурцом (см. https://github.com/citrusframework/citrus/issues/657), поэтому я использую обходной путь здесь: Как добавить TestContext с помощью TestRunner и cucumber чтобы вручную создать контекст. Без этого я получаю nullpointerexception для всего, что связано с контекстом.
Я могу использовать функцию сообщений Citrus, чтобы получить ответ soap, который является потрясающим. Мои операторы echo в консоли показывают, что она успешно поместила правильное значение в переменную citrus. Но у меня возникают проблемы с тем, чтобы сделать это доступным для java, чтобы я мог затем открыть его и проанализировать.
Я сократил файл определения шага до подходящего кода. Мои попытки пары перечислены ниже вместе с проблемами, с которыми я столкнулся в их результатах.
Есть ли у кого-нибудь идеи о том, как я могу успешно обойти проблемы контекста и сделать свой ответ доступным для java?
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import com.consol.citrus.Citrus;
import com.consol.citrus.annotations.CitrusFramework;
import com.consol.citrus.annotations.CitrusResource;
import com.consol.citrus.config.CitrusSpringConfig;
import com.consol.citrus.context.TestContext;
import com.consol.citrus.dsl.junit.JUnit4CitrusTestRunner;
import com.consol.citrus.dsl.runner.TestRunner;
import com.consol.citrus.ws.client.WebServiceClient;
import cucumber.api.java.en.When;
@ContextConfiguration(classes = CitrusSpringConfig.class)
public class CitrusSteps extends JUnit4CitrusTestRunner {
@CitrusFramework
private Citrus citrus;
@CitrusResource
private TestRunner runner;
@CitrusResource
private TestContext context;
@Autowired
private WebServiceClient getQuote;
@When("^I call getQuote with id \"([^\"]*)\"$")
public void i_call_getquote_with_id(String quoteId) throws Throwable {
context = citrus.createTestContext();
String soappayload = "my payload (taken out for privacy purposes)";
runner.soap(action -> action.client(getQuote)
.send()
.soapAction("getQuote")
.payload(soappayload));
runner.soap(action -> action.client(getQuote)
.receive()
.name("getQuoteResponseStoredMessage"));
//this bombs out on the context line with this: "com.consol.citrus.exceptions.CitrusRuntimeException: Unknown variable 'messageStoreGetQuoteResponse1'"
runner.variable("messageStoreGetQuoteResponse1", "citrus:message(getQuoteResponseStoredMessage.payload())");
runner.echo("First try: ${messageStoreGetQuoteResponse1}");
String firstTry = context.getVariable("messageStoreGetQuoteResponse1");
log.info("First Try java variable: " + firstTry);
//this bombs out on the context line with this: "com.consol.citrus.exceptions.CitrusRuntimeException: Unknown variable 'messageStoreGetQuoteResponse2'"
runner.createVariable("messageStoreGetQuoteResponse2", "citrus:message(getQuoteResponseStoredMessage.payload())");
runner.echo("Second try: ${messageStoreGetQuoteResponse2}");
String secondTry = context.getVariable("messageStoreGetQuoteResponse2");
log.info("Second Try java variable: " + secondTry);
//This stores the literal as the value - it doesn't store the message so it appears I can't use citrus functions within the context
context.setVariable("messageStoreGetQuoteResponse3", "citrus:message(getQuoteResponseStoredMessage.payload())");
String thirdTry = context.getVariable("messageStoreGetQuoteResponse3");
log.info("Third Try java variable: " + thirdTry);
}
}