请求正文中的动态文件



我正在玩空手道来测试一种接受不可能过去的日期的资源。

Scenario: Schedule one
Given path '/schedules'
And request read('today_at_19h30.json')
When method post
Then status 201

我为每个场景创建了一些 JSON 文件(大部分是重复的,但有细微的变化(。但是我无法认真想象每次我想运行测试时更改所有这些日期。

在遥远的未来使用日期不是一个好主意,因为有一些手动验证,这将迫使我们点击(下一个(太多次。

有没有办法在文件中包含变量或表达式?

谢谢

有多种方法可以在空手道中"破坏"JSON数据。一种方法是只使用 JS 表达式。例如:

* def foo = { a: 1 }
* foo.a = 2
* match foo == { a: 2 }

对于您的特定用例,我怀疑嵌入式表达式将是更优雅的方式。嵌入式表达式的优点在于它们与read()API 结合使用。

例如,文件test.json的内容{ "today": "#(today)" }

Background:
* def getToday =
"""
function() {
var SimpleDateFormat = Java.type('java.text.SimpleDateFormat');
var sdf = new SimpleDateFormat('yyyy/MM/dd');
var date = new java.util.Date();
return sdf.format(date);
}
"""
Scenario:
* def today = getToday()
* def foo = read('test.json')
* print foo

这导致:

Running com.intuit.karate.junit4.dev.TestRunner
20:19:20.957 [main] INFO  com.intuit.karate - [print] {
"today": "2020/01/22"
}

顺便说一下,如果定义了getToday函数,您甚至可以这样做:{ "today": "#(getToday())" }.这可能会给你更多的想法。

最新更新