接口测试 rest Assured 代理 + 详细配置介绍

49875183 for rest-assured · 2017年01月10日 · 最后由 其实我是一个QA 回复于 2017年02月09日 · 136 次阅读
本帖已被设为精华帖!

代理(proxy)配置

从版本 2.3.2 开始 REST Assured 可以更好地支持代理。 例如,如果你有一个代理在 localhost 端口 8888 你可以做:

given().proxy("localhost", 8888). .. 

如果服务器在本地环境中运行,可以不指定主机名:

given().proxy(8888). .. // Will assume localhost

要使用 HTTPS,需要提供第三个参数(scheme)或使用io.restassured.specification.ProxySpecification。 例如:

given().proxy(host("localhost").withScheme("https")). ..

其中 host 从 io.restassured.specification.ProxySpecification 静态导入。

从版本 2.7.0 开始,您还可以为代理指定抢占式基本身份验证。 例如:

given().proxy(auth("username", "password")).when() ..

其中auth是从io.restassured.specification.ProxySpecification静态导入的,也可以将身份验证与不同的 host 相结合:

given().proxy(host("http://myhost.org").withAuth("username", "password")). ..

静态代理配置

可以为所有请求配置静态代理,例如:

RestAssured.proxy("localhost", 8888);    

或者:

RestAssured.proxy = host("localhost").withPort(8888);

请求规范代理配置

您还可以创建请求规范并在其中指定代理:

RequestSpecification specification = new RequestSpecBuilder().setProxy("localhost").build();
given().spec(specification). ..

详细配置

详细配置由RestAssuredConfig实例提供,您可以使用它配置HTTP Client的参数以及重定向日志编码器解码器SessionObjectMapperConnectionSSLParamConfig 设置。 例子:

特定请求:

given().config(RestAssured.config().redirect(redirectConfig().followRedirects(false))). ..

或使用 RequestSpecBuilder:

RequestSpecification spec = new RequestSpecBuilder().setConfig(RestAssured.config().redirect(redirectConfig().followRedirects(false))).build();

或所有请求:

RestAssured.config = config().redirect(redirectConfig().followRedirects(true).and().maxRedirects(0));

config() and newConfig() can be statically imported from io.restassured.config.RestAssuredConfig.

编码配置

