将 Citrus 变量转换为 Java 变量
Turn Citrus variable into Java variable
我遇到了一个问题:我需要使用柑橘变量的值作为 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 变量,以便我可以在任何需要的地方使用它?
非常感谢。
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);
}
});
}
}
我遇到了一个问题:我需要使用柑橘变量的值作为 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 变量,以便我可以在任何需要的地方使用它?
非常感谢。
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);
}
});
}
}