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

空手道API:在附加的json响应中如何动态更新json属性数量

夏知
2023-03-14

在下面的json响应中,我想更新所有ProductNumber的数量,响应中的Item count可能是1或大于1,这取决于输入。我怎么能在空手道中做到这一点。我尝试了我的方法,但它不起作用,因此请提供解决方案。(我在下面提供了我的方法,如果是错误的方法,请忽略)

  {
"userProfileId": "12313123123",
"items": {
    "47961": {
        "products": {
            "productNumber": "0000",
            "productSummary": {
                "productSubTotal": "$68.64",
                "quantity": 3,
                "productrice": "$22.88"
            }
        }
    },
    "47962": {
        "products": {
            "productNumber": "12345",
            "productSummary": {
                "productSubTotal": "$68.64",
                "quantity": 3,
                "productPrice": "$22.88"
            }
        }
    },
    "47963": {
        "products": {
            "productNumber": "1111",
            "productSummary": {
                "productSubTotal": "$68.64",
                "quantity": 3,
                "productPrice": "$22.88"
            }
        }
    },
    "47964": {
        "products": {
            "productNumber": "2222",
            "productSummary": {
                "productSubTotal": "$68.64",
                "quantity": 3,
                "productPrice": "$22.88"
            }
        }
    }
}
}

我通过创建JS文件并将所需的值传递给它,尝试使用下面的方法,但当我尝试使用java脚本调用功能文件时失败了。(可能是我打电话的方式不对)

Feature: Update
Scenario: Update all items in cart
* print 'config in called function '+upConfig
* print 'in called function '+orderItemIDs
* def updateAttempt =
"""
  function(productNumbers,upConfig,firstOrderID){
    for(i=0;i<orderItemIDs.length;i++){
      karate.log('Run test round: '+(i+1));
      var itemID = productNumbers[i];
      karate.log('Order Item IDs :'+productNumbers[i]);
      karate.log('Config log-'+upConfig);
       karate.log('firstOrderItemID-'+firstOrderID);
       karate.call('UpdateProductQuantity.feature') upConfig;
      }
    java.lang.Thread.sleep(1*1000);
  }
"""
* def itemPrice = call updateAttempt(orderItemIDs,upConfig,firstOrderID)


   Feature: test update

 Scenario Outline: Update with all values
* def encodedURL = ''
* def gID = ''
* def upConfig = ''
* def firstOrderItemID = [47961]
* json productNumbers= orderItemIDs
* print 'productNumbers--'+orderItemIDs
* def list = call read('Update.feature') upConfig
* def result = call list productNumbers
* def result = call result firstOrderItemID
* print 'Result -'+result.response

共有1个答案

杭昊空
2023-03-14

干得好:

* def response = 
"""
{
   "userProfileId":"12313123123",
   "items": {
      "47961": {
         "products": {
            "productNumber":"0000",
            "productSummary": {
               "productSubTotal":"$68.64",
               "quantity":3,
               "productPrice":"$22.88"
            }
         }
      },
      "47962": {
         "products": {
            "productNumber":"12345",
            "productSummary": {
               "productSubTotal":"$68.64",
               "quantity":3,
               "productPrice":"$22.88"
            }
         }
      }
   }
}
"""
* def fun = function(k, v){ response.items[k].products.productSummary.quantity = 100 }
* eval karate.forEach(response.items, fun)
* match each response..quantity == 100
 类似资料:
  • 如何从空手道API中的json响应中检索数值? 在这里我想检索41651625424这个值在一个变量因为我必须通过这作为输入在另一个请求体

  • 下面是我在点击特定Web服务时收到的JSON响应: 我不知道哪个索引有我的期望值(我需要在确定哪个具有)后验证多个值),这是动态的。不希望使用硬编码值。并匹配,因为这将在下次更改。 对此我有两个问题: 如何将响应传递给java代码并获取具有的数组索引,以便使用此索引进行验证? 下面的代码不起作用。

  • 我想提取一些值并以JSON格式存储在数组中。 我有我的代码在karate-config.js文件中,因为我调用的API只需要调用一次,结果需要存储在数组中,以便以后可以在其他功能中使用。 结果 预期结果

  • 任何人都可以在空手道API中如何部分下面的响应 这里我想从响应中提取partNumber和productTitle,其中响应中的初始数字是动态的,对于每个get方法,数字都会发生变化。 {"项目":{'41651625424':{itemCore:{部件号:'1234567',产品名称:'空手道API测试'}}}}

  • 我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?

  • 我试图验证非json格式的错误响应体。我尝试了使用模式以及使用包含匹配的关键字。这对我不起作用。 在post调用中观察到多个匹配时从API返回的实际响应: 我的空手道特点: 尝试*匹配实际的[0] == '#(^partSchema)'也从https://gist.github.com/ptrthomas/2a1e30bcb4d782279019b3d5c10b3ed1。不工作