当前位置: 首页 > 面试题库 >

如何通过测试类传递从有效载荷中提取的变量?

倪举
2023-03-14
问题内容

我正在使用 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应用程序发送相同的有效载荷(我试图避免,