json - 空手道框架中基于子字符串存在的 Json 响应验证
问题描述
我正在尝试根据条件验证具有可选键的 JSON。Json响应如下:
{ "hits": [
{
"_type": "sessions",
"_source": {
"movie_name": "The Greatest Showman (U/A) - English",
"session_data": {
"freeSeating": false,
"mandatoryItems": [],
"areas": [
{
"seatingType": "fixed"
},
{
"seatingType": "free"
},
{
"seatingType": "mixed"
}
]
}
}
},
{
"_type": "sessions",
"_source": {
"movie_name": "The Greatest Showman (U/A) - English",
"session_data": {
"freeSeating": false,
"mandatoryItems": [],
"areas": [
{
"seatingType": "fixed"
},
{
"seatingType": "free"
}
]
}
}
},
{
"_type": "sessions",
"_source": {
"movie_name": "The Greatest Showman 3D (U/A) - English",
"session_data": {
"freeSeating": false,
"mandatoryItems": [
{
"quantity": 1,
"level": "ticket",
"price": 30,
"type": "3dglasses"
}
],
"areas": [
{
"seatingType": "fixed"
}
]
}
}
}
]
}
如果movie_name 中包含“3D”,则mandatoryItems = [{“quantity”:1,“level”:“ticket”,“price”:30,“type”:“3dglasses”}]
如果movie_name 中不包含“3D”,则mandatoryItems = []
我想在我的功能文件中实现上述断言。
注意: “movie_name”和“mandatoryItems”存在于数组的每个元素中。所以我想在整个数组上断言这个条件。
提前致谢!!
解决方案
抱歉@Peter 给我带来的不便。我通过引用所有可能的来源来处理这个问题陈述,并编写了以下代码,这给了我想要的输出:
Given url api_url
When method Get
And def mandatoryItems_present =
"""
{
"quantity": 1,
"level": "ticket",
"price": '#number',
"type": "3dglasses",
}
"""
Then status 200
And print response
And def source_list = karate.jsonPath(response, '$.._source')
And print source_list
And match each source_list[*].session_data contains {'freeSeating': '#boolean','mandatoryItems':'##[] mandatoryItems_present'}
And def movie_names = get source_list[*].movie_name
And def mandatoryItems_list = get source_list[*].session_data.mandatoryItems
And def name_size = names.size();
And print name_size
And def threeD_movie_list = new ArrayList()
And eval for(var i = 0; i < name_size; i++) {if (names[i].match('3D')) threeD_movie_list.add(names[i])}
And print threeD_movie_list
And def threeD_movies_array_size = threeD_movie_list.size();
And print threeD_movies_array_size
And print expected
And def expected = (threeD_movies_array_size == 0 ? {"mandatoryItems" : []} : {'mandatoryItems' : [mandatoryItems_present]} )
And print expected
And match each response.hits[*]._source.session_data[*].mandatoryItems == expected
请让我知道这种方法是否正确。
推荐阅读
- java - 如何使用 JavaPoet 构造具有自定义类型的枚举
- python - 不能给 Python 函数一个空列表抛出“TypeError”
- google-cloud-platform - GCP cloudbuild.yaml:kmsKeyName 需要硬编码值。我们如何适应不同的环境?
- flutter - 单击另一个小部件时如何使一个小部件消失?
- revit-api - 是什么导致 Revit 中的“加载文件时出现架构冲突”?
- android - SELinux:上下文 u:object_r:usb-update_exec:s0 无效(未映射)
- google-sheets - 运行列最小值的数组公式,不包括上述行
- javascript - 从 3xx 获取重定向位置 (URL):使用 Web 扩展重定向 HTTP 响应
- jquery - 尝试向测验添加提交按钮
- php - 公共文件夹中的文件不显示 [Laravel]