首页 > 解决方案 > 空手道 DSL - 如何从 __arg 读取令牌字符串并在 json 请求中发送此字符串?

问题描述

如何从 __arg 读取令牌字符串并使用 Karate DSL 在 json 请求中发送此字符串?

将字符串标记值从第一个响应存储到 __arg

这很好用:

    Then match response.result.token == '#string'

    * def tokenPathInstance =
    """
    function() { karate.write(response.result.token, '__arg'); }
    """
    * def tokenPath = call tokenPathInstance

但是对于下一个 json 请求,我尝试了下一个代码,但这不适用于我的需要:

 def jsonInstance =
"""
function(token) {
  var DTO = Java.type('requestbody.DTO');
  var li = new DTO();
  li.setToken(token);
  return li.toJson();
}
"""
 def token = read('file:target/__arg')
 def reqBody = call jsonInstance token

我只在请求中看到:“token”:“java.io.FileInputStream@693dc9dc”,

标签: javascriptjavajsondslkarate

解决方案


这看起来像一个错误。创建https://github.com/intuit/karate/issues/1009

将未知(不是 json、yaml、csv aso.)读取资源嵌入到像 json 这样的纯 js 表达式中时,结果如下所示:

{
  "token": {
    "tokenParam": "java.io.FileInputStream@424bd12a"
  }
}

将令牌写入 txt 文件是一种解决方法。mime 类型检测只检查后缀。

以下场景应说明:

Scenario: Test to read/write within karate..
    * def token = 'xyz12345'
    * eval  karate.write(karate.get('token'), 'token.txt'); 
    * def tokenToJson = 
    """
      function(tokenParam) {
        return { token: tokenParam}
      }
    """

    * string tokenFromFile = read('file:target/token.txt')
    * def tokenAsJson = call tokenToJson tokenFromFile
    * print tokenAsJson
    * match tokenAsJson == {token: '#(token)'} 

推荐阅读