如何在Rest Assured中传递多个头部?

19

我刚接触rest-assured和Java,想要进行一个非常基本的测试,检查API的响应是否为200 ok。 请问有人能告诉我,在下面的脚本中我需要改变什么来传递多个头部Id、Key和ConId吗?

import org.junit.Test;
import com.jayway.restassured.*;
import com.jayway.restassured.http.ContentType;
import static org.hamcrest.Matchers.*;
import static com.jayway.restassured.RestAssured.*;

public class APIresponse

{

    public static void main(String[] args) 
        {
            APIresponse apiresponse = new APIresponse();
            apiresponse.response();
        }

    @Test
    public void response ()
    {
        baseURI="http://testme/api/";
        given().
            header("Id", "abc"). 
            param("Key", "NuDVhdsfYmNkDLOZQ").
            param("ConId", "xyz").
        when().
            get("/uk?Id=DT44FR100731").
        then().
            contentType(ContentType.JSON).
            body("response.code", equalTo("200"));
    }

}
6个回答

15
最简单的添加多个头部的方法是在 .given() 后多次重复使用 .header(headername,headervalue)
given().
  header("Id", "abc").
  header("name","name").
  header("","")
  ...

使用REST-Assured框架在其测试套件中以不同方式传递标头。您可以在此GitHub链接中找到它们。

编辑:

在Rest-Assured中验证响应状态:

expect().statusCode(200),log().ifError().given()...... 

或者从此GitHub链接中选择您想要测试响应头的示例。


你的问题不够清晰,请发布错误堆栈跟踪。 - parishodak
如果您想验证响应代码是否为200 OK,请尝试使用expect().statusCode(200),log().ifError().given()......语句,或从此链接中选择一个测试响应头的示例:https://github.com/jayway/rest-assured/blob/master/examples/rest-assured-itest-java/src/test/java/com/jayway/restassured/itest/java/HeaderITest.java - parishodak
我的程序中没有使用任何日期。 - Jatinder Pal Singh
这两个异常出现在同一个堆栈跟踪中。 - Jatinder Pal Singh
com.jayway.restassured.internal.http.ResponseParseException: OK 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)处... 由于org.apache.http.impl.cookie.DateParseException: 无法解析日期Mon, 25-01-2026 23:11:50 GMT 在org.apache.http.impl.cookie.DateUtils.parseDate(DateUtils.java:118)处 在org.apache.http.impl.cookie.DateUtils.parseDate(DateUtils.java:79)处 在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)处,由org.apache.http.impl.cookie.DateUtils$parseDate.call(Unknown Source)引起。 - Jatinder Pal Singh
显示剩余8条评论

10

您也可以按以下方式创建并添加多个标题的地图对象

    Header h1= new Header("Accept", "*/*");
    Header h2 = new Header("Accept-Language", "en-US");
    Header h3 = new Header("User-Agent", "Mozilla/5.0");
    List<Header> list = new ArrayList<Header>();
    list.add(h1);
    list.add(h2);
    list.add(h3);

    Headers header = new Headers(list);
    request.headers(header);

1
这可能会有所帮助:
Map<String,Object> headerMap = new HashMap<String,Object>();
headerMap.put("first_name", "John");
headerMap.put("last_name", "Watson");
Response response = given()
    .baseUri("http://localhost")
    .basePath("user/details")
    .headers(headerMap)
    .get();

1
您可以使用RestAssured中的Headers()方法,该方法支持您向请求添加多个标头。

Headers描述


1
您的链接已失效。 - David Morales
1
是的,由于项目及其维基已经迁移。这里是最新链接: RestAssured官方文档,Headers - Gergely A.

0

替换如下:

@Test
    public void response ()
    {
        baseURI="http://testme/api";
        given()
            .header("Id", "abc") 
            .param("Key", "NuDVhdsfYmNkDLOZQ")
            .param("ConId", "xyz")
        when()
            .get("/uk?Id=DT44FR100731")
        then()
            .contentType(ContentType.JSON)
            .and()
            .body("response.code", equalTo("200"));
    }

0

这是我如何使用RequestSpecification,并添加了两个头信息。

@Test
public void PostRequest() {
    String appKey = "777";// userID is unique
    RequestSpecification myreq = RestAssured.given();
    myreq.header("Content-Type", "application/json");
    myreq.header("Authorization", "Bearer 777");
    // Create Json Object to store attributes
    JSONObject myjson = new JSONObject();
    myjson.put("app_key", appKey);
    myjson.put("status", "critical")
    // Attach those attributes to Body after convert them in to JsonString
    myreq.body(myjson.toString());
    // Post the request with URL
    Response MyRes = myreq.post("https://api.bigpanda.io/data/v2/alerts");
    int ActualStatuscode = MyRes.getStatusCode();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接