Проблема в том, что вы создали недопустимый 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)