如何通过测试解决API调用上的错误代码“ 405”?

时间:2019-01-10 11:55:51

标签: java maven api testing rest-assured

在IntelliJ的运行模式下测试API调用时,出现错误代码“ 405”。但是,当我测试API cal时;在Postman中使用相同的参数即可。

我正在为自动存储塔编程,用户必须先登录才能使用它。登录表单有效,当我尝试使用Postman登录时,它也会成功登录。但是,当我在IntelliJ上运行我的代码时,它给我的错误代码为“ 405”,表示“方法不允许”。

有效的我的userController类代码:

@PostMapping(value = "/login", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String login(@RequestBody MultiValueMap<String, String> body){
    String email = body.getFirst("email");
    String username = body.getFirst("username");
    String password = body.getFirst("password");

    return userService.loginUser(email, username, password);
}

我的功能测试代码(也可以工作,因为我的API测试中的其他GET方法也可以工作):
    公共类FunctionalTest {

@BeforeClass
public static void setup() {
    String port = System.getProperty("server.port");
    if (port == null) {
        RestAssured.port = Integer.valueOf(8080);
    }
    else{
        RestAssured.port = Integer.valueOf(port);
    }


    String basePath = System.getProperty("server.base");
    if(basePath==null){
        basePath = "/";
    }
    RestAssured.basePath = basePath;

    String baseHost = System.getProperty("server.host");
    if(baseHost==null){
        baseHost = "http://localhost";
    }
    RestAssured.baseURI = baseHost;
}
} 

最后是我用于测试POST方法登录的代码:

//User control
@Test
public void checkLogin(){

    given()
            .param("email", "123")
            .param("username", "123")
            .param("password", "123")
            .when()
            .get("/login")
            .then()
            .statusCode(200);
}

希望任何人都可以帮助我解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

405表示不允许使用方法。之所以发生这种情况,是因为您要公开POST操作(@PostMapping(value = "/login", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE),但尝试通过GET进行消耗:.when().get("/login")