【问题标题】:How to call put method in REST assured如何在 REST 中调用 put 方法有保证
【发布时间】:2014-07-04 12:43:53
【问题描述】:

我有一个接受输入流的 put 方法。我想在 JUnit 中使用放心调用这个方法。

这是我用的:

with().body(inpustream).put("/service/1"); // i got error 404 forbidden.

【问题讨论】:

  • 404 表示未找到,403 表示已禁止。
  • 可能是 403,这可能表明网络服务器配置为不允许该请求方法。我完全可以理解,默认情况下不启用 PUT 和 DELETE 等不常见的功能以防止恶意意图。
  • 请告诉我如何使用放心调用put方法

标签: java web-services junit mockito rest-assured


【解决方案1】:

POST 将返回状态码 201,PUT 将返回 200,POST 将创建一个新资源,但 PUT 将更新现有资源。这意味着我们必须在 URI 本身中提及我们希望更新的资源,如下所示。

import io.restassured.RestAssured;
import static io.restassured.RestAssured.*;
import java.util.HashMap;
import java.util.Map;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import static org.hamcrest.Matchers.*;


public class PUTMethod {

    public static Map<String, String> map = new HashMap<String, String>();

    @BeforeTest
    public void putdata(){
        map.put("userId", "2");
        map.put("id", "19");
        map.put("title", "this is projectdebug.com");
        map.put("body", "i am testing REST api with REST-Assured and sending a PUT request.");  
        RestAssured.baseURI = "http://jsonplaceholder.typicode.com";
        RestAssured.basePath = "/posts/";
    }

    @Test
    public void testPUT(){
        given()
        .contentType("application/json")
        .body(map)
        .when()
        .put("/100")
        .then()
        .statusCode(200)
        .and()
        .body("title", equalTo("this is projectdebug.com"));        
    }
 }

访问http://www.projectdebug.com/send-put-request-using-rest-assured/ 了解更多信息。

【讨论】:

    【解决方案2】:

    实际上,您做得很好,但是通过 PUT 发送多部分是不安全的,而且非常随机 (https://jira.spring.io/browse/SPR-9079)。修改您的 spring-security.xml 以添加过滤器或在这种情况下使用 POST 方法。

    您也可以通过调用另一个没有流的 PUT 网络服务来尝试您的代码。

    (错误代码是什么?404还是403?)

    使用 MultipartFilter 解决的类似问题:Spring 3.0 FileUpload only with POST?

    【讨论】:

      【解决方案3】:

      看看下面的例子,它解释了如何使用 Rest Assured 来使用 PUT 请求:

      import org.testng.Assert;
      import org.testng.annotations.BeforeClass;
      import org.testng.annotations.Test;
      import static com.jayway.restassured.RestAssured.*;
      import com.jayway.restassured.RestAssured;
      import com.jayway.restassured.response.Response;
      
      public class GetStatusCodeTest {
        @BeforeClass
        public void setBaseUri () {
          RestAssured.baseURI = "https://localhost:3000";
        }
      
        @Test
        public void updateUsingPut () {
          Posts post = new Posts();
          post.setId ("3");
          post.setTitle ("Hello Bhutan");
          post.setAuthor ("StaffWriter");
      
          given().body (post)
              .when ()
              .contentType (ContentType.JSON)
              .put ("/posts/3");
        }
      }
      

      详细解释可以查看以下链接: https://restservicestesting.blogspot.in/2016/10/automating-put-request-using-rest.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-24
        • 2021-03-01
        • 2016-09-28
        • 1970-01-01
        相关资源
        最近更新 更多