【问题标题】:Karate: Weird matching behaviour JSON空手道:奇怪的匹配行为 JSON
【发布时间】:2018-05-04 12:17:10
【问题描述】:

我偶然发现了一个对我来说根本没有意义的 JSON 匹配行为,因为如果我通过并行运行器执行我的功能,匹配会失败(这不应该)。但是,如果我单独运行该功能(在 IntelliJ 中,运行功能),则匹配会按预期成功。我几乎为此失去了理智。 :)

这是我从 REST 调用中得到的实际响应:

[
{
"servicePointInfo": {
  "cplID": "CPL123",
  "klsID": 26035132,
  "type": "Gebaeudeteil",
  "state": "FREI",
  "stateText": "Freier Service Point",
  "plannedDisconnectDate": null,
  "recentInfo": {
    "firstName": null,
    "surname": null,
    "MSN0": null
  }
},
"buildingInfo": {
  "type": null,
  "typeText": null,
  "part": "FeH",
  "partText": "Fernsprechh�uschen",
  "partNumber": null,
  "partInfo": "vor Telekom",
  "partAlignment": null,
  "level": null,
  "levelText": null,
  "levelNumber": null,
  "floor": null,
  "floorText": null,
  "flatNumber": null,
  "flatInfo": null
}
},
{
"servicePointInfo": {
  "cplID": "CPL456",
  "klsID": 26035132,
  "type": "Wohnung",
  "state": "FREI",
  "stateText": "Freier Service Point",
  "plannedDisconnectDate": null,
  "recentInfo": {
    "firstName": "Karl",
    "surname": "Schaefer",
    "MSN0": null
  }
},
"buildingInfo": {
  "type": "M",
  "typeText": "Mehrfamilienhaus",
  "part": null,
  "partText": null,
  "partNumber": null,
  "partInfo": null,
  "partAlignment": null,
  "level": "EG",
  "levelText": "Erdgescho�",
  "levelNumber": null,
  "floor": "R",
  "floorText": "rechts",
  "flatNumber": "12",
  "flatInfo": null
}
},
{
"servicePointInfo": {
  "cplID": "CPL789",
  "klsID": 26035132,
  "type": "Gebaeudeteil",
  "state": "FREI",
  "stateText": "Freier Service Point",
  "plannedDisconnectDate": null,
  "recentInfo": {
    "firstName": null,
    "surname": null,
    "MSN0": null
  }
},
"buildingInfo": {
  "type": null,
  "typeText": null,
  "part": "VH",
  "partText": "Vorderhaus",
  "partNumber": null,
  "partInfo": "gelbe Haus mit dem h�sslichen Dach",
  "partAlignment": null,
  "level": null,
  "levelText": null,
  "levelNumber": null,
  "floor": null,
  "floorText": null,
  "flatNumber": null,
  "flatInfo": null
}
}
]

这是我用来匹配的 JSON。它实际上是我使用的一些模糊匹配表达式的复制实际响应,因为我认为特殊字符(ä,ß)可能是问题):

[
{
"servicePointInfo": {
  "cplID": "CPL123",
  "klsID": 26035132,
  "type": "Gebaeudeteil",
  "state": "FREI",
  "stateText": "Freier Service Point",
  "plannedDisconnectDate": null,
  "recentInfo": {
    "firstName": null,
    "surname": null,
    "MSN0": null
  }
},
"buildingInfo": {
  "type": null,
  "typeText": null,
  "part": "FeH",
  "partText": "#notnull",
  "partNumber": null,
  "partInfo": "vor Telekom",
  "partAlignment": null,
  "level": null,
  "levelText": null,
  "levelNumber": null,
  "floor": null,
  "floorText": null,
  "flatNumber": null,
  "flatInfo": null
}
},
{
"servicePointInfo": {
  "cplID": "CPL456",
  "klsID": 26035132,
  "type": "Wohnung",
  "state": "FREI",
  "stateText": "Freier Service Point",
  "plannedDisconnectDate": null,
  "recentInfo": {
    "firstName": "Karl",
    "surname": "Schaefer",
    "MSN0": null
  }
},
"buildingInfo": {
  "type": "M",
  "typeText": "Mehrfamilienhaus",
  "part": null,
  "partText": null,
  "partNumber": null,
  "partInfo": null,
  "partAlignment": null,
  "level": "EG",
  "levelText": "#notnull",
  "levelNumber": null,
  "floor": "R",
  "floorText": "rechts",
  "flatNumber": "12",
  "flatInfo": null
}
},
{
"servicePointInfo": {
  "cplID": "CPL789",
  "klsID": 26035132,
  "type": "Gebaeudeteil",
  "state": "FREI",
  "stateText": "Freier Service Point",
  "plannedDisconnectDate": null,
  "recentInfo": {
    "firstName": null,
    "surname": null,
    "MSN0": null
  }
},
"buildingInfo": {
  "type": null,
  "typeText": null,
  "part": "VH",
  "partText": "Vorderhaus",
  "partNumber": null,
  "partInfo": "#notnull",
  "partAlignment": null,
  "level": null,
  "levelText": null,
  "levelNumber": null,
  "floor": null,
  "floorText": null,
  "flatNumber": null,
  "flatInfo": null
}
}
]

