当前位置: 首页 > 知识库问答 >
问题:

参数化后请求有效载荷使用Rest保证

慕阳伯
2023-03-14

我有以下关于“放心代码”的帖子请求:

我想把它参数化。请建议。

       given().contentType(JSON).with()
          .body("\"id\":"123",\"email\":\"abv@gmail.com\"}").expect().body("status",            
        notNullValue()).when().post("https://localhost:8080/product/create.json");

参数

ID,电子邮件。

当我声明字符串变量id、email并尝试传入body()时,它不起作用。

非工作代码:

 String id="123";
 String email=abc@gmail.com;

 given().contentType(JSON).with()
  .body("\"id\":id,\"email\":email}").expect().body("status",              
   notNullValue()).when().post("https://localhost:8080/product/create.json");

共有3个答案

金飞翼
2023-03-14

发送包含大量参数的字符串可能会变得乏味,更新包含n个参数的字符串可能会变得耗时。因此,总是建议在body方法中发送对象

我建议您阅读我关于“放心”的分步教程:

使用Rest-Assured自动化POST请求

看看下面的例子

public class Posts {

public String id;
public String title;
public String author;

public void setId (String id) {

this.id = id;
}

public void setTitle (String title) {

this.title = title;
}

public void setAuthor (String author) {

this.author = author;

}

public String getId () {

return id;

}

public String getTitle () {

return title;
}

public String getAuthor () {

return author;
}

}

在上面的Post类中,我们创建了需要传递给body方法的参数的getter和setter方法。

现在我们将发送POST请求

import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static com.jayway.restassured.RestAssured.*
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.response.Response;
import com.restapiclass.Posts;

public class PostRequestTest {


@BeforeClass
public void setBaseUri () {

RestAssured.baseURI = "http://localhost:3000";
}


@Test
public void sendPostObject () {

Posts post = new Posts();
post.setId ("3");
post.setTitle ("Hello India");
post.setAuthor ("StaffWriter");

given().body (post)
.when ()
.contentType (ContentType.JSON)
.post ("/posts");

}
栾英资
2023-03-14

除了使用POJO,您还可以使用HashMap:

given().
        contentType(JSON).
        body(new HashMap<String, Object>() {{
            put("name", "John Doe");
            put("address", new HashMap<String, Object>() {{
                put("street", "Some street");
                put("areaCode", 21223);
            }});
        }}).
when().
        post("https://localhost:8080/product/create.json")
then().
        body("status",  notNullValue());
马魁
2023-03-14

在正文中,我们需要给出精确的字符串,如:

"{\"id\":" + id + ",\"email\":" + email + "}"

这应该行得通。但这不是最好的方法。您应该考虑创建一个包含两个字段(id和email)的类,作为请求的主体,您应该添加对象的json序列化主体。

LoginRequest loginRequest = new LoginRequest(id, email);
String loginAsString = Util.toJson(loginRequest);
given().contentType(JSON).with()
   .body(loginAsString)...

试试这种方式。
希望有帮助。

 类似资料:
  • 问题内容: 我正在使用 PHP , ExtJS 和 ajax存储 。 它不通过POST或GET发送数据(在创建,更新,销毁时)。在 Chrome控制台中, 我在“ 请求有效负载 ”字段中看到我的传出参数为JSON 。 $ _POST 和 $ _GET 为空。 如何在PHP中检索它? 问题答案: 如果我正确理解这种情况,那么您只是通过http正文传递了json数据,而不是数据。 您可以使用以下代码段

  • AWS API网关的请求有效负载限制是多少? 我需要发送一个JSON有效载荷与编码文件和一些其他参数到API网关,然后将有效载荷传递给AWS Lambda。 我找不到与此相关的AWS文档。

  • 问题内容: 我正在使用文件上传器,并且需要请求有效负载中的详细信息以进行裁剪。 我没有10位代表来发布POST请求的图片,但是它有 所以从avatar_data我所需要的,,,和。我知道我必须封送JSON,但是我不确定如何达到这一点? 问题答案: 实现接口。

  • 问题内容: 我正在尝试使用具有JSON有效负载的POST请求从REST API获取JSON响应(在发送前应转换为URL编码的文本)。我已经按照一些教程实施了该过程,但是状态代码为400,但出现错误。我可能未在编码给定的JSON字符串或缺少某些内容。请帮我解决这个问题。谢谢。 这是我的代码 问题答案: 在跟踪了许多帖子和教程超过24小时后,我知道我没有正确发送URL参数。而且我还了解到使用 Apac

  • 问题内容: 当我发送AJAX Post请求并在send()方法的queryString中发送参数时, Chrome DeveloperTool的XHR捕获工具显示请求有效负载下的参数。当我使用jquery的post函数时,该工具会在“表单数据”部分下显示参数。 有什么区别 ? 问题答案: 您尚未提供有关如何使用send函数的足够信息,但我假设您未设置mime类型来指定您要发送表单数据 在这种情况下

  • 我是REST API和JSON的新手,我有一个初学者的问题。我试图使用的API根据以下模式请求参数: 请求参数示例如下: 但是,当我试图使用SoapUI和Postman测试这个API时,我只看到参数的键值对,我不知道如何在病人对象中嵌套ID和类型: SoapUI参数 邮递员参数