我目前正在使用Swagger模式,该模式为多个值定义枚举。我想知道如何对我的草率文件做出回应。我想确保返回的响应值只是模式中指定的值之一(想想Swagger中的枚举)。如果响应中返回的任何其他内容(在架构内的数组中未定义)都将失败。
如何使用以下方法实现此目标:
Schema.json
{
"itemType":{
"hardware":[
"VIDEO CARD",
"SOLID STATE DRIVE",
"HARD DRIVE"
]
}
}
所有值都是可选的,并将以字符串值作为响应。
响应:
{
"itemType": {
"hardware": "HARD DRIVE"
}
}
我的猜测是它可能与* match response.itemType.hardware == "##string? _ == 'VIDEO CARD' || _ == 'SOLID STATE DRIVE' || _ == 'HARD DRIVE'"
相似,但是我的语法可能不正确。
答案 0 :(得分:2)
您可以尝试以下方法:
diff_list = diff.split("\n")
first_serotype_line_nbr = 0
for n,line in enumerate(diff_list):
if "predicted_serotype" in line:
if first_serotype_line_nbr == 0:
first_serotype_line_nbr = n
else:
diff_list[first_serotype_line_nbr] += line.rstrip()
del(diff_list[n])
else:
diff_list[n]=line.rstrip()
print("\n".join(diff_list))
答案 1 :(得分:1)
我觉得这更具可读性:
* match schema.itemType.hardware contains response.itemType.hardware
右侧有response
可能有点不寻常。
答案 2 :(得分:1)
另一种验证方式是使用匹配器。使用 JSON 路径,您可以获取元素中的所有内容,并借助 comparison operators
的帮助,例如 contains、仅包含 和 !contains 检查字符串列表中是否存在某些元素。例如,在您的情况下:
Scenario:
Given path '/something'
When method GET
Then status 200
And print response
And match response.itemType.hardware[*] contains only ["value1", "value2"]
以这种方式更清楚地编写您的测试。更具可读性。
<块引用>注意:考虑到 contains
运算符仅适用于列表,因此您需要获取列表。在前面的例子中,我们使用 * 符号来做到这一点。