我使用空手道框架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:“引用”是错误的复制粘贴。对此表示抱歉。
更新:
经过调查,完全相同的测试在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:打印