我正在使用 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中可以正常工作。如何在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);
在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始终会选择并执行这些测试,然后再运行任何测试。您只需要在Citrus上下文中将其配置为bean。
诀窍是使用上面提取的变量的值设置一个 全局变量 。之后,您可以在以下任何测试中使用此变量:
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
。
问题内容: 我可以通过执行以下命令成功创建一个地方: 服务器返回。 现在,我想将有效负载存储在一个如下所示的JSON文件中: 所以我修改了要执行的命令,如下所示: 返回失败。为什么? 问题答案: 发送默认内容类型为的POST请求。如果要发送JSON请求,则必须指定正确的内容类型标头: 但这仅在服务器接受json输入的情况下有效。将在URL的末尾可能仅表明 输出 是JSON,这并不一定意味着它也将处
我是AWS平台的新手。我已经通过AWS CLI调用了lambda函数。 在这里,Payload是一个json文件 这个json文件被用作我的lambda处理程序中事件对象的一部分。 当上传S3文件并自动触发Lambda函数时,是否可以配置此行为? 例如, 我在一个S3_bucket中上传了一个文件,该文件将触发一个lambda函数,其json负载如上所示。
问题内容: 我正在使用 PHP , ExtJS 和 ajax存储 。 它不通过POST或GET发送数据(在创建,更新,销毁时)。在 Chrome控制台中, 我在“ 请求有效负载 ”字段中看到我的传出参数为JSON 。 $ _POST 和 $ _GET 为空。 如何在PHP中检索它? 问题答案: 如果我正确理解这种情况,那么您只是通过http正文传递了json数据,而不是数据。 您可以使用以下代码段
问题内容: Python文档似乎尚不清楚参数是通过引用还是通过值传递,并且以下代码会产生未更改的值“原始” 我可以做些什么来通过实际引用传递变量吗? 问题答案: 传入的参数实际上是对对象的引用(但引用是通过值传递的) 有些数据类型是可变的,但有些则不是 所以: 如果将可变对象传递给方法,则该方法将获得对该对象的引用,并且可以对其进行突变,但是如果您将该引用重新绑定到该方法中,则外部作用域对此一无所
问题内容: 我正在使用文件上传器,并且需要请求有效负载中的详细信息以进行裁剪。 我没有10位代表来发布POST请求的图片,但是它有 所以从avatar_data我所需要的,,,和。我知道我必须封送JSON,但是我不确定如何达到这一点? 问题答案: 实现接口。
我使用Firebase的云函数编写了一个云函数,该函数向Firebase消息传递的某些主题发送通知。函数的最后部分定义要发送的有效负载,然后发送: 但是,我在Firebase控制台中获得了错误日志: 错误:消息负载包含"notification.data"属性的无效值。值必须是字符串。 当我注销有效负载时,我确认它是所有字符串: 然而,当我从我的iPhone应用程序发送相同的有效载荷(我试图避免,