我有一个特性,我们称之为F1,它作为两个流返回一个和相同的文件:
* def aPdf1 = read('classpath:pdf.pdf')
* def aPdf2 = read('classpath:pdf.pdf')
* def out = { one: aPdf1, two: aPdf2 }
当我从另一个特性调用F1时,假设是F2,并比较这些流,它们不匹配:
* def out = call read('F1.feature')
* match out.aPdf1 == out.aPdf2
错误是:
com.intuit.karate.exception.KarateException:意外类型:类java.io.BufferedInputStream
这是个虫子吗?或者它是尚未实现的特性?
PS1:如果我将以下行添加到F1中,它将成功地完成:
* match aPdf1 == aPdf2
PS2:利用https://stackoverflow.com/questions/4245863/fast-way-to-compare-inputstreams答案中的代码,我能够匹配F2中的流。
发布于 2018-10-29 16:51:23
问题是,您已经创建了一个无效的JSON,它碰巧将二进制流作为值。只要坚持将溪流和溪流进行比较--这将像你已经看到的那样起作用。如果需要将PDF转换为字符串,可以这样做:
* string aPdf2 = read('classpath:pdf.pdf')
此外,您可能已经错过了嵌入式表达式和“封闭的javascript”之间的区别。你是有意这么做的吗?
* def out = ({ one: aPdf1, two: aPdf2 })
或者:
* def out = { one: '#(aPdf1)', two: '#(aPdf2)' }
此外,有关JSON和二进制值的更多上下文-请参阅以下答案:https://stackoverflow.com/a/52541026/143475
编辑:所以,如果您想比较两个流,您必须首先将它们转换为字节数组。尝试这样做,您就可以将您自己的流到字节转换器的实现划分为:
* def Utils = Java.type('com.intuit.karate.FileUtils')
* def stream1 = read('karate-logo.png')
* def bytes1 = Utils.toBytes(stream1)
* def stream2 = read('karate-logo.png')
* def bytes2 = Utils.toBytes(stream2)
* assert java.util.Arrays.equals(bytes1, bytes2)
EDIt -在较新版本的空手道中,您可以将其“强制转换”到bytes
,而match
关键字也支持字节数据。
https://stackoverflow.com/questions/53048448
复制相似问题