使用 [EncoderConfig](http://static.javadoc.io/io.rest-assured/rest-assured/3.0.1/io/restassured/config/EncoderConfig.htmlencoding),可以指定默认的内容 charset(如果没有在 content-type 头中指定)和查询参数 charset 为所有请求。 如果未指定内容字符集,则使用 ISO-8859-1,如果未指定查询参数字符集,则使用 UTF-8。 用法示例:

RestAssured.config = RestAssured.config().encoderConfig(encoderConfig().defaultContentCharset("US-ASCII"));

如果没有通过使用EncoderConfig中的 defaultCharsetForContentType 方法为此内容类型显式定义字符集,那么还可以指定用于特定内容类型的编码器字符集。 例如:

RestAssured.config = RestAssured.config(config().encoderConfig(encoderConfig().defaultCharsetForContentType("UTF-16", "application/xml")));

这将假设明确指定一个字符集的 “application / xml” 内容类型的 UTF-16 编码。 默认情况下,“application / json” 被指定为使用 “UTF-8” 作为默认内容类型,这是由 [RFC4627](https://www.ietf.org/rfc/rfc4627.txt)指定的。

避免自动将字符集添加到 content-type 标头

默认情况下,REST Assured 会自动添加字符集标头。 要完全禁用这个,你可以这样配置EncoderConfig

RestAssured.config = RestAssured.config(config().encoderConfig(encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false));

解码配置

使用 [DecoderConfig](http://static.javadoc.io/io.rest-assured/rest-assured/3.0.1/io/restassured/config/DecoderConfig.html),您可以将默认响应内容解码字符集设置为 所有响应。 如果您期望使用不同于 ISO-8859-1 的内容字符集(这是默认字符集),并且响应未在内容类型标头中定义字符集,那么这将非常有用。 用法示例:

RestAssured.config = RestAssured.config().decoderConfig(decoderConfig().defaultContentCharset("UTF-8"));

您还可以使用 “DecoderConfig” 来指定要应用哪些内容解码器。 当你这样做时,“Accept-Encoding” 头部将被自动添加到请求中,并且响应主体将被自动解码。 默认情况下,启用 GZIP 和 DEFLATE 解码器。 例如要删除 GZIP 解码但保留 DEFLATE 解码,您可以执行以下操作:
您还可以使用 “DecoderConfig” 来指定要应用哪些内容解码器。 当你这样做时,“Accept-Encoding” 头部将被自动添加到请求中,并且响应主体将被自动解码。 默认情况下,启用 GZIP 和 DEFLATE 解码器。 例如要删除 GZIP 解码但保留 DEFLATE 解码,您可以执行以下操作:

given().config(RestAssured.config().decoderConfig(decoderConfig().contentDecoders(DEFLATE))). ..

如果没有通过使用DecoderConfig中的 “defaultCharsetForContentType” 方法为此内容类型明确定义字符集,则还可以指定要用于特定内容类型的解码器字符集。 例如:

RestAssured.config = config(config().decoderConfig(decoderConfig().defaultCharsetForContentType("UTF-16", "application/xml")));

这将假设明确指定一个字符集的 “application / xml” 内容类型的 UTF-16 编码。 默认情况下,“application / json” 使用 “UTF-8” 作为默认字符集,这是由 [RFC4627](https://www.ietf.org/rfc/rfc4627.txt)指定的。

Session 配置

使用 Session 配置,您可以配置 REST Assured 使用的默认 session ID 名称。 默认 session id 名称是JSESSIONID,如果应用程序中的名称不同,并且您希望使用 REST Assured 的 [会话支持](#Session_support),您只需更改它。 用法:

RestAssured.config = RestAssured.config().sessionConfig(new SessionConfig().sessionIdName("phpsessionid"));

重定向 DSL

重定向配置可以使用 DSL 指定。 例如。

given().redirects().max(12).and().redirects().follow(true).when(). .. 

网络连接配置

让您配置 REST Assured 的连接设置。 例如,如果要在每个响应后强制关闭 Apache HTTP Client 连接。 如果您在响应中使用少量数据进行大量快速连续请求,则可能需要执行此操作。然而,如果你正在下载(尤其是大量的)分块,你绝不能每个响应后关闭连接的数据。 默认情况下,连接在每个响应后不关闭。

RestAssured.config = RestAssured.config().connectionConfig(connectionConfig().closeIdleConnectionsAfterEachResponse());

Json 配置

JsonPathConfig允许您在 REST Assured 或 JsonPath使用时配置 Json 设置。 它让你配置如何处理 JSON 数字。

RestAssured.config = RestAssured.config().jsonConfig(jsonConfig().numberReturnType(NumberReturnType.BIG_DECIMAL))

HTTP Client 配置

为 REST Assured 将在执行请求时使用的 HTTP Client 实例配置属性。 默认情况下,REST Assured 会为每个 “given” 语句创建一个新的 http Client 实例。 要配置重用,请执行以下操作:

RestAssured.config = RestAssured.config().httpClient(httpClientConfig().reuseHttpClientInstance());

您还可以使用httpClientFactory方法提供自定义 HTTP Client 实例,例如:

RestAssured.config = RestAssured.config().httpClient(httpClientConfig().httpClientFactory(
         new HttpClientConfig.HttpClientFactory() {

            @Override
            public HttpClient createHttpClient() {
                return new SystemDefaultHttpClient();
            }
        }));

注意,目前你需要提供一个AbstractHttpClient的实例.

也可以配置默认参数等。

SSL 配置

SSLConfig 允许您指定更高级的 SSL 配置,如信任库,密钥库类型和主机名验证器。 例如:

RestAssured.config = RestAssured.config().sslConfig(sslConfig().with().keystoreType(<type>).and().strictHostnames());

参数配置

ParamConfig 允许您配置在 “冲突” 时,更新不同的参数。 默认情况下,所有参数都将合并,因此如果您执行以下操作:

given().queryParam("param1", "value1").queryParam("param1", "value2").when().get("/x"). ...

REST Assured 将发送一个查询字符串param1 = value1&param1 = value2
如果这不是您想要的,你可以配置 REST Assured 为 * replace * 值代替:

given().
        config(config().paramConfig(paramConfig().queryParamsUpdateStrategy(REPLACE))).
        queryParam("param1", "value1").
        queryParam("param1", "value2").
when().
        get("/x"). ..

REST Assured 现在将替换param1的值为value2(因为它是最后写的),而不是将它们合并在一起。 您也可以为所有参数类型的每种类型配置统一的更新策略

given().config(config().paramConfig(paramConfig().replaceAllParameters())). ..

也支持在 [Spring Mock Mvc 模块](# Spring Mock Mvc 模块)(配置 [MockMvcParamConfig](http://static.javadoc.io/io.restassured/spring-mock -mvc / 3.0.1 / io / restassured / module / mockmvc / config / MockMvcParamConfig.html)。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 9 条回复 时间 点赞

校长开课了

语法感觉挺简洁的

思寒_seveniruby 将本帖设为了精华贴 01月10日 04:33

加精理由: 弥补了接口测试的内容

话说,DecoderConfig 除了 charset ,支持其它类型的 decode 不?例如通过自己另外写的外部类把收到的数据(私有协议)转化成 json 格式。

#7 楼 @chenhengjie123 目前没看到有这种属性,这种转换格式的扩展个小方法呗

#7 楼 @chenhengjie123 发现了这个 ,目前还没有尝试😁 应该可以解决你的这个问题
registerParser
public static void registerParser(String contentType, Parser parser)

Register a custom content-type to be parsed using a predefined parser. E.g. let's say you want parse content-type application/custom with the XML parser to be able to verify the response using the XML dot notations:
get("/x").then().assertThat().body("document.child", equalsTo("something"))..

Since application/custom is not registered to be processed by the XML parser by default you need to explicitly tell REST Assured to use this parser before making the request:
RestAssured.registerParser("application/custom, Parser.XML");

Parameters:
contentType - The content-type to register
parser - The parser to use when verifying the response.

rest-assured 支持 pac 文件代理吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册