我们在无法找到自动解决方案的两种情况下使用了保证放心的方法。我有一种想念的感觉。
1#:
到目前为止,Rest-Assured一直在自动从服务器更新会话值。我们最近转移到了使用负载平衡器的新架构。因此服务器将另外返回到旧的服务器,即代表负载均衡器的新cookie。我发现自己以编程方式获取新的Cookie并更新了下一个请求。
可以放心为我自动吗?
2#:
其他服务器需要标头“ Authorization:Bearer yada.yada.yada”。在每次请求后进行续订。在这里我也该如何告诉安心的人为我自动做到这一点?
谢谢
y
最佳答案
我建议您使用AuthFilter自动为您的请求提供auth标头。但是,您仍然需要提取数据-使用其他过滤器进行处理:
import io.restassured.RestAssured;
import io.restassured.builder.ResponseBuilder;
import io.restassured.filter.FilterContext;
import io.restassured.filter.OrderedFilter;
import io.restassured.response.Response;
import io.restassured.specification.FilterableRequestSpecification;
import io.restassured.specification.FilterableResponseSpecification;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.given;
public class ReuseRestAssuredResponse {
private static String authVal = "default";
@Test
public void sampleTest() {
RestAssured.filters(new SetAuthFilter(), new GetAuthFilter());
given()
.log().all()
.when()
.get("https://httpbin.org/get")
.then()
.log().all();
given()
.log().all()
.when()
.get("https://httpbin.org/get")
.then()
.log().all();
}
class SetAuthFilter implements OrderedFilter {
@Override
public Response filter(FilterableRequestSpecification filterableRequestSpecification, FilterableResponseSpecification filterableResponseSpecification, FilterContext filterContext) {
filterableRequestSpecification.header("Testauth", authVal);
return filterContext.next(filterableRequestSpecification, filterableResponseSpecification);
}
@Override
public int getOrder() {
return DEFAULT_PRECEDENCE - 1;
}
}
class GetAuthFilter implements OrderedFilter {
@Override
public Response filter(FilterableRequestSpecification filterableRequestSpecification, FilterableResponseSpecification filterableResponseSpecification, FilterContext filterContext) {
Response response = filterContext.next(filterableRequestSpecification, filterableResponseSpecification);
authVal = response.body().path("headers.Testauth") + "_updated";
return response;
}
@Override
public int getOrder() {
return DEFAULT_PRECEDENCE;
}
}
}
所以...这是什么?
第一个请求将使用标头
Testauth=default
进行,第二个请求将使用Testauth=default_updated
,如果添加其他迭代,则将是Testauth=default_updated_updated
实际上,
GetAuthFilter
应该有点难以遵守人体期望,请参见io.restassured.filter.log.StatusCodeBasedLoggingFilter
的实现,该实现提取响应数据并将其打印出来。也可以使用
FilterContext
值存储在过滤器之间传递值,外部静态变量只是为了简化示例。关于java - 保证放心的cookie或授权 header 保持最新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45614327/