我遇到了一个问题:我需要使用柑橘变量的值作为Java函数的参数。我试图用上下文和行为来做,但似乎没有任何效果。
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 + "}");
}
}
这里我需要使用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);
}
}
有没有办法返回sidVar变量,以便我可以在任何需要的地方使用它?
非常感谢。
答案 0 :(得分:2)
Citrus将所有变量保存到对整个测试用例执行有效的公共测试上下文中。您可以将Citrus测试上下文作为测试方法参数注入您的实现:
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);
}
}
请注意我使用了测试运行器而不是测试设计器。这是因为跑步测试操作立即执行,因此测试上下文更改在操作执行后立即可见。
除此之外,所有测试操作都可以访问测试上下文。因此,您只需通过Java DSL添加自定义操作并访问测试上下文。
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);
}
});
}
}