`
100Continue
  • 浏览: 159706 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

web服务器测试工具Gulu——HTTP接口测试工具

阅读更多

HTTP接口测试工具,简单讲就是根据测试需求,向所测Web Server发起各种各样的Request请求,完整的获取Web Server返回Response响应。并能够便捷地对Response响应的各个内容进行验证。

那么web服务器测试工具Gulu——HTTP接口测试工具是如何做到的呢?

本篇博文将结合代码实现及UML图示从请求设置,响应保存,响应验证,3个部分展开介绍。

 

【作者】公远/陈震(gongyuan.cz$taobao.com/ 100continue$sina.com

 

【源码下载】

github地址:https://github.com/100Continue/Gulu--web-server-test-tools

 

【扩展阅读】

 

web服务器测试工具Gulu——简介

 

【功能介绍】

1. 请求设置功能:

设计要求:

    a. 由于测试需求千差万别,因此需要支持各种请求构建需求,如自由定制MethodHeader;请求Body允许各种类型——form表单类型的Key-Value对;MultiPart分段上传的body类型;ByteArray类型、String类型、InputStream类型、上传数据来自本地文件等;支持绑定虚拟IP的请求等等需求。

        b. 支持代码编写便捷的要求;

 

具体实现:

    结合上述设计要求及保障可扩展性,可维护性的要求。采用策略模式——将数据与算法分开的思路实现。详情参见下幅UML图:





 
 
 

        Request作为数据保存类,复杂保存Request请求所涉及到的所有数据信息;

        注:从代码编写便捷角度出发,HeaderForm表单body设置支持String类型传入,如Header模板:a:b$c:d$cookie:tt=xx;cc=pp;表示Header为:a:b  cd  cookie:tt=xx;cc=pp; Form表单Body模块:a=b$c=d$e=f表示Form表单Body为: a=b c=d e=f

        RequestExecution作为各种请求算法实现类,组合Request的各种数据向Web Server发起请求,支持本地IP地址及绑定虚拟IP地址的请求发起。

        注:从代码编写便捷角度出发,定义多种doRequestdoRequestInIpBinding接口,从而实现一行测试代码发起测试的目的;

        GetRequestDeleteRequestPutRequestPostRequest作为具体请求类型对象,通过各种的get*Method接口实现不同请求类型的区分;

        注:PutRequestPostRequest需要设置Body,如果未设置Body将抛出Exception报错;

        BodyEntity接口定义了各种Body类型所需要支持的公共接口,Request类的Body数据直接采用该接口类型进行定义,从而不必再区分各种不同的Body类型。

       ByteArrayBodyEntityFileBodyEntityInputStreamBodyEntityStringBodyEntityMultipartBodyEntity作为具体Body类型的实现类。

 

     代码应用:

        

// 发起自定义Get请求
new GetRequest().doRequest(url, headers);

// 发起自定义Post请求上传Form表单数据并保存成Response对象
Response response = new PostRequest().doRequest(url, headers, formBody);

// 发起自定义Put请求上传本地文件并保存成Response对象
FileBodyEntity fileBody = new FileBodyEntity(filePath, null);
Response response = new PutRequest().doRequest(url, headers, fileBody)

// 发起自定义Post请求上传Multipart数据(包含本地文件、bytearray、inputstream类型,string类型)
StringBodyEntity stringBody = new StringBodyEntity("string body content", null, null);

FileBodyEntity fileBody = new FileBodyEntity(filePath, null);

ByteArrayBodyEntity byteArrayBody = new ByteArrayBodyEntity("byte array body content".getBytes(), null);

InputStream inputStream = new FileInputStream(new File(filePath));
InputStreamBodyEntity inputStreamBody = new InputStreamBodyEntity(inputStream, -2, null);

MultipartBodyEntity multipartBody = new MultipartBodyEntity(stringBody, fileBody);

new PostRequest().doRequest(url, multipartBody);

 

2. 响应保存功能:

    设计要求:

     a. 能够完整的保存Web Server返回的所有数据;

     b. 能够自由便捷的取得所需要Response各个部分的数据;

 

    具体实现:

    基于上述设计要求,将Web Server返回的所有数据保存到Response类中,并对外提供查询接口,具体实现见下图:




 
 

        Response作为Web Server返回的数据保存类,将状态码、状态提示、Header数据等保存于对象中,考虑到响应头中可能出现未包含Content-length Body长度超过最大Integer这两种情况,因此将Body保存成本地文件,对外提供getResponseBodyAsStream接口进行访问。

        注:除了响应头未包含Content-length Body长度超过最大Integer这两种情况外,响应Body均可以通过getResponseBodyAsString接口进行访问。

 

    代码应用:

        

// 请求后保存成Response对象并获取StatusCode
Response response = new PostRequest().doRequest(url, headers, formBody);
int statusCode = response.getStatusCode();
          
// 请求后直接获取Header数组
Header[] headers = new GetRequest().doRequest(url).getHeaders();
 
// 请求后直接获取响应Body
String body = new GetRequest().doRequest(url).getResponseBodyAsString();

 

 

 

3. 响应验证功能:

    设计要求:

     a. 支持所有Response组成部分的匹配验证,并且支持全匹配及包含匹配两种方式;

     b. Response Body验证尽可能多的支持各种类型,如String类型、Json对象、本地文件对比验证等;

          c. 代码编写便捷,类似Junit的Assert的使用习惯及验证失败后抛出Exception及失败提示信息;

 

    具体实现:

    基于上述设计需求,响应验证功能设计有以下3个特点:

     a. 为了具有类似JunitAssert的使用习惯、验证类均为Static静态类,用户可直接使用类型调用验证接口进行测试;并且在Tools工具类中实现ComparisonFailureHandle FailedHandle,使得验证结果及错误信息的展现与JunitAssert相似,方便Bug定位和调试;

     b. 将除Body外的所有Response组成部分的匹配验证单独封装在AssertBehavior中便于统一维护和扩展;

     c. 继承于AssertBehavior类分别实现了3种不同类型的Response Body验证类,如AssertStringBody专门应用于Response BodyString类型的验证;AssertJsonBody专门应用于Response BodyJson对象的验证;AssertFileBody专门应用于Response Body需要与本地文件进行对比验证的测试;

注: Headers验证仅验证用户预期的Key Value,对Response包含的其他Header不做验证处理。并且相应的Header Value验证为包含匹配验证;

 

    详情参见下图:




 
 

 

    代码应用:

    

// 请求后保存成Response对象并验证StatusCode
Response response = new PostRequest().doRequest(url, headers, formBody);
AssertStringBody.assertStatusCode(response, 200);
AssertJsonBody.assertStatusCode(response, 201); // 验证失败则直接抛出Exception及Junit Assert类型的提示信息;
 
// 请求后保存成Response对象并验证Headers信息
Response response = new PostRequest().doRequest(url, headers, formBody);
AssertStringBody.assertHeaders (response, expectHeadersStr); // headers 支持上述Request类中设计的Header String 模板;
AssertJsonBody. assertHeaders (response, expectHeaders); // headers支持Header[];
 
// 请求后保存成Response对象并验证String类型的Body信息
Response response = new PostRequest().doRequest(url, headers, formBody);
AssertStringBody.assertBodyEQ (response, expectResponseBody); //Body验证方式为全匹配方式;
AssertStringBody. assertBody (response, expectResponseBody); // Body验证方式为包含匹配方式;
 
// 请求后保存成Response对象并验证Json类型的Body信息
Response response = new PostRequest().doRequest(url, headers, formBody);
AssertJsonBody.assertBody (response, expectResponseJsonBodyStr); //Body为String类型的Json数据;
AssertJsonBody. assertBody (response, expectResponseJsonBodyStr); // Body为Json对象;
 
// 请求后保存成Response对象并将Response Body与本地文件进行对比验证类型
Response response = new PostRequest().doRequest(url, headers, formBody);
AssertFileBody.assertBody (response, localFilePath, offset, size); // 支持与本地文件的部分内容进行对比验证
AssertFileBody. assertBody (response, localFilePath); // 只需上传本地文件路径即可;
 
// 请求后保存成Response对象并直接对比两个Response对象
Response response1 = new PostRequest().doRequest(url, headers, formBody);
Response response2 = new PostRequest().doRequest(url, headers, formBody);
AssertStringBody.assertResponse (response1, response2);
AssertJsonBody.assertResponse (response1, response2);

 

 OK,web服务器测试工具Gulu——HTTP接口测试工具 介绍完毕,抱歉拖了这么久才完成文档撰写。

          

 转发请备注转自:100continue.iteye.com

 

  • 大小: 221.1 KB
  • 大小: 662.8 KB
  • 大小: 81.6 KB
1
1
分享到:
评论
1 楼 wzwahl36 2015-01-15  
简单的接口测试:http://www.atool.org/httptest.php

相关推荐

    web服务器测试工具Gulu——HTTP接口测试工具1

    在本文中,我们将深入探讨一款名为Gulu的Web服务器测试工具,它专注于HTTP接口测试。Gulu工具的主要目的是为了方便地模拟各种RESTful请求,并全面地处理和验证服务器的响应。接下来,我们将从请求设置、响应保存和...

    web服务器测试工具Gulu——简介1

    总的来说,Gulu是一个强大的Web服务器测试工具,集成了多种实用功能,涵盖了HTTP接口测试、分布式进程控制、文件管理以及性能测试自动化等多个方面,旨在提高测试效率和准确性。由于部分功能可能受限于公司内部使用...

    web服务器测试工具Gulu——基于JSCH实现分布式进程管理&分布式文件管理工具1

    在Web服务器测试工具Gulu中,分布式文件管理是其核心特性之一,主要依赖于JSCH库来实现在多台远程服务器之间的文件和文件夹操作。JSCH是一个Java实现的SSH2库,提供了包括SFTP(Secure File Transfer Protocol)在内...

    接口测试工具

    - **基本介绍**:Gulu是一款具有高度定制化特性的接口测试工具。 - **优点**: - 支持多种请求构建方式,包括自定义Method、Header等。 - 支持多种请求Body类型,如form表单、多部分上传等。 - 支持代码编写,...

    Go-Gulu⭕Go语言常用工具库这个轱辘还算圆

    "Go-Gulu圈圈Go语言常用工具库这个轱辘还算圆"这一标题,暗示了我们讨论的是一个Go语言的工具集合,这些工具在日常开发中非常实用,并且已经经过了一定程度的验证和优化。 Gulu项目,正如其名,是一个围绕Go语言...

    gulu-ui-web:点击预览

    gulu-ui-web通过其直观的组件和易于理解的API,为开发者提供了构建高效、美观的预览页面的工具。 HTML(HyperText Markup Language)是构成网页的基础语言,用于定义网页内容的结构和样式。在这个项目中,HTML被...

    gulu::hollow_red_circle: Go 语言常用工具库,这个轱辘还算圆!

    :light_bulb: 简介Gulu 是一款 Go 语言常用工具库。欢迎到 Gulu 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源::sparkles: 功能文件操作 gulu.File获取文件大小判断路径是否存在判断文件...

    gulu:文档地址

    安装 使用yarn安装 ...import ' fanlelee/dist/gulu.css ' export default { name : ' App ' , components : {GButton} } </ script > Fanlelee用户界面 包含了基本轮子按钮,Toast,Icon,Input ...,

    gulu-ui-1

    综上所述,"gulu-ui-1" 是一个基于Vue.js的前端UI库,它提供了一系列的组件和工具,旨在简化Web应用的开发过程,提高开发效率,同时保持良好的用户体验和性能。开发者可以利用它的组件、响应式设计和定制能力,快速...

    GuLu-Vue2

    "GuLu-Vue2"是一个由作者凯创建的UI组件库,专为Vue2框架设计。这个组件库致力于提供一套简洁、高效的用户界面元素,帮助开发者快速构建美观的应用程序。在开始使用GuLu-Vue2之前,有一个重要的前置步骤需要完成,即...

    gulu-ui

    "gulu-ui"是一个以Vue.js为核心的前端UI框架,它为开发者提供了丰富的组件库和优雅的设计风格,旨在简化Web应用的开发过程,提高开发效率。Vue.js是一个轻量级但功能强大的JavaScript框架,以其易学易用、高性能和...

    gulu.rar_FLICKER_SIMULINK_电压闪变_电压闪变仿真模型_闪变

    在“gulu.slx”文件中,包含了这样一个完整的电压闪变仿真模型。用户可以打开此文件,查看和学习模型的结构,以及各模块的具体设置。通过研究和修改这个模型,不仅可以加深对电压闪变现象的理解,还能掌握Simulink在...

    GuLu-demo:轱辘-一个Vue UI组件

    总的来说,GuLu-demo是一个实用的工具,它将Vue.js的灵活性与UI设计的实用性相结合,为开发者提供了一个快速构建现代Web应用的解决方案。通过学习和使用这个组件库,开发者不仅可以提高开发效率,还能提升应用的用户...

    scrollgraph:[c] 无限滚动带宽可视化

    在本案例中,我们关注的是一个基于JavaScript实现的无限滚动带宽可视化工具——scrollgraph。 ### 1. 滚动事件与滚动图 滚动图的关键在于监听用户的滚动事件,并在事件触发时更新图表。JavaScript的`window....

    zch-ui:Zch,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库

    安装$ npm install zch-gulu// or install$ yarn add zch-gulu使用import { ZchButton } from 'zch-gulu'import 'zch-gulu/dist/index.css'<zch>Button特性:partying_face:开箱即用的高质量 Vue 组件。:gear:20+ 高...

    ios自定义图片滚动控件

    自定义的图片滚动控件 github地址: https://github.com/gulu210/GLScrollPage_webImage-.git (加载网络图片的) https://github.com/gulu210/GLScrollPage-.git (加载本地图片的)

    KUKA Router插件压缩包

    其中,KUKA Router 插件是连接机器人与 EthernetKRL(以太网KRL)通信的关键工具。本篇文章将深入探讨KUKA Router 插件的功能、应用及其在实际操作中的步骤。 首先,我们来了解KUKA Router 插件的基本概念。KUKA ...

    Java工程师成神之路.zip

    思维导图是一种有效的学习工具,它以图形方式呈现信息,帮助学习者更好地理解和记忆。在这个思维导图中,你可能会找到如下内容: 1. Java语言基础:包括数据类型、变量、运算符、控制结构(如if语句和循环)、函数...

    中文菜表达.pdf

    - **叉烧咕噜豆腐**(Sweet and sour beancurd with BBQ pork, Chashao gulu doufu):广东风味的糖醋豆腐。 - **蟹肉虾子烧茄子**(Braised crud meat with eggplant, Xierou xiazi shao qiezi):海鲜与茄子的融合...

    Objective-C高级编程†

    类的声明通常在头文件(.h)中进行,包含了类的接口,而在实现文件(.m)中编写类的方法。消息传递是Objective-C的核心,通过"[]"来发送消息给对象,例如:[object performTask]。 面向协议(Protocols)是...

Global site tag (gtag.js) - Google Analytics