如何在使用 PACT 时将标头传递到 httpstarget 方法中的身份验证?

问题描述 投票:0回答:1

在创建协议验证测试时,我使用

HttpsTestTarget
方法。但问题是我的服务需要在调用中发送身份验证令牌。我们如何运行这个?请指教。

详细信息:使用 Java、Pact 和 Quarkus 扩展的项目(io.quarkiverse.pact:quarkus-pact-provider 和 io.quarkiverse.pact:quarkus-pact-consumer)。

下面是我的卷曲:

curl --location 'https://gateway.production.xpto.io/xpto/v2/xpto?attribute=%23xpto_client' \
--header 'Authorization: Bearer 3rdcD=V8KoW!eJaPjWx04lhuVUqXFyr2Bz-HjANr7Fy9eUzOW!7JJXeVwPe6NTSAlPxxn4C!qXzsqz!UzSrj/gH2o-BL=S?IsbMrb/zG00pjOWm7U=08PYz5UPko1JttfuI!v6rRH4P8fsJ-M6E0kR0Ds7tsqbRbjGGt8NsdzO4VPG1/U3uIYZ7IG/yWG8-1tUyq8V4DPmwtmxM/5CieFaPHhUJyRyjR!24K-7m4FGNd??gCr!t57JTvW2vrjEpj'

以下是我的验证测试:

package com.company.pact.provider;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;

import au.com.dius.pact.provider.junit5.HttpsTestTarget;
import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
@Provider("XPTOProvider")
@PactBroker(host = "localhost", port = "9292")
public class XPTOProviderContractTest {

    @BeforeEach
    void beforeEach(PactVerificationContext context) {
        context.setTarget(new HttpsTestTarget("gateway.production.xpto.io", 443, "/xpto/v2/xpto?attribute=%23xpto_client"));
    }

    @TestTemplate
    @ExtendWith(PactVerificationInvocationContextProvider.class)
    void pactVerificationTestTemplate(PactVerificationContext context) {
        context.verifyInteraction();
    }

    @State("test GET")
    public void testGet() {
        System.out.println("test GET");
        
    }

}
java testing junit quarkus pact
1个回答
0
投票

我们通过参考此链接中提供的文档成功解决了该问题。

为了解决这个问题,我们需要修改pactVerificationTestTemplate如下:

import org.apache.hc.core5.http.HttpRequest;

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context, HttpRequest request) throws Exception {
    request.addHeader("Authorization", getAccessToken());
    context.verifyInteraction();
}

另外,不要忘记添加导入语句:

import org.apache.hc.core5.http.HttpRequest;

此修改允许我们在发送请求之前对其进行调整,这对于解决我们的问题至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.