微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在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

解决方法

我正在使用 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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。