【问题标题】:pact-jvm-provider - JUnit5 Spring - Unable to add authorization headerspact-jvm-provider - JUnit5 Spring - 无法添加授权标头
【发布时间】:2020-11-16 23:23:07
【问题描述】:

我有一个 Spring Boot 应用程序,我正在使用 Pact-JVM 为其编写合同测试。它是一个提供者。

我在 build.gradle 中添加了以下协议依赖项/配置: 我正在使用 Java 11,Gradle 6.3

plugins {
    id 'au.com.dius.pact' version '4.1.6'
}
dependencies {
    testImplementation 'ch.qos.logback:logback-core:1.2.3'
    testImplementation 'ch.qos.logback:logback-classic:1.2.3'

    testImplementation 'au.com.dius.pact.provider:junit5:4.1.6'
}

这是我的验证测试:

@Provider("product")
@PactBroker(host = "localhost", scheme = "http", port = "9292")
class PactVerificationTest {

    @BeforeEach
    void setupTestTarget(PactVerificationContext context) {
        context.setTarget(new HttpTestTarget("localhost", 9002, "/"));
    }

    @TargetRequestFilter
    public void addAuthorizationHeadersStripContextPathRequestFilter(HttpRequest request) throws URISyntaxException {
        request.addHeader("USER_ID", "1231324123414");
        request.addHeader("AB_USER", "1231324123414");
        request.addHeader("AB_USERGROUP", "installtrial");

        String rawUri = request.getRequestLine().getUri();
        ((HttpRequestBase) request).setURI(new URI(rawUri.replaceFirst("/product/", "/")));
    }

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

    @State("Given products available")
    public void testProductDetails() {

    }
}

我希望在 TargetRequestFilter 注释方法中添加的授权标头成为请求的一部分,但请求中缺少这些标头。你能帮我看看我在这里做错了什么吗?

另外,我正在寻找使用最新版本 pact-jvm 的示例。在 pact-jvm 提供的示例中找不到。

【问题讨论】:

    标签: junit5 contract pact-jvm


    【解决方案1】:

    Pact-JVM Slack 团队前来救援!

    在 Pact-JVM + JUnit5 的情况下,添加 headers/request 操作可以在 @TestTemplate 注解的方法本身中完成 - https://docs.pact.io/implementation_guides/jvm/provider/junit5/#modifying-the-requests-before-they-are-sent

    现在我的方法是这样的:

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

    【讨论】:

      【解决方案2】:

      如果您想动态更改授权标头,我们就是这样做的。在这里,我们以教师身份开始测试,并在需要时调用该方法用学生令牌覆盖访问令牌。

      @Provider(PACT_PROVIDER)
      @Consumer(PACT_CONSUMER)
      @PactBroker(host = BROKER_PACT_URL)
      public class PactProviderGcTest {
      
      @TestTemplate
      @ExtendWith(PactVerificationInvocationContextProvider.class)
      void pactTestTemplate(PactVerificationContext context, HttpRequest request) {
      
          request.addHeader("Authorization", "Bearer " + accessToken);
      
          context.verifyInteraction();
      }
      
      @BeforeAll
      public static void setUp() throws JSONException {
        accessToken =  getTeacherAccessToken();
      }
      
      @BeforeEach
      void before(PactVerificationContext context) {
          context.setTarget(new HttpsTestTarget(BASE_PACT_URL, 443, "/"));
      }
      
      @State("A request to retrieve google courses as a teacher")
      void sampleState() {}
      
      @State("A request to retrieve a google course as a teacher")
      void sampleState1() {}
      
      @State("A request to turn in a submission as a student")
      void sampleState2() throws JSONException {
          accessToken = getAccessTokenStudent();
      }
      
      }
      

      // 获取令牌方法

      public static String getTeacherAccessToken() {
      
          accessToken = retrieveTokenFor("Teacher");
      
          return accessToken;
      }
      
      public static String getAccessTokenStudent() throws JSONException {
      
         accessToken = retrieveTokenFor("Student");
      
         return accessToken;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多