Javascript 在响应数组中查找关键字的Postman测试

Javascript 在响应数组中查找关键字的Postman测试,javascript,postman,postman-collection-runner,postman-testcase,Javascript,Postman,Postman Collection Runner,Postman Testcase,我正在postman中创建一个测试,以检查JSON中每个“名称”字段中的关键字“怀孕”。如果JSON中的每个“name”字段都包含关键字,则通过测试,否则失败 在下面找到我尝试使用的脚本 var jsonData = pm.response.json(); var resultCount = jsonData.length; for (i=0;i<resultCount;i++){ var modelString = jsonData[i].name; if(model

我正在postman中创建一个测试,以检查JSON中每个“名称”字段中的关键字“怀孕”。如果JSON中的每个“name”字段都包含关键字,则通过测试,否则失败

在下面找到我尝试使用的脚本

var jsonData = pm.response.json(); 

var resultCount = jsonData.length;
for (i=0;i<resultCount;i++){
    var modelString = jsonData[i].name;
    if(modelString.indexOf("Pregnancy") > 0)
    {
       tests["Each organisation name field " +i+ " contains   \"Pregnancy\""] = modelString.has("Pregnancy");
    }
    else
    {
       pm.expect.fail("failed");
    }
}
console.log("")

[
    {
        "id": "1-116992830",
        "name": "British Pregnancy Advisory Service      (BPAS)",
        "numberOfLocations": 78
    },
    {
        "id": "1-1560082724",
        "name": "PAMS Pregnancy Ultrasound Centre      (PAMS 3D &     4D Baby Imaging)",
        "numberOfLocations": 1
    },
    {
        "id": "1-2458518720",
        "name": "Pregnancy Ultrasound Ltd      (Babyface4d)",
        "numberOfLocations": 1
    },
    {
        "id": "1-101728376",
        "name": "National Unplanned Pregnancy Advisory Service     Limited",
        "numberOfLocations": 23
    },
    {
        "id": "1-3578030817",
        "name": "Private Pregnancy Ultrasound Services Ltd trading as Expectancy Scanning Studios Ltd      (Expectancy Scanning Studios Ltd)",
        "numberOfLocations": 2
    },
    {
        "id": "1-1412821832",
        "name": "Foundation For Life (Salisbury)      (Pregnancy Advice Salisbury)",
        "numberOfLocations": 1
    },
    {
        "id": "1-2028907839",
        "name": "Miscarriage Clinic Limited      (Centre for     Reproductive Immunolgy and Pregnancy)",
        "numberOfLocations": 1
    },
    {
        "id": "1-744810951",
        "name": "Foundation For Life      (Tyneside Pregnancy Advice Centre)",
        "numberOfLocations": 1
    }
]
var jsonData=pm.response.json();
var resultCount=jsonData.length;
对于(i=0;i=0)
{
测试[“每个组织名称字段”+i+“包含\“怀孕\]”]=modelString.has(“怀孕”);
}
其他的
{
pm.expect.fail(“失败”);
}
}
console.log(“”)
[
{
“id”:“1-116992830”,
“名称”:“英国妊娠咨询服务(BPAS)”,
“地点数目”:78
},
{
“id”:“1-1560082724”,
“名称”:“PAMS妊娠超声中心(PAMS 3D和4D婴儿成像)”,
“numberOfLocations”:1
},
{
“id”:“1-2458518720”,
“名称”:“妊娠超声有限公司(Babyface4d)”,
“numberOfLocations”:1
},
{
“id”:“1-101728376”,
“名称”:“全国计划外怀孕咨询服务有限公司”,
「地点数目」:23
},
{
“id”:“1-3578030817”,
“名称”:“私人妊娠超声服务有限公司,以Expection扫描工作室有限公司(Expection扫描工作室有限公司)的名义经营”,
“位置数”:2
},
{
“id”:“1-1412821832”,
“名称”:“生命基金会(索尔兹伯里)(索尔兹伯里怀孕建议)”,
“numberOfLocations”:1
},
{
“id”:“1-2028907839”,
“名称”:“流产诊所有限公司(生殖免疫和怀孕中心)”,
“numberOfLocations”:1
},
{
“id”:“1-744810951”,
“名称”:“生命基金会(泰恩赛德妊娠咨询中心)”,
“numberOfLocations”:1
}
]
我所期望的是,如果每个数组字段中缺少“怀孕”,那么测试应该会失败。

我添加了JSON来创建一个API以在Postman下进行测试,并在数组中添加了一个名称中没有“怀孕”一词的附加对象,以便您可以看到测试正在进行

如果您在
对象中循环并检查单词“怀孕”的
名称
属性,并存储在
haspregage
数组中找到的对象
,然后,您可以对照API响应对象数组的
长度
检查
数组的
长度
,查看每个
对象是否确实包含关键字“怀孕”

下面是我在测试中使用的JS代码。我还将您的
indexOf
更新为
includes
,因为您应该使用indexOf
查找
-1。我还使
name
上的
modelString
变量应用
toLowerCase()
,以确保检查不涉及大小写等

//获取响应
var jsonData=pm.response.json();
var resultCount=jsonData.length;
//测试阵列
var=[];
var DoesnthavePregregation=[];
//循环并使用匹配数据设置数组
对于(i=0;i
使用ES6 reduce函数,在迭代响应时,该函数会累积每个项目名称是否包含“怀孕”的结果

const jsonData = pm.response.json();
tests[`Each organisation name field contains \"Pregnancy\"`] = jsonData
  .reduce((acc, org) => acc && org.name.toLowerCase().includes("pregnancy"));
  • 您会发现,像map和reduce这样的ES6函数通常更具表现力
  • 使用
    inlcudes
    indexOf
  • 我添加了
    toLowerCase()
    ,因此匹配项不区分大小写


你到底有什么问题?首先,我将把搜索查询和正在测试的字符串转换为小写,以便indexOf方法同时适用于“怀孕”和“怀孕”。此外,字符串“pregnage”可以位于索引0处,因此您应该检查它是否大于-1。不客气。如果这个答案对你有用,请接受。非常感谢。谢谢你的回答,这对我也有帮助。。问:若你们想要一个有怀孕的人的数目和一个并没有怀孕的人的数目怎么办。。因为在我的测试中,我想得到包含它的对象的id,因为不是所有对象都包含它…谢谢