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

com.intuit.karate.exception.karateeexception:原因:不是子字符串

沈旻
2023-03-14

我使用空手道框架V0.7.0来执行一些自动API测试。

我有一个测试在以下场景中返回异常com.intuit.karate.exception.KarateExcture:原因:不是一个子字符串

下面是以下场景:

Scenario Outline: Put a number, and check the JSON response body.

Given path '/number/check/'
And param serial = '<number>'
When method GET
Then status 200
And match $ contains {"uid":"#uuid","reference":"#notnull","type":"#notnull","name":"#notnull","description":"#notnull","imageUrl":"#notnull","color":"<color>","reason":"<reason>"}

Examples:

  | number | color | reason |
  # Case 1
  |  1234 | RED   | INITIAL_WARRANTY_EXPIRED                  |
  # Case 2
  |  5678 | RED   | INELIGIBLE_PRODUCT_FAMILY                 |
  # Case 3
  |  9012 | RED   | ALREADY_EXTENDED                          |

情况1和2正确通过。

案例3返回以下内容:

StackTrace:
com.intuit.karate.exception.KarateException: path: $, actual: '[{"uid":"2cd897fd-1421-4c02-b594-6ee0de38db3d","reference":"a random reference","type":"a random type","name":"a random name","description":"a random description","imageUrl":"a random image url","color":"RED","reason":"ALREADY_EXTENDED"}]', expected: '{"uid":"#uuid","reference":"#notnull","type":"#notnull","name":"#notnull","description":"#notnull","imageUrl":"#notnull","color":"RED","reason":"ALREADY_EXTENDED"}', reason: not a sub-string

at com.intuit.karate.StepDefs.matchNamed(StepDefs.java:540)

at com.intuit.karate.StepDefs.matchContains(StepDefs.java:532)

at ✽.And match $ contains {"uid":"#uuid","reference":"#notnull","type":"#notnull","name":"#notnull","description":"#notnull","imageUrl":"#notnull","color":"RED","reason":"ALREADY_EXTENDED"}

我手动检查过,这是案例3的JSON答案:

[{"uid":"2cd897fd-1421-4c02-b594-6ee0de38db3d","reference":"a random reference","type":"a random type","name":"a random name","description":"a random description","imageUrl":"a random image url","color":"RED","reason":"ALREADY_EXTENDED"}]

我不明白为什么只有案例3失败了。

有什么想法吗?

谢谢!

编辑1:“引用”是错误的复制粘贴。对此表示抱歉。

共有1个答案

国阳
2023-03-14

更新:

经过调查,完全相同的测试在JUnit启动时运行良好,但在使用Maven时运行不好。这是一个编码问题。

解决方法:在Surefire插件中使用以下方法强制编码:

<argLine>-Dfile.encoding=UTF-8</argLine>

在pom.xml中,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <includes>
            <include>api/TestParallel.java</include>
        </includes>
        <systemProperties>
             <cucumber.options>--tags ~@ignore</cucumber.options>
        </systemProperties>
        <argLine>${argLine} -Dfile.encoding=${project.build.sourceEncoding}</argLine>
     <configuration>
</plugin>

这里的文档:https://github.com/intuit/karate/tree/master#troubleshooting-cucumber-ide-support-

重要提示:如果您并行运行测试,并且使用以下方法切换环境:

mvn clean test -DargLine="-Dkarate.env=YOUR_ENV"

使用语法很重要...

<argLine>${argLine} -Dfile.encoding=${project.build.sourceEncoding}</argLine>

…而不仅仅是。。。

<argLine>-Dfile.encoding=${project.build.sourceEncoding}</argLine>

否则,Maven-DargLine将被POM.xml中的Maven-DargLine覆盖。

 类似资料:
  • *最后这是我在Intellij Idea控制台中的完整输出: 如果我错过了什么话请告诉我。非常感谢你的大力帮助。

  • 在这种情况下,字符串文本存储在只读存储器中。 在这种情况下,字符串文本存储在可写内存中。 为什么分配的内存与两个字符串文字有差异?

  • 我试图用Mac M1在Android studio Arctic fox 2020.3.1中构建基于Dagger2的Android项目,但我遇到了错误, 错误:找不到符号导入xxxx.com.xxxx.di。DaggerAppComponent;^符号:类别DaggerAppComponent 这也显示了 原因:java.lang.异常 同一个项目在另一台机器上工作(不是mac)。 此外,我无法在

  • 问题内容: 谁能告诉我异常产生的原因有哪些,与“ throws”子句不兼容 例如: 异常异常与Super.foo()中的throws子句不兼容 问题答案: 没有完整的代码示例,我只能猜测:您正在重写/实现子类中的方法,但是子类方法的异常规范与父类/接口方法的异常规范不兼容(即,不是其子集)? 如果声明基本方法根本不抛出异常,或者例如(这是您的方法的子类正在尝试在此处抛出),则可能发生这种情况。基类

  • 问题内容: 我见过很多人声称您应该在选择查询中专门为想要的每一列命名。 假设我仍然要使用所有列,为什么我不使用? 即使考虑问题* SQL查询-从视图选择或从视图*选择col1,col2,’colN,我也不认为这是完全相同的副本,因为我正从略有不同的观点着手解决这个问题。 我们的原则之一是在优化之前就不进行优化。考虑到这一点,在被证明是资源问题或架构几乎是固定的之前,似乎应该使用 首选的 方法。众所

  • 为什么在Java中不是原子的? 为了更深入地了解Java我试图计算线程中的循环执行的频率。 所以我用了 在主课上。 我有两条线。 线程1:打印