【问题标题】:restAssured - cannot master post methodrestAssured - 无法掌握 post 方法
【发布时间】:2017-04-29 18:41:36
【问题描述】:

各位stackoverflowians :)

我一直在使用 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,所以请原谅我的新问题。

谢谢!

附:对于 Post 方法和将 data 放入 body

的任何帮助,我将不胜感激

【问题讨论】:

    标签: java automated-tests kotlin gmail-api rest-assured


    【解决方案1】:

    我认为您对 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"
        }
    """
    

    【讨论】:

    • 感谢您的回复和我学到的新东西 :) 但是,您会笑得很厉害,我的失败是因为我在 @987654333 之后忘记了一个该死的 dot @ 声明:D 这是我能犯的最愚蠢的错误!我花了几个小时来解决这个问题 XD 无论如何,非常感谢您提供 logkotlin json 功能!
    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 2018-04-25
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多