51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1803|回复: 4
打印 上一主题 下一主题

[讨论] http (s) 接口自动化测试框架 (基于 java)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-12 10:02:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http(s)接口自动化测试框架(基于java)介绍

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


一言不合上demo
配置:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3.     <rootUrl>http://apis.baidu.com</rootUrl>
  4.     <headers>
  5.         <header name="apikey" value="123456"></header>
  6.     </headers>
  7.     <params>
  8.         <param name="test" value="value"></param>
  9.     </params>
  10. </root>
复制代码
用例设计如下:

接口执行的整体情况:

接口执行的具体详情:

详细介绍


环境
demo中的用例以百度的api store为例

运行

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})可以获取。具体使用请参考下面的高级用法
  1. <root>
  2.     <rootUrl>http://apis.baidu.com</rootUrl>
  3.     <headers>
  4.         <!-- 换成自己实际的值 -->
  5.         <header name="apikey" value="123456"></header>
  6.     </headers>
  7.     <params>
  8.         <param name="param1" value="value1"></param>
  9.     </params>
  10. </root>
复制代码
api用例(case/api-data.xls)
api请求用例具体数据。除表头外,一行代表一个api用例。执行时会依次从左到右,从上到下执行。


.run:标记为‘Y’时,该行数据会被读取执行。
.description:该用例描述,在报告中提现。
.method:该api测试用例的请求方法(暂只支持get,post)。
.url:该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 将不会进行拼接。


.param:请求方法为post时,body的内容(暂只支持json,不支持xml)。
.verify:对于api请求response数据的验证(可使用jsonPath进行校验)。校验多个使用“;”进行隔开。


说明:
若verify填写值为:$.errorCode=0;$.errorMessage=success ,则会校验返回值中$.errorCode的值为0,$.errorMessage的值为success,只要有一个校验错误,后面的其他校验项将停止校验。


.save:使用jsonPath对response的数据进行提取存储。


说明:

若save值为:id=$.userId;age=$.age ,接口实际返回内容为:{"username":"chenwx","userId":"1000","age":"18"},则接口执行完成后,会将公共参数id的值存储为1000,age存储为18。公共参数可在后面的用例中进行使用。具体使用方法见下方高级用法


高级用法
测试用例excel表中可以使用‘${param_name}’占位符,在执行过程中如果判断含有占位符,则会将该值替换为公共参数里面的值,如果找不到将会报错。如:
  1. //配置文件(api-config.xml)中params配置为:
  2. <params>
  3.     <param name="apikey" value="123456"></param>
  4. </params>

  5. //A用例执行返回为
  6. {"username":"chenwx","userId":"1000","age":"18"}
  7. //A用例的save值为:
  8. username=$.username;id=$.userId

  9. //此时若B用例中param值填写为:
  10. {"key":"apikey","userId":"${id}","username":"${username}"}
  11. //实际执行时会替换为:
  12. {"key":"123456","userId":"1000","username":"username"}
复制代码
函数助手
测试用例excel表中可以使用‘__funcName(args)’占位符,在执行过程中如果判断含有该占位符,且funcName存在,则会执行相应的函数后进行替换。先支持函数如下:

__random(param1,param2):随机生成一个定长的字符串(不含中文)。param1:长度(非必填,默认为6),param2:纯数字标识(非必填,默认为false)。
__randomText(param1): 随机生成一个定长的字符串(含中文)。param1:长度(非必填,默认为6)
__randomStrArr(param1,param2,param3):随机生成一个定长字符串数组。param1:数组长度(非必填,默认为1),param2:单个字符串长度(非必填,默认6),param3:纯数字标识(非必填,默认为false)。
__date(param1): 生成执行该函数时的格式化字符串。param1为转换的格式,默认为‘yyyy-MM-dd’。
__generateStrArrByStr(param1,param2):生成定长的字符串数组。param1:参数为数组长度 即生成参数个数,param2:字符串
__sub(param,params...):减数。第一个参数作为减数,其他参数均作为被减数。
__max(params...)获取所有参数的最大值。
__plus(params...)将所有参数进行相加。//参数中其中有一个包含小数点将会返回带小数点的值
__multi(params...)将所有参数相乘。
__bodyfile():。
  1. //若param中值为:
  2. {"username":"__random(6,true)"}
  3. //实际执行时,username的值会替换为长度为6的数字随机数如:
  4. {"username":"653495"}
复制代码
待优化

.支持xml
.支持auth
.支持delete,put等方法
.支持验证数据库
.待加+++++

最后,欢迎拍砖,吐槽

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2017-6-12 10:25:43 | 只看该作者
这个整合,除了报表,核心部分比用java-assured好在哪?
java-assured本身已经有json和xml的处理封装。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2017-6-12 10:27:02 | 只看该作者
我在试用zson,语法挺简单,我觉得你可以试着上传到官方maven库上
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-21 10:30 , Processed in 0.068962 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表