如何从空手道中的 api 端点获取下载的 xlsx 文件?

How to get the downloaded xlsx file from the api endpoint in karate?

我有一个端点可以下载 xlsx 文件。在我的测试中,我需要检查文件的内容(不是将文件与另一个文件进行比较,而是读取内容并检查)。我正在使用空手道框架进行测试,我正在尝试使用 apache POI 来处理 excel sheet。但是,我在调用下载端点时从 karate 得到的响应是一个字符串。要使用 POI 创建 excel 文件,我需要一个 InputStream 或实际文件的路径。我已经尝试过转换,但它不起作用。

我想我在这里遗漏了一些联系,或者转换不好,我是空手道和整个事情的新手。 感谢您的帮助,谢谢!

 Given url baseUrl
    Given path downloadURI
     When method GET
     Then status 200
    And match header Content-disposition contains 'attachment'
    And match header Content-disposition contains 'example.xlsx'
    And match header Content-Type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'

        * def value= FileChecker.createExcelFile(response)
        * print value

和 Java 代码:

public static String createExcelFile(String excel) throws IOException, InvalidFormatException {
        InputStream stream = IOUtils.toInputStream(excel, Charset.forName("UTF-8"));
        Workbook workbook = WorkbookFactory.create(stream);
        return ("Workbook has " + workbook.getNumberOfSheets() + " Sheets : ");
    }

当运行场景时,我得到以下错误: javascript evaluation failed: FileChecker.createExcelFile(response), java.io.IOException: Failed to read zip entry source

在 Postman 中测试同一个端点时,我得到一个有效的 excelsheet。

在空手道 0.9.X 之后,您有一个 responseBytes 变量,它将是原始字节,这可能是您需要的。

* def value = FileChecker.createExcelFile(responseBytes)

您可以将方法签名更改为:

public static String createExcelFile(byte[] excel) {}

您应该能够轻松地将字节数组转换为 InputStream 并从那里获取它。

P.S。只是说它“在 Postman 中工作”没有帮助:P

从空手道测试下载 zip 文件作为二进制位数组

场景:验证并从部署中获取 ADCI Uri 给定 url basicURL + DeployUri +ArtifactUri 并且 headers {authorization:'#(authToken)',accept:'application/json',tenant:'#(tenantUUId)',Content-Type:'application/zip'} 当方法得到 然后状态200 并且 def responsebytes = responseBytes