我在Rest Assured code中有以下帖子请求:
我想参数化它。请建议。
given().contentType(JSON).with()
.body("\"id\":"123",\"email\":\"abv@gmail.com\"}").expect().body("status",
notNullValue()).when().post("https://localhost:8080/product/create.json");
参数
id,电子邮件。
当我声明String变量id,发送电子邮件并尝试传入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");
答案 0 :(得分:3)
在正文中我们需要提供如下的确切字符串:
"{\"id\":" + id + ",\"email\":" + email + "}"
这应该有效。但这不是最好的方法。您应该考虑创建一个包含2个字段(id和email)的类,并且作为请求的主体,您应该添加对象的json序列化主体。
LoginRequest loginRequest = new LoginRequest(id, email);
String loginAsString = Util.toJson(loginRequest);
given().contentType(JSON).with()
.body(loginAsString)...
试试这种方式。
希望它有所帮助。
答案 1 :(得分:0)
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());
答案 2 :(得分:0)
发送具有大量参数的字符串可能变得繁琐,并且更新具有n个参数的字符串可能变得耗时。因此,始终建议以body方法发送对象。
我建议你仔细阅读Rest Assured上的分步教程:
Automating POST Request using Rest Assured
看看下面的例子
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");
}
答案 3 :(得分:0)
您在代码中缺少双引号。当使用Rest Assured并想在body(“ ....”)内部传递变量时,语法为
"{\"id\": \""+id+"\", \"email\": \""+email+"\"}";
Rest Assured("+id+"
和"+email+"
)内的参数应该用双引号引起来。