http(s) 接口自动化测试框架 (基于 java) 介绍

使用 java(jdk8)+maven+httpclient+testng+reportng+poi+jsonpath,可集成 jenkins。
java(jdk8)+maven+httpclient+testng 就不做介绍了,reportng 只是为了报告好看,修改了部分源码,poi 用于读取存放于 excel 的接口用例,jsonPath 用于校验返回值,以及提取返回值。
想直接查看源码的可以直接访问:http 接口自动化测试

一言不合上 demo

配置:

<?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 商城

运行

  1. IDE 工具直接执行 testng.xml(以 testng 形式运行) 即可(ide 工具需要先装好 testng 插件)。
  2. maven 执行:mvn test.

执行报告查看

  1. testng.xml 执行可视化报告:${workspace}/test-output/html/index.html(IDE 工具需要设置 testng 全局监听器配置:org.uncommons.reportng.HTMLReporter)
  2. maven 执行报告:${workspace}/target/surefire-reports/html/index.html

api-config.xml 配置

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 用例 (case/api-data.xls)

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"}

待优化

最后,欢迎拍砖,吐槽,有兴趣的可以关注我的公众号。

关注公众号


↙↙↙阅读原文可查看相关链接,并与作者交流