暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Rest Assured篇: Post 请求测试

墨迹测试开发 2020-12-21
1045

点击上方蓝字设为星标

每天傍晚伴你一起成长!

在本教程中,我们将学习关于

 Post请求基础概念 使用Rest-Assured进行Post请求测试 使用简单JSON库创建JSON数据 在Request正文中发送JSON内容 验证响应

什么是HTTP协议的POST请求?

HTTP POST通常称为POST方法,用于将数据发送到服务器。在网页上提交表单数据(HTML表单)时,通常可以找到POST 请求。例如,提交Gmail注册表格。POST请求通常会导致服务器上的更改,例如添加新数据,或者可能更新为现有数据。

在POST请求中发送到服务器的数据在HTTP请求的正文中发送。正文类型,XML,JSON或其他格式由Content-Type 标头定义。如果POST请求包含JSON数据,则Content-Type标头的值为application/json
。同样,对于包含XML 的POST请求,Content-Type标头值将为application/xml

让我们了解如何通过实际示例测试POST Web服务。我们将看一看注册Web服务。

Endpointhttp://restapi.demoqa.com/customer/register
HTTP method type:POST
Body:{“FirstName”: “value”“LastName” : “value”,“UserName” : “value”,“Password” : “value”,“Email” : “Value”}
Success Response:{“SuccessCode”:“OPERATION_SUCCESS”, “Message”: “Operation completed successfully” }
Failure Response:{“FaultId”: “User already exists”, “fault”: “FAULT_USER_ALREADY_EXISTS” }

使用Rest-Assured进行Post请求测试

为了在代码中创建JSON对象,我们将在类路径中添加一个简单的 JSON库。您可以使用以下URL从Maven下载简单JSONhttps[1] : //mvnrepository.com/artifact/com.googlecode.json-simple/json-simple[2]。然后将下载的Jars添加到类路径。

让我们从代码开始

步骤1:创建一个指向服务端点的请求

RestAssured.baseURI ="https://restapi.demoqa.com/customer";
RequestSpecification request = RestAssured.given();

步骤2:创建一个包含所有字段的JSON请求

// JSONObject is a class that represents a Simple JSON.
// We can add Key - Value pairs using the put method
JSONObject requestParams = new JSONObject();
requestParams.put("FirstName""Virender"); 
requestParams.put("LastName""Singh");

requestParams.put("UserName""simpleuser001");
requestParams.put("Password""password1");
requestParams.put("Email",  "someuser@gmail.com");

JSONObjectorg.json.simple 包中提供的类。此类是JSON 字符串的程序表示形式查看上面用于我们的测试Web服务的Request JSON,您会发现JSON中有多个节点。可以使用JSONObject.put(String,String)方法添加每个节点。一旦添加了所有节点,就可以通过调用JSONObject.toJSONString()方法来获取JSONObject 的String表示形式。

步骤3:在请求中添加JSON正文并发送请求

// Add a header stating the Request body is a JSON
request.header("Content-Type""application/json");

// Add the Json to the body of the request
request.body(requestParams.toJSONString());

// Post the request and check the response
Response response = request.post("/register");

该Web服务接受JSON正文。通过此步骤,我们创建了需要发送的JSON正文。在此步骤中,我们将简单地将JSON String添加到HTTP Request的主体中,并确保Content-Type标头字段的值为application/json

您可以使用称为RequestSpecification.body(JsonString)的方法将JSON字符串放入正文中 此方法使您可以更新HTTP请求 正文的内容。但是,如果多次调用此方法,则正文将更新为最新的JSON字符串。

步骤4:验证响应

一旦获得响应,我们要做的就是验证响应的各个部分。让我们验证Response中的成功代码文本,我们将使用JsonPath

int statusCode = response.getStatusCode();
Assert.assertEquals(statusCode, "201");
String successCode = response.jsonPath().get("SuccessCode");
Assert.assertEquals( "Correct Success code was returned", successCode, "OPERATION_SUCCESS");

现在,我们已经发送了请求并收到了响应,让我们验证状态代码响应正文的内容。

完整的代码

这是上面示例的完整代码

@Test
public void RegistrationSuccessful()
{        
    RestAssured.baseURI ="https://restapi.demoqa.com/customer";
    RequestSpecification request = RestAssured.given();

    JSONObject requestParams = new JSONObject();
    requestParams.put("FirstName""Virender"); // Cast
    requestParams.put("LastName""Singh");
    requestParams.put("UserName""sdimpleuser2dd2011");
    requestParams.put("Password""password1");

    requestParams.put("Email",  "sample2ee26d9@gmail.com");
    request.body(requestParams.toJSONString());
    Response response = request.post("/register");

    int statusCode = response.getStatusCode();
    Assert.assertEquals(statusCode, "201");
    String successCode = response.jsonPath().get("SuccessCode");
    Assert.assertEquals( "Correct Success code was returned", successCode, "OPERATION_SUCCESS");
}

更改Post请求的内容

Web服务测试的关键方面之一是验证端点上的负面情况。可能有很多负面的情况,其中一些是

发送不完整的POST数据使用不正确的语法发送JSON数据在Request中发送不正确的动词。

让我们看看如果将GET请求发送到需要POST的端点会产生什么影响。下面的代码试图做到这一点,我们将只打印出响应状态代码和响应正文,以查看是否出现任何错误。

public void RegistrationSuccessful()

 RestAssured.baseURI ="https://restapi.demoqa.com/customer";
 RequestSpecification request = RestAssured.given();

 JSONObject requestParams = new JSONObject();
 requestParams.put("FirstName""Virender"); // Cast
 requestParams.put("LastName""Singh");
 requestParams.put("UserName""sdimpleuser2dd2011");
 requestParams.put("Password""password1"); 
 requestParams.put("Email",  "sample2ee26d9@gmail.com");

 request.body(requestParams.toJSONString());
 Response response = request.get("/register");

 int statusCode = response.getStatusCode();
 System.out.println("The status code recieved: " + statusCode);

 System.out.println("Response body: " + response.body().asString());
}

如果运行此测试,则会生成以下输出。在输出中,我们可以清楚地看到Response主体告诉我们HTTP Verb的错误用法。假设我们实际上进行了远程方法调用并指定了方法调用的类型,那么HTTP Verb也称为“方法类型”。





END

时光,在物转星移中渐行渐远,春花一梦,流水无痕,没有在最想做的时候去做的事情,都是人生的遗憾。人生需要深思熟虑,也需要一时的冲动。

文章转载自墨迹测试开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论