# 应用测试

应用配置好了以后,我们可以手动测试配置是否如何预期,也可以编写测试用例来验证。

同时,编写好的测试用例,也可以用于每次配置变更后的回归测试, 还可以配合灰度发布功能,用于正式发布前的回归测试。

我们先看下如何添加测试用例。

首先,我们需要输入测试名字,方便用于区分不同的测试。

再主要就是用 TestML 这种小语言来描述:用于测试的请求信息,以及期望的输出。

比如这里我们加一个简单的测试 (也可以输入多个测试用例,用三个空行隔开), 意思是向被测试节点发送请求:http://openresty.com/, 期望得到 301 的返回,并且请求头中包含期望的 Location 地址,和 Server 标识, 响应体中包含 "301 Moved Permanently" 这个 HTML title。

具体来说,=== 段表示该测试的名字,

--- 段表示测试的具体内容,比如:

url: 用于指定请求的 URL,

host: 用于指定请求的 Host,

ssl: 用于指定请求是否是 https 请求,默认是 http,

req_headers: 用于指定请求头,默认是没有请求头,一行表示一对请求头,

status:用于指定期望的响应状态码,

resp_headers:用于指定期望的响应头,一行表示一对响应头,

resp_header_pat:用于指定期望的响应头的正则匹配模式,跟 resp_headers 类似,只是 value 值部分可以用正则来表达,

resp_body_pat:用于指定期望的响应体的正则匹配模式。

保存成功后,会跳转到测试用例列表,我们可以选择一个测试来执行。

首先我们需要选择执行哪一个测试。

然后需要指定被测试的网关节点,可以选择某些节点,也可以全选。

选中某个网关节点则意味着,将会从 admin 节点向这个网关节点发送测试用例里描述的请求(通过节点的外网 IP), http 请求会走 80 端口,https 请求则会走 443 端口(还不支持指定特殊的端口), 然后将获取到的响应状态码,响应头以及响应体,跟测试用例里描述的期望的值逐个进行对比, 如果符合期望值,则该测试点通过,在结果栏里将会有一个绿色的勾, 如果不符合期望值,则该测试点失败,在结果栏里将会有一个红色的叉。 所以,一个测试用例也可能会有多条测试结果输出(取决于测试里写的期望值多少)。

选择执行后,我们会看到测试结果的实时输出。