【问题标题】:HP ALM file attachmentHP ALM 文件附件
【发布时间】:2020-10-19 13:31:30
【问题描述】:

我正在使用 Java 中的 REST 保证 hp-alm 的 API 自动化。我正在尝试将附件上传到创建的运行实例。

urlheaders.put("Content-Type", "multipart/form-data");
File file = new File("H:\\Desktop\\a.zip");
RequestSpecification httpRequest14 = RestAssured.given().headers(urlheaders).cookies(loginCookies).cookies(sessionCookies).multiPart( "file", file, "multipart/form-data");
Response attachment = httpRequest14.request(Method.POST,"/qcbin/rest/domains/d/projects/p/runs/13634/attachments");
String attachmentResponseBody = attachment.getBody().asString();
//logger.info("attachment Response Body is =>  " + attachmentResponseBody);
statusCode = attachment.getStatusCode();
logger.info("The attachment status code recieved: " + statusCode);

状态码为500,错误为:

应提供文件名和内容。

错误是什么意思?谁能告诉我的代码有什么问题?

<div id="content-holder">
    <h1>File name and content should be supplied</h1>
    <div>
        <tr>
            <td><a id="exception-id-title">Exception Id:</a></td>
            <td>qccore.general-error</td>
        </tr>
    </div>
</div>

除了使用放心获得所需的输出之外,还有其他方法吗?

【问题讨论】:

    标签: java attachment multipart rest-assured alm


    【解决方案1】:

    您的多部分请求不正确,您至少需要提供两部分:一份包含文件名,另一份包含文件本身。

    或者您可以改用application/octet-stream Content-Type。 请参阅official docs 中的示例。

    编辑:工作代码:RestAssured.given().headers(urlheaders).cookies(loginCookies).cookies(sessionCookies).body(file); 并且 urlheaders 必须包含:

    • Content-Type = application/octet-stream
    • Slug = 文件名

    【讨论】:

    • 我已经看过官方文档了,但是不能完全理解。根据我的理解,我已经编写了上面的代码。你能详细说明如何做吗?谢谢
    • 没用过RestAssured,但一般你需要传递'Content-Type' header == 'application/octet-stream', 'Slug'== 文件名并将你的文件放入request身体
    • 我要上传的文件将由AUT的截图组成。以及如何将文件放入正文?除了放心,怎么上传附件??
    • 也许,body(new File("..."))?
    • RequestSpecification httpRequest14 = RestAssured.given().headers(urlheaders).cookies(loginCookies).cookies(sessionCookies).multiPart("file", file, "multipart/form-data").body (文件);按照您所说的对请求进行更改后,现在它给出了 415 错误代码 - 不支持的媒体类型。任何其他上传文件的方法,除了放心
    【解决方案2】:

    按照 Sergi 的建议, 解决办法是:

                        File file = new File(filePath);
                        urlheaders.put("slug", file.getName());
                        RequestSpecification httpRequest14 = RestAssured.given().headers(urlheaders).cookies(loginCookies).cookies(sessionCookies).body(file);
                        Response attachment = httpRequest14.request(Method.POST,"/qcbin/rest/domains/"+domain+"/projects/"+project+"/runs/"+stepID+"/attachments");
                        String attachmentResponseBody = attachment.getBody().asString();
                        logger.info("attachment Response Body is =>  " + attachmentResponseBody);
                        statusCode = attachment.getStatusCode();
                        logger.info("The attachment status code recieved: " + statusCode);
    
    This will add the attachment to the run instance.
    Thank You Sergi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多