当前位置: 首页 > 知识库问答 >
问题:

空手道API框架有没有迭代子值的方法

通寂离
2023-03-14

我的方法取得了90%的成功,但当响应在一个子键中有多个条目时,逻辑就会失败,我无法将一个通用逻辑放在适当的位置,该逻辑将在所有情况下运行。

响应样本为

{
  "items": [
             {
              "id":1,
              "name": "John",
              "sections": [
                          { 
                           "id":1,
                           "description": "John smith" 
                          }
                      ]
           }
         ]
}

现在,我的用例说您搜索John文本,然后items数组将包含许多对象,这些对象的项是。名称或项目。部分。说明应包含“John”关键字

我放置的匹配逻辑运行良好,因为我正在迭代项[]。名称和项目。第[]节。描述

主要的挑战来自于[*]节。说明包含如下所示的多个部分

{
  "items": [
             {
              "id":1,
              "name": "John",
              "sections": [
                          { 
                           "id":1,
                           "description": "John smith" 
                          },
                          { 
                           "id":1,
                           "description": "remain smith of the first object" 
                          }
                      ]
           }
         ]
}

逻辑现在应该适用于项目[]。名称或项目。第[]节。说明(章节[*]的多个条目。说明)

我面临的问题是当我迭代项[]时。名称

它给了我所有的名字和所有的章节。在单独的数组中的描述我想要的是它应该一个接一个地给我。

例如,第一个结果集应提供以下信息

[
"John"
]

and 

[
"John smith"
"remain smith of the first object" 
]

这样我就可以运行现有的逻辑来检查John是否可用。当前,我的逻辑在描述的第一个条目上运行,它不会检查下一个条目或部分。描述,这是以下匹配对象失败的原因,因为“john”出现在描述的第二个条目中

{
  "items": [
             {
              "id":11,
              "name": "SMITH",
              "sections": [
                          { 
                           "id":11,
                           "description": "SMITH" 
                          },
                          { 
                           "id":11,
                           "description": "JOHN Carter" 
                          }
                      ]
           }
         ]
}

我目前使用的匹配逻辑是-

* def matchText = 
"""
function (nameArr, sectionArr, matchingWord)
{
for(var i = 0; i < nameArr.length; i++)
var regEx = new RegExp(matchingWord, 'gi')
var nameMatch = nameArr[i].match(regEx)
var secMatch = sectionArr[i].match(regEx)
if (nameMatch ==null && secMatch == null) {
return false;
}
}
return true;
}
"""
* def getName = get response.items[*].name
* def getDescription = get response.items[*].sections[*].description
* assert matchText(getName,getDescription,'john')

所以,当名称中的长度相同时,这种逻辑就起作用了

共有1个答案

赵志
2023-03-14

示例代码:

Feature: Validation

    Scenario:
        * def resp =
            """
            {
                "items": [
                    {
                        "id": 11,
                        "name": "JOHN",
                        "sections": [
                            {
                                "id": 11,
                                "description": "SMITH"
                            },
                            {
                                "id": 11,
                                "description": "JOHN Carter"
                            }
                        ]
                    }
                ]
            }
            """
    * def names = []
    * def fun =
        """
        function(x){ 
            var json  = x.sections; 
            var temp = x.name
            for(var i = 0; i < json.length; i++) {
                var obj = json[i];
                temp = temp + "," + obj.description
            }                
             karate.appendTo(names, temp);
            }
        """
    * def items = get resp.items[*]
    * karate.forEach(items, fun)
    * match each names == '#regex .*JOHN.*'
 类似资料:
  • 我是银行领域帐户的自动化测试员。我有个问题需要你的帮助。 当前的方法: 1.我们用于API服务测试的框架是使用RESS assured的基于Java的Serenity-Cucumber框架。 2.与该框架相关的所有脚本开发/脚本维护活动都由我们团队中的自动化测试人员负责。 3.几周前,我们了解了空手道框架并完成了PoC(概念验证)。 4.一切顺利,我们正在计划迁移现有的RESS assured J

  • 我有很多图像在绘制,我希望放入一个数组。手动将它们放入数组会花费太长的时间和代码。我想知道是否有一种方法来循环,如下所示:

  • 我95%的自动化框架是在空手道,工作得很好。我们需要检查应用程序日志中显示的中间结果的功能很少(不在Json响应中)。我写了一个外壳脚本,它在从邮递员手动发送请求后验证Linux机器上的应用程序日志。我使用eclipse的JSCH库调用这个脚本。 有没有什么方法可以让我从空手道发送请求,然后调用我的JSCH类进行验证,这样就可以避免手动发送请求的步骤? 谢谢,阿比

  • 我有以下API响应样本 根据上面的回答,我的测试表明,每当我点击API请求时,第11个ID是SMITH,第10个ID是JAMES 所以我想把它存储在一个表中,并根据实际的响应进行断言 现在我该如何一个接一个地匹配?与first类似,它解析API响应中的第一个ID和第一个名称,并与表first ID和表first name匹配 请分享从空手道做它的任何方便的方式

  • 我在空手道场景中编写了javascript函数,该函数在参数中接受当前日期并获取日期、年份、月份并将它们添加到数组中。但是由于某种未知的原因,我得到了NaN值。请参阅下面我一直在使用的空手道步骤。 注意,如果我在js执行环境中执行,例如sublime text,类似的javascript代码也适用于我。

  • 我在升级cucumber和空手道版本后得到了以下例外情况。 下面是我的启动器/运行器: 空手道和cucumber依赖: 我试过用JUnit运行,但没有运气!我该如何处理这个问题?