这是匹配结果:

com.intuit.karate.exception.KarateException: path: $, actual: '[{"servicePointInfo":{"cplID":"CPL123","klsID":26035132,"type":"Gebaeudeteil","state":"FREI","stateText":"Freier Service Point","plannedDisconnectDate":null,"recentInfo":{"firstName":null,"surname":null,"MSN0":null}},"buildingInfo":{"type":null,"typeText":null,"part":"FeH","partText":"Fernsprechh�uschen","partNumber":null,"partInfo":"vor Telekom","partAlignment":null,"level":null,"levelText":null,"levelNumber":null,"floor":null,"floorText":null,"flatNumber":null,"flatInfo":null}},{"servicePointInfo":{"cplID":"CPL456","klsID":26035132,"type":"Wohnung","state":"FREI","stateText":"Freier Service Point","plannedDisconnectDate":null,"recentInfo":{"firstName":"Karl","surname":"Schaefer","MSN0":null}},"buildingInfo":{"type":"M","typeText":"Mehrfamilienhaus","part":null,"partText":null,"partNumber":null,"partInfo":null,"partAlignment":null,"level":"EG","levelText":"Erdgescho�","levelNumber":null,"floor":"R","floorText":"rechts","flatNumber":"12","flatInfo":null}},{"servicePointInfo":{"cplID":"CPL789","klsID":26035132,"type":"Gebaeudeteil","state":"FREI","stateText":"Freier Service Point","plannedDisconnectDate":null,"recentInfo":{"firstName":null,"surname":null,"MSN0":null}},"buildingInfo":{"type":null,"typeText":null,"part":"VH","partText":"Vorderhaus","partNumber":null,"partInfo":"gelbe Haus mit dem h�sslichen Dach","partAlignment":null,"level":null,"levelText":null,"levelNumber":null,"floor":null,"floorText":null,"flatNumber":null,"flatInfo":null}}]', expected: '[{"servicePointInfo":{"cplID":"CPL123","klsID":26035132,"type":"Gebaeudeteil","state":"FREI","stateText":"Freier Service Point","plannedDisconnectDate":null,"recentInfo":{"firstName":null,"surname":null,"MSN0":null}},"buildingInfo":{"type":null,"typeText":null,"part":"FeH","partText":"#notnull","partNumber":null,"partInfo":"vor Telekom","partAlignment":null,"level":null,"levelText":null,"levelNumber":null,"floor":null,"floorText":null,"flatNumber":null,"flatInfo":null}},{"servicePointInfo":{"cplID":"CPL456","klsID":26035132,"type":"Wohnung","state":"FREI","stateText":"Freier Service Point","plannedDisconnectDate":null,"recentInfo":{"firstName":"Karl","surname":"Schaefer","MSN0":null}},"buildingInfo":{"type":"M","typeText":"Mehrfamilienhaus","part":null,"partText":null,"partNumber":null,"partInfo":null,"partAlignment":null,"level":"EG","levelText":"#notnull","levelNumber":null,"floor":"R","floorText":"rechts","flatNumber":"12","flatInfo":null}},{"servicePointInfo":{"cplID":"CPL789","klsID":26035132,"type":"Gebaeudeteil","state":"FREI","stateText":"Freier Service Point","plannedDisconnectDate":null,"recentInfo":{"firstName":null,"surname":null,"MSN0":null}},"buildingInfo":{"type":null,"typeText":null,"part":"VH","partText":"Vorderhaus","partNumber":null,"partInfo":"#notnull","partAlignment":null,"level":null,"levelText":null,"levelNumber":null,"floor":null,"floorText":null,"flatNumber":null,"flatInfo":null}}]', reason: not equal

有人也经历过这样的行为吗? 干杯

--根据@Peter的回答进行编辑--

这是我当前的 build.gradle:

version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
   mavenCentral()
}

sourceSets {
    test {
        resources {
            srcDir file('src/test/java')
            exclude '**/*.java'
        }
    }
 }


dependencies {
    testCompile('com.intuit.karate:karate-apache:0.8.0.RC3')
    testCompile('com.intuit.karate:karate-junit4:0.8.0.RC3')
    testCompile('net.masterthought:cucumber-reporting:3.8.0')
    testCompile('org.apache.commons:commons-text:1.3')
    testCompile('com.googlecode.json-simple:json-simple:1.1.1')
}

test.dependsOn clean

【问题讨论】:

    标签: karate


    【解决方案1】:

    不用担心,强制 maven surefire 插件为 UTF-8 应该可以解决这个问题,记录在这里:https://github.com/intuit/karate#fileencoding

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.10</version>
        <configuration>
            <argLine>-Dfile.encoding=UTF-8</argLine>
        </configuration>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多