如何在空手道中使用 FileUtils?

Posted

技术标签:

【中文标题】如何在空手道中使用 FileUtils?【英文标题】:how to use FileUtils in Karate? 【发布时间】:2022-01-17 12:39:59 【问题描述】:

需要将编码后的字符串转换生成PDF并保存为pdf进行比较。

示例功能文件:

Feature: Compute All  

Scenario: trial and error
* call read('common.feature')
* def xyz = getMDash( 'my password')
* print xyz
* call read('classpath:/test/java/com/intuit/karate/FileUtils.java')



* def doWork =
"""
function('temp.txt','hello world') 
  var JavaDemo = Java.type('com.intuit.karate.FileUtils');
  var jd = new JavaDemo();
  jd.writeToFile('temp.txt','hello world');  

"""

* def result = call writeToFile 'temp.txt','hello world'


* def FileUtils = Java.type('com.intuit.karate.FileUtils')
* def result = FileUtils.writeToFile('temp.txt','hello world')

使用给定的示例。

日志错误:

Tests run: 9, Failures: 0, Errors: 2, Skipped: 3, Time elapsed: 1.314 sec <<< FAILURE!
* def doWork =(Scenario: trial and error)  Time elapsed: 0 sec  <<< ERROR!
java.lang.RuntimeException: javascript evaluation failed: function('temp.txt','hello world') 
  var JavaDemo = Java.type('com.intuit.karate.FileUtils');
  var jd = new JavaDemo();
  jd.writeToFile('temp.txt','hello world');

at com.intuit.karate.ScriptBindings.eval(ScriptBindings.java:115)
at com.intuit.karate.ScriptBindings.updateBindingsAndEval(ScriptBindings.java:103)
at com.intuit.karate.ScriptBindings.evalInNashorn(ScriptBindings.java:88)
at com.intuit.karate.Script.evalJsExpression(Script.java:362)
at com.intuit.karate.Script.evalKarateExpression(Script.java:284)
at com.intuit.karate.Script.evalKarateExpression(Script.java:170)
at com.intuit.karate.Script.assign(Script.java:598)
at com.intuit.karate.Script.assign(Script.java:524)
at com.intuit.karate.StepDefs.def(StepDefs.java:305)
at com.intuit.karate.StepDefs.defDocString(StepDefs.java:300)
at ?.* def doWork =(testSuite/users/dummy.feature:11)
**Caused by: javax.script.ScriptException**: <eval>:1:10 Expected ident but found temp.txt
function('temp.txt','hello world')

需要有关在空手道中使用 fileUtils 的帮助。

【问题讨论】:

【参考方案1】:

空手道不支持写入文件,因为这是不好的做法。我不知道您在上面要做什么。通常您通过将响应保存在内存中来进行比较,请参阅文件上传示例:https://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/upload/upload.feature

同样的例子还有一个使用自定义 Java 类的例子。如果您确实需要向文件中写入内容,请使用上述代码编写您自己的实用程序,并使用com.intuit.karate.demo.util.FileChecker 作为参考。

【讨论】:

我们作为响应接收到的 json 文件,其中的有效负载有一个字段是编码的 pdf。该字符串正在更改,因为它还嵌入了日期。要检查该字段的正确性,我需要解码字符串并将其保存为 pdf 以将其与基线进行比较(忽略日期)。除非,有任何其他可能的方法来检查它。 @Shubs - 无论如何你必须编写自定义比较,听起来像 Java 代码。您需要做的就是获取基线字符串,然后与该响应字段进行相等匹配。无需保存文件。 我还需要从响应中提取特定字段,以对其执行解码操作。 @Shubs 你的问题是?好的,但是认真地将字段提取到变量中以供以后检查是空手道的核心能力之一。请看例子。天哪

以上是关于如何在空手道中使用 FileUtils?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在空手道 UI 中使用 javascript 执行器

如何在空手道中使用变量作为json键?

如何在空手道框架中运行特定数量的特征文件?

如何在空手道上集成 socket.io

如何将黄瓜报告实用程序与空手道框架相结合?

如何在空手道 UI 测试中启用 acceptInsecureCerts