使用 java(jdk8)+maven+httpclient+testng+reportng+poi+jsonpath,可集成 jenkins。
java(jdk8)+maven+httpclient+testng 就不做介绍了,reportng 只是为了报告好看,修改了部分源码,poi 用于读取存放于 excel 的接口用例,jsonPath 用于校验返回值,以及提取返回值。
想直接查看源码的可以直接访问:http 接口自动化测试
配置:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<rootUrl>http://apis.baidu.com</rootUrl>
<headers>
<header name="apikey" value="123456"></header>
</headers>
<params>
<param name="test" value="value"></param>
</params>
</root>
用例设计如下:
接口执行的总体情况:
接口执行的具体详情:
demo 中的用例以百度的 api store 为例(具体查看:百度 api 商城)
api 请求根路径、请求头及初始化参数值可以在 api-config 上进行配置。
rootUrl: 必须的配置,api 的根路径,在调用 api 时用于拼接,配置后,会在自动添加到用例中的 url 的前缀中。
headers: 非必须配置,配置后在调用 api 时会将对应的 name:value 值设置到所有请求的请求头中 header-name:header-value。
params:非必须配置,公共参数,通常放置初始化配置数据,所有用例执行前,会将 params 下所有的 param 配置进行读取并存储到公共参数池中,在用例执行时,使用特定的关键字 (${param_name}) 可以获取。具体使用请参考下面的高级用法。
<root>
<rootUrl>http://apis.baidu.com</rootUrl>
<headers>
<!-- 换成自己实际的值 -->
<header name="apikey" value="123456"></header>
</headers>
<params>
<param name="param1" value="value1"></param>
</params>
</root>
api 请求用例具体数据。除表头外,一行代表一个 api 用例。执行时会依次从左到右,从上到下执行。
说明:
若配置文件 (api-config.xml) 中 rootUrl 为:http://apis.baidu.com ,url 的值为:/apistore/aqiservice/citylist ,框架执行的时候会根据配置文件中 rootUrl 进行自动拼接为:http://apis.baidu.com/apistore/aqiservice/citylist 。
若填写 url 填写为 http 作为前缀的值如:http://www.baidu.com/s?w=test 将不会进行拼接。
说明:
若 verify 填写值为:$.errorCode=0;$.errorMessage=success ,则会校验返回值中 $.errorCode 的值为 0,$.errorMessage 的值为 success,只要有一个校验错误,后面的其他校验项将停止校验。
说明:
若 save 值为:id=$.userId;age=$.age ,接口实际返回内容为:{"username":"chenwx","userId":"1000","age":"18"},则接口执行完成后,会将公共参数 id 的值存储为 1000,age 存储为 18。公共参数可在后面的用例中进行使用。具体使用方法见下方高级用法。
测试用例 excel 表中可以使用 ‘${param_name}’ 占位符,在执行过程中如果判断含有占位符,则会将该值替换为公共参数里面的值,如果找不到将会报错。如:
//配置文件(api-config.xml)中params配置为:
<params>
<param name="apikey" value="123456"></param>
</params>
//A用例执行返回为
{"username":"chenwx","userId":"1000","age":"18"}
//A用例的save值为:
username=$.username;id=$.userId
//此时若B用例中param值填写为:
{"key":"apikey","userId":"${id}","username":"${username}"}
//实际执行时会替换为:
{"key":"123456","userId":"1000","username":"username"}
测试用例 excel 表中可以使用 ‘__funcName(args)’ 占位符,在执行过程中如果判断含有该占位符,且 funcName 存在,则会执行相应的函数后进行替换。先支持函数如下:
//若param中值为:
{"username":"__random(6,true)"}
//实际执行时,username的值会替换为长度为6的数字随机数如:
{"username":"653495"}