Karate 空手道;匹配包含“匹配”;for xml的工作方式与JSON不同
我注意到,“match contains”用于检查另一个xml结构中是否包含与json对应的xml结构不同的xml结构。举个例子:Karate 空手道;匹配包含“匹配”;for xml的工作方式与JSON不同,karate,Karate,我注意到,“match contains”用于检查另一个xml结构中是否包含与json对应的xml结构不同的xml结构。举个例子: * def expectedResult = """ <?xml version="1.0" encoding="UTF-8"?> <response>
* def expectedResult =
"""
<?xml version="1.0" encoding="UTF-8"?>
<response>
<id>1</id>
<id>2</id>
<id>3</id>
</response>
"""
* header Accept = xml
Given path 'some\path'
When method GET
Then status 200
## If response contains -
## <response><id>1</id></response>
## The following match will fail with -
## "actual and expected arrays are not the same size - 1:3"
And match response contains expectedResult
*def expectedResult=
"""
1.
2.
3.
"""
*头接受=xml
给定路径“some\path”
当方法得到
然后状态200
##如果响应包含-
## 1
##以下匹配将失败,原因是-
##“实际数组和预期数组的大小不同-1:3”
匹配响应包含expectedResult
如果它是JSON结构,它将通过,因为1包含在1,2,3的列表中。但在XML中,它仍然在检查数组大小。这就是它的工作原理吗
更新:这与另一个问题不同。我试图将我拥有的引用XML文件与API返回的XML结构进行比较。您链接到的问题是比较JSON引用文件和XML响应。因此,这就引出了一个问题,在空手道中,我是否必须将我的引用XML和响应XML转换为json才能执行“包含”?XML与json有一些基本的“形状”差异。我让您自己去弄清楚,其中一个挑战是“根”标记的概念,而JSON没有。所以他们不会像你所期望的那样“匹配”
一个技巧-如果有疑问,将XML转换为JSON。以下是一个例子:
* def expected =
"""
<?xml version="1.0" encoding="UTF-8"?>
<response>
<id>1</id>
<id>2</id>
<id>3</id>
</response>
"""
* json temp = $expected/response
* match temp.response.id == ['1', '2', '3']
*需要def=
"""
1.
2.
3.
"""
*json temp=$expected/response
*匹配temp.response.id=['1','2','3']
我理解根标记的概念。让我困惑的是,为什么XML除了检查结构中是否包含给定元素外,还要检查元素的数量?转换JSON意味着不仅要转换来自API的响应,还要转换我用来与响应进行比较的大引用xml文件。我不希望您能按原样使用XML