javascript - 空手道 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”,
解决方案
这看起来像一个错误。创建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)'}
推荐阅读
- cmake - Cmake 中的 find_path 不适用于简单的示例,
- node.js - 尽管被忽略,Git 仍在提交 node_modules
- c# - 增加 .net core 3.1 中的令牌寿命
- c - 错误:下标值不是数组、指针或向量
- eclipse - CLI:用 Eclipse 比较两个文件?
- typescript - Vue 3 Typescript 类组件 - 类型 'typeof import(.../node_modules/vue/dist/vue")' 不是构造函数类型
- laravel - Laravel Forge + Laravel-echo-server + Let's Encrypt:如何避免 ERR_CERT_DATE_INVALID
- php - PHP - array_push 创建多维数组
- ruby-on-rails - 通过 docker 容器上的 FFI 调用 C 方法时出现分段错误
- keycloak - Keycloak RestAPI:将客户端角色分配给组