我收到以下错误:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.models.Account
Run Code Online (Sandbox Code Playgroud)
使用以下代码
final int expectedId = 1;
Test newTest = create();
int expectedResponseCode = Response.SC_OK;
ArrayList<Account> account = given().when().expect().statusCode(expectedResponseCode)
.get("accounts/" + newTest.id() + "/users")
.as(ArrayList.class);
assertThat(account.get(0).getId()).isEqualTo(expectedId);
Run Code Online (Sandbox Code Playgroud)
有什么理由不能做到get(0)吗?
我这样得到回应:
Response response = expect().statusCode(200).given().body(requestBody).contentType("application/json")
.when().post("/admin");
String responseBody = response.getBody().asString();
Run Code Online (Sandbox Code Playgroud)
我在responseBody中有一个json:
{"user_id":39}
Run Code Online (Sandbox Code Playgroud)
我可以使用rest-assured的方法提取到字符串只有这个值= 39?
假设我有一个Java Person类:
class Person {
String name;
String email;
}
Run Code Online (Sandbox Code Playgroud)
使用REST Assured,您可以反序列化此JSON对象
{"name":"Bob", "email":"bob@email.com"}
Run Code Online (Sandbox Code Playgroud)
使用的Java Person实例
Person bob = given().when().get("person/Bob/").as(Person.class);
Run Code Online (Sandbox Code Playgroud)
如何使用REST Assured反序列化此JSON数组
[{"name":"Bob", "email":"bob@email.com"},
{"name":"Alice", "email":"alice@email.com"},
{"name":"Jay", "email":"jay@email.com"}]
Run Code Online (Sandbox Code Playgroud)
变成了List<Person>?例如,这将是方便的:
List<Person> persons = given().when().get("person/").as(...);
Run Code Online (Sandbox Code Playgroud) 我从一个服务返回的JSON中有一个匿名数组,如:
[
{"foo":1, "bar":2 , "baz":3 },
{"foo":3, "bar":4 , "baz":5 }
]
Run Code Online (Sandbox Code Playgroud)
我如何访问bar元素,例如
expect().body("$[*].bar", hasItems(2,4))
Run Code Online (Sandbox Code Playgroud)
我尝试了一些我在这里找到的可能性以及StefanGössner在JsonPath页面上的一些可能性,但无论我尝试什么,我都会遇到异常.我的问题似乎直接来自试图访问该项目列表.
我有一个POJO Artwork.我正在List以JSON格式从HTTP响应主体中的RESTful Web服务中检索这些对象中的一个.我正在尝试编写一个基于Rest Assured的测试来分析返回的列表.代码如下所示:
Response response = get("/artwork");
List returnedArtworks = response.getBody().as(List.class)
Run Code Online (Sandbox Code Playgroud)
问题是,我无法让Rest Assured将返回的JSON解析为List<Artwork>.相反,我得到了一个List<LinkedHashMap>.地图有一个合适的结构,即可以由Jackson映射到Artwork对象,但我想避免手动映射它.
我的模型中的JSON映射是可以的,因为当我像这样映射单个对象时:
Artwork returnedArtwork = response.getBody().as(Artwork.class);
Run Code Online (Sandbox Code Playgroud)
它工作正常.
是否有可能returnedArtworks成为List<Artwork>?
我怎样才能确保我的响应(包括它是JSON)包含或不包含特定字段?
when()
.get("/person/12345")
.then()
.body("surname", isPresent()) // Doesn't work...
.body("age", isNotPresent()); // ...But that's the idea.
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来断言我的JSON是否包含字段age和surname.
我正在尝试评估正确的工具来测试RESTful Web服务,并最终为我们的项目自动化.想知道,当我比较互联网上的各种工具时,我需要寻找这种测试的规格是什么.
当然,其中一个要求是开源工具.
我查看了一些工具,例如SOAPUI,RestClient,TestMaker,RestAssured.想知道他们的利弊.此外,任何有关如何实现它的想法或指示都会有很大帮助.
我一直在努力解决这个问题.我想使用restAssured来测试我的SpringBoot REST应用程序.
虽然看起来容器旋转得恰到好处,但请放心(其他任何事情似乎都有问题.
我一直得到Connection拒绝例外.
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
...
Run Code Online (Sandbox Code Playgroud)
我的考试班:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void test() {
System.out.println(this.restTemplate.getForEntity("/clothes", List.class));
}
@Test
public void test2() throws InterruptedException {
given().basePath("/clothes").when().get("").then().statusCode(200);
}
}
Run Code Online (Sandbox Code Playgroud)
现在对于奇怪的部分,test传递和打印它应该test2是什么,但是得到Connection拒绝例外.
任何想法这个设置有什么问题?
我有一个返回JSON的端点,如:
[
{"id" : 4, "name" : "Name4"},
{"id" : 5, "name" : "Name5"}
]
Run Code Online (Sandbox Code Playgroud)
和DTO课程:
public class FooDto {
public int id;
public String name;
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在以这种方式测试返回的json数组的长度:
@Test
public void test() {
FooDto[] foos = RestAssured.get("/foos").as(FooDto[].class);
assertThat(foos.length, is(2));
}
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法在没有强制转换为FooDto数组的情况下执行此操作?像这样的东西:
@Test
public void test() {
RestAssured.get("/foos").then().assertThat()
.length(2);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用RestAssured 2.8.0并且我正在尝试设置自己的超时(对于网关超时),所以如果我在X毫秒后没有得到响应我想要中止.
我试过了:
public static ValidatableResponse postWithConnectionConfig(String url, String body, RequestSpecification requestSpecification, ResponseSpecification responseSpecification) {
ConnectionConfig.CloseIdleConnectionConfig closeIdleConnectionConfig = new ConnectionConfig.CloseIdleConnectionConfig(1L, TimeUnit.MILLISECONDS);
ConnectionConfig connectionConfig = new ConnectionConfig(closeIdleConnectionConfig);
RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);
return given().specification(requestSpecification)
.body(body)
.config(restAssuredConfig)
.post(url)
.then()
.specification(responseSpecification);
}
Run Code Online (Sandbox Code Playgroud)
要么
ConnectionConfig connectionConfig = new ConnectionConfig()
.closeIdleConnectionsAfterEachResponseAfter(10L, TimeUnit.MILLISECONDS);
RestAssuredConfig restAssuredConfig = new RestAssuredConfig().connectionConfig(connectionConfig);
Run Code Online (Sandbox Code Playgroud)
我也尝试添加
.queryParam("SO_TIMEOUT", 10)
Run Code Online (Sandbox Code Playgroud)
要么
.queryParam("CONNECTION_MANAGER_TIMEOUT", 10)
Run Code Online (Sandbox Code Playgroud)
似乎没什么用.它不会中止我的查询
rest-assured ×10
java ×6
json ×5
rest ×4
arrays ×1
generics ×1
httpclient ×1
jackson ×1
java-8 ×1
rest-client ×1
soapui ×1
spring ×1
spring-boot ×1
web-services ×1