restAssured - 无法掌握 post 方法

restAssured - cannot master post method

各位 Whosebugians :)

我一直在抽空使用 Gmail API 拨打 Post 电话。 一直在尝试使用 createDraft 和 createLabel。 现在我想我已经找到了如何(大部分)正确地做到这一点,但是我得到了这个错误:

    java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <400>.

我发现这个错误是因为我提出了错误的请求。

伙计们,你们能帮我解决这个问题吗? 这是我的代码:

import io.restassured.RestAssured.*
import io.restassured.http.ContentType
import io.restassured.matcher.RestAssuredMatchers.*
import org.hamcrest.Matchers.*
import org.testng.annotations.Test




class RestAPIAutoTestPost {
    @Test
    fun createLabelInGoogleMail() {
        RestAssured.baseURI = "https://www.googleapis.com/gmail/v1/users/me"
        val accessToken = "ya29.Glw7BEv6***"

        val jsonAsMap = HashMap<String, Any>()
        jsonAsMap.put("id", "labelAPITestNameID")
        jsonAsMap.put("labelListVisibility", "labelShow")
        jsonAsMap.put("messageListVisibility", "show")
        jsonAsMap.put("messagesTotal", "0")
        jsonAsMap.put("messagesUnread", "0")
        jsonAsMap.put("name", "labelAPITestName")
        jsonAsMap.put("threadsTotal", "0")
        jsonAsMap.put("threadsUnread", "0")
        jsonAsMap.put("type", "user")


        given().
                contentType(ContentType.JSON).
                body(jsonAsMap).

        `when`()
                post("/labels?access_token=$accessToken").
        then().
                statusCode(200)
    }

}

我想我不正确地使用了 HashMap 或者我使用了一些不正确的正文字段。 我才刚刚开始学习 restAssured 所以请原谅 newby 的问题。

谢谢!

P.S。如果您对 Post 方法以及将 data 放入 body 中提供任何帮助,我将不胜感激

我认为您对 RestAssured 和 HashMap 的使用是正确的。我认为您从 API 中获得了 400,因为您指定了 id 属性。通过在 Google 的 API Explorer 中使用它,我能够通过这样做生成 400 个错误。根据 the documentation,您需要为 POST/Create 指定的唯一内容是:labelListVisibilitymessageListVisibilitynameid 作为响应的一部分返回给您。

RestAssured 的一个很好的功能是您可以让它在出现错误时或一直记录它发送或接收的内容。

记录所有请求:

given().log().all()

记录所有回复:

`when`().log().all()

或者在验证失败时:

`when`().log().ifValidationFails()

使用它可以更准确地说明您与 API 的交互失败的原因,因为它会显示 Google 发回的任何内容。所以我们可以确定我对 id.

的看法是否正确

并且由于您似乎为此使用了 Kotlin,您可能希望利用其强大的多行字符串功能并手动创建 JSON 有效负载:

val body = """
    {
        "labelListVisibility": "labelShow",
        "messageListVisibility": "show",
        "name": "ThisIsATest"
    }
"""