当前位置: 代码迷 >> JavaScript >> (3)HTTP JSON协议接口测试自动化实例(自动化测试开发实践系列)
  详细解决方案

(3)HTTP JSON协议接口测试自动化实例(自动化测试开发实践系列)

热度:460   发布时间:2012-11-03 10:57:44.0
(三)HTTP JSON协议接口测试自动化实例(自动化测试开发实践系列)
(一)测试背景概述

到新公司入职后接受一个项目的测试任务,项目结构大致是:

即产品1和产品2为待测试对象,抽象出来可以归结为【http json协议接口测试】与【http web功能测试】。

其中【http web功能测试】针对未曾接触的一种数据库,还包含了大量数据库和SQL级别的专有操作测试内容,此处不予讨论。

测试对象无论是由C/C++还是Java还是JS/Html实现,对于协议测试和功能测试(白盒测试和单元测试另当别论),都不需要深入了解该语言,熟悉任一种高级语言(最好还有一种脚本语言)+自动化思维意识 +快速学习能力,完全能实施测试自动化策略。

网上查了一下:

JSONJavascriptObjectNotation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。常应用于http通信和数据传输,应用如Apache开源搜索引擎ElasticSearch等。

JSON建构有两种结构:

1. “名称/对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。

2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

* Linux C/C++单元测试和覆盖率统计参见:http://blog.csdn.net/w565911788/article/details/7617099

即使对上面一无所知,先来分析一下【http json协议接口】的特点。

(二)测试需求分析

1.      Web页面(即产品2HTTP请求数据包(post/put)格式如:

 POST 'http://home/cm_api' -d     

'{"task":"login",

"token":"ae873897a0a9a2afb9bb12a49c4237744a82ea77049df67c9b58d7acc5c0c7527926f07dd201b6aa",

"id":"admin","password":“123456",

"clientver":"8.4"} '

 

POST 'http://home/cm_api' -d

'{"task":"startinfo",

"token":"ae873897a0a9a2af11077f40cf303d7406ec4d40b90b3a041b8a4edfd63d0fbe7926f07dd201b6aa"}'

 

2.  Web Service(即产品1)响应数据包格式,除以下其余未知:

1)格式错误,不响应;(http json协议层判定)

2 token(每个用户每次登录时取得,唯一)错误或者连接、数据库等其他问题,响应 status: failure

3token正确,其他正确,响应 status: success

如:

{  "__EXEC_TIME" : "1 ms",   "note" : "none",  

"status" : "success", 

 "task" : "authenticate",  

“token” : “ae873897a0a9a2afdb676eefe4e864e2b0e3abb07cd73cf0944e77d6c792b1aa7926f07dd201b6aa”}  

--登录成功,响应 status: success,并取得token

 

{  "note" : "Request is rejected due to invalid token. Please reconnect.",  

"status" : "failure", 

 “task” : “startinfo”} 

 --token错误,响应 status: failure

 

3.       接口会扩展,增加或改变(数百个)。

 

4.       几乎所有接口有严格执行顺序(如顺序执行:login-> optimized->stopdb->logout),login成功获取该用户本次动态token,后面每个接口请求包使用此token。动态token,即测试数据和结果都不是固定的,故Fitnesse等一些接口测试工具难以实现。

 

5.       用例中可含自定义的任意参数变量,如针对Linux$DBNAME=/home/DBNAME$DBNAME_DATABASES =/home/DBNAME /databases ,…Windows$DBNAME=C:\DBNAME $DBNAME_DATABASES =C:\DBNAME \databases ,…

 

6.       成本1=不熟悉à找测试工具à学习测试工具à执行测试) >成本2=自己花部分时间写个测试程序或工具[灵活可控:生成自定义测试用例和判定结果、报告]

 

7.      最后解决方案确定:自己花部分时间写个测试程序或工具[灵活可控:生成自定义测试用例和判定结果、报告]

(三)设计和技术细节准备

1.      测试用例和测试结果生成,我希望按以下数据格式生成文件,固定分隔符分割(便于excel打开),token错误响应 status: failurePasstoken正确响应status: successPassFail的记录status手工核查(扩展:每条接口用例设定一个字段表示期望值,检查收到期望值则Pass,收不到则Fail)。

Case-IDCMS-145

Interface Nameupdateattribute

Preconditionscorrect token: ae873897a0a9a2afd540113d7e03001469caacde0c9322491cd95e57cef94f427926f07dd201b6aa

Stepcurl -POST 'http://home/cm_api' -d '{"task":"updateattribute","token":"ae873897a0a9a2afd540113d7e03001469caacde0c9322491cd95e57cef94f427926f07dd201b6aa","dbname":"demodb","classname":"athlete"}'

Result{  "__EXEC_TIME" : "11 ms",   "note" : "Failed to connect to database server, 'demodb', on the following host(s): localhost:localhost",   "status" : "failure",   "task" : "updateattribute"}

P/FF

Remarkstatus: "failure"

 

2.      测试输入数据(开发维护):

数据包文件列表(根据接口名字命名,增加一个接口相应增加一个)

接口顺序文件json_list(接口名的执行顺序列表,根据此文件中接口顺序执行)

 

3.      动态token获取:

longin 响应保存tokenà读取jsonlist保存列表à根据jsonlist顺序读取对应接口名数据包文件,并替换token字段值à请求和响应à检查响应结果的状态和其他内容(断言)

 

4.  两种方式实现(C#):

―  方式一:封装开源Ssh库登录一台Linux调用Curl命令,记录整个过程并分析处理,生成测试用例和测试结果文件,人工查看和整理。(涉及平台环节更多,更锻炼。)

―  方式二:利用.Net丰富的Web类库和其他库文件实现。

(更简单,技术积累熟练程度,时间分钟级到小时级即可完成。)

(四)开发实施和自测

1.      SSH方式远程登录Linux

2.       执行流程举例

3.       保存正确的token

4.       几个读写文件流

5.       顺序读取、拼接、发送、接收、判断处理、记录

6.       配置参数项:json请求地址、cci请求地址、自定义参数变量(变长)、用例路径、是否循环(长时间稳定性测试)

(五)结果演示

1.             执行效果(可配置循环长时间测试)

2.       输入输出生成结果

3.    【新版本检测-->新版本部署-->执行测试工具】

【整理查看测试结果-->校验Fail问题-->提交bug

―  其中,新版本检测à新版本部署à执行测试工具流程可以通过一些测试框架(如staf/stax,或其他,或自己灵活开发定制等)实现全自动(包括版本通知和测试结果通知),可实现手工时间集中到“整理查看测试结果à校验Fail问题à提交bug”流程。

 

附:通用自动化测试工具效果

1. 主体框架实现特定功能,高级语言完成,并开放大量实用API,且不断增加和完善

2.  嵌套或封装一种或多种脚本语言解析器,能够动态执行测试用例脚本,对Windows窗体、Web、代码、接口、协议或性能等若干方面进行测试(扩展:录制功能)

3. 流程完善,能够准确高效的解放人力和深入测试,手工尽可能少的参与或专注于测试用例脚本工作

4. 可扩展性强,能够远程操控多个多种平台(分布集群,通过网络通信、协议通信等),能够并行调度执行,可配置可存储,资源共享方便

5. 自动化框架工作:检测新的版本à下载、编译、批量部署à调用指定测试脚本执行测试à邮件或消息通知QA测试结果报告路径和发现的bug

6. 手工工作:编写修改测试脚本并上传、收邮件校验bug、喝咖啡。

  相关解决方案