当前位置: 首页 > 知识库问答 >
问题:

运行测试时忽略PACT jvm匹配规则

笪煌
2023-03-14

我使用的是PACT JVM https://github.com/dius/pact-jvm/tree/master/provider/pact-jvm-provider-junit我不知道为什么我的联系人中的匹配规则被忽略了。我的HTTP测试

@RunWith(SpringRestPactRunner.class) // Say JUnit to run tests with custom Runner
@Provider("provDataTest")// Set up name of tested provider
@PactBroker(host="pact-broker.services", port = "80")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
        properties = {"spring.profiles.active=dev"},
        classes = Application.class)
public class ContractTesting {

    private static String token;

    @BeforeClass //Method will be run once: before whole contract test suite
    public static void setUpService() {
        //Run DB, create schema
        //Run service
        //...
        System.out.println("Now service in default state");
    }

    @TargetRequestFilter
    public void exampleRequestFilter(HttpRequest request) {

    }

    @State("Check correct data json structure in case code: 401")
    public void checkDataInCaseUnauthorized() {

    }

    @TestTarget // Annotation denotes Target that will be used for tests
    public final Target target = new HttpTarget(8082);

还有我的合同档案

{
  "provider": {
    "name": "provDataTest"
  },
  "consumer": {
    "name": "test"
  },
  "interactions": [
    {
      "description": "Read all links_401",
      "request": {
        "method": "GET",
        "path": "/v1/consumer/me/link_social_account",
        "headers": {
          "invalidAuth": "401"
        }
      },
      "response": {
        "status": 401,
        "headers": {
          "Content-Type": "text/json;charset=utf-8"
        },
        "body": {
          "error": {
            "code": 401,
            "message": "session incorrect",
            "errors": []
          }
        },
        "matchingRules": {
          "body": {
            "$.error": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.code": {
              "matchers": [
                {
                  "match": "integer"
                }
              ],
              "combine": "AND"
            },
            "$.error.message": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.errors[*].message": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.errors[*].field": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            }
          },
          "header": {
            "Content-Type": {
              "matchers": [
                {
                  "match": "text/json;charset=utf-8",
                  "regex": "regex"
                }
              ],
              "combine": "AND"
            }
          }
        }
      },
      "providerStates": [
        {
          "name": "Check correct data json structure in case code: 401"
        }
      ]
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    },
    "pact-jvm": {
      "version": "3.2.11"
    }
  }
}

并在运行后显示错误

Read all links_401 returns a response which has a matching body
      Read all links_401 returns a response which has a matching
body=BodyComparisonResult(mismatches={/=[BodyMismatch(expected=[B@480e8a7a, actual=[B@10378c35, mismatch=Actual body '[B@10378c35' is not equal to the expected body '[B@480e8a7a', path=/, diff=null)]},
 diff=[-{"error":{"code":401,"message":"session incorrect","errors":[]}}, 
+{"error":{"code":401,"message":"session incorrect, please login again (CR_A1004)","errors":[]}}])

请帮忙把我的观点说错。

谢谢,

共有1个答案

陶健
2023-03-14

问题在于您的内容类型头:“content-type”:“text/json;charset=utf-8”。JSON有效负载的适当内容类型应该是application/JSON。这就是为什么没有应用匹配器的原因,因为正文被视为文本负载。只需更改内容类型,就会将正文解析为JSON文档,并将匹配器应用于字段。

 类似资料:
  • 我正在Scala中开发一个利用SBT构建的Spark应用程序。Spark创建了非常冗长的日志记录,在运行测试时,我希望忽略这些日志记录。 我在src/test/resources和src/main/resources下设置了log4j.properties文件,其内容如下:

  • 是否有一种方法可以通过checkstyle配置文件来抑制与给定模式匹配的行的警告? 多谢了。

  • 在我的Eclipse项目(Eclipse Luna)中,我有一些JUnit测试用例,我不想在完全回归测试中运行。例如,因为它们需要用户在场以验证结果(例如,如果声音正确播放),或者因为它们只在特定系统上正确运行。这些测试大多是在对被测试类进行更改时手动使用的。我已经使用来忽略这些测试。 当我从Eclipse运行一个包含忽略测试的类(运行为->Junit测试)时,它将在测试列表中显示忽略的测试。

  • 我试图创建一个匹配特定模式的正则表达式,但我想忽略以开头的行。我怎么做? 如果一行不是以哈希开头,它应该被使用,就像我想要阻止攻击性语言一样,在这种情况下,它应该被覆盖。

  • 有时,我们编写的代码并没有准备就绪,并且测试用例要测试该方法/代码是否失败(或成功)。 在本示例中,注释有助于禁用此测试用例。 如果使用注释在测试方法上,则会绕过这个未准备好测试的测试用例。 在本教程中,我们将演示如何使用来忽略测试方法。 创建一个Maven项目,其结构如下所示 - pom.xml 依懒包配置 - 创建一个测试类:TestIgnore.java,其代码如下所示 - 运行上面代码,得