如何开展灰盒测试[4]:接口测试实战――测试跨主机的模块接口
- 博客分类:
- 技术杂绘
如何开展灰盒测试[4]:接口测试实战――测试跨主机的模块接口
2010年12月26日
跨主机的交互方式,必然涉及到网络(为了防止爱抬杠的同学挑刺,事先声明:本节提及的网络,均是基于TCP/IP网络)。在TCP/IP协议栈的4个层次中(参见这里 ),模块间的交互方式主要是位于上面两层(传输层、应用层)。
有些软件系统,直接采用某种现成的应用层协议(比如HTTP)来进行跨主机的通讯。这时候,测试人员就只需关心该应用层协议,不用操心传输层是如何实现的。
还有一些软件系统,自己实现了某种专有的应用层协议。这种情况下,对测试人员的要求就比较高了--测试人员需要大致了解传输层的知识以及该专有应用协议的格式。(具体请看本帖的Socket这一节)
★基于Web接口的交互(HTTP协议)
由于这几年B/S系统大行其道,而B/S系统,总是离不开HTTP协议,所以俺首先来介绍它。
在B/S系统中,服务端(也叫后端)总是会提供一些Web接口给客户端(前端)进行调用。这种调用总是基于HTTP协议来进行(HTTP协议的介绍,请看维基百科的这里 )。当你针对服务端进行灰盒测试,你需要模拟客户端的各种HTTP请求(既要包括合法的请求,也要包括各种非法的、无效的请求),然后再检验服务端返回的响应(Response)内容。如果响应内容不符合接口文档的约定,就表明该服务端模块出Bug了。
HTTP请求(Request),常用的主要是GET方式和POST方式。这两者的用途及区别,维基百科上已有,俺就不浪费口水了,直接说如何进行脚本编程。
◇使用内置的标准模块
在Python脚本中,内置了完善的模块(urllib和urllib2),以便于你操作HTTP协议。对于简单的使用,urllib就足够了。
比如俺想用GET方式抓取Google的主页,只需如下3行代码:
import urllib
f = urllib.urlopen("http://www.google.com/")
print f.read()
如果想往某个Web接口POST数据,并得到服务端的返回内容,只需再增加1行代码(构造POST参数):
import urllib
params = urllib.urlencode({name1:value1, name2:value2})
f = urllib.urlopen("http://xxxx/xxxx", params)
print f.read()
如果需要一些复杂点的功能(比如:操作cookie、使用带认证的proxy),urllib2就可以派上用场了。更多的使用细节,请看洋文的官方文档(这里 和这里 )。
◇使用cURL
俺博客的老读者,或许记得俺在09年初写过的一个帖子--cURL(优秀的应用层网络协议库) 。 看完这个帖子,你就能领会到:cURL是一个非常牛X的网络协议库,支持很多种网络协议(显然也包括HTTP)。这么牛X的一个开源库,自然会有不少编程 语言对其进行包裹。下面俺把cURL相关的脚本语言及其开源项目列一个表格。如果你不喜欢用Python,或许可以改用俺列举的其它脚本语言。
语言/平台 开源项目
Python pycurl
Ruby Curb
Perl WWW::Curl::Easy
dotNet libcurl.NET
★基于数据库的交互
在现有软件系统的开发过程中,操作数据库也属于家常便饭。因此,聊完HTTP协议之后,就得来聊一下数据库的操作。眼下,大部分程序员都是远程操作数据库,所以俺把数据库的操作也归入"跨主机"交互方式。(其实本节的内容也适用于操作本机数据库)
在很多软件系统中,软件模块需要从数据库中读取数据或者把自己生成的数据存储到数据库中。因此,测试人员需要通过一些测试脚本,在数据库中制造测试数据,以作为软件模块的输入;或者在软件模块把数据保存到数据库之后,验证其输出的数据是否符合接口文档的约定。
◇跨数据库的接口
所谓的"跨数据库的接口",顾名思义,就是这种编程接口可以支持多种数据库产品。如果你没有其它特殊的要求(比如性能),俺建议尽量用这种方式操作数据库。这样的好处是,万一哪天数据库平台换了,你的测试脚本可以不用大改(甚至不改)。
1、ODBC
ODBC是一种三跨(跨数据库、跨操作系统、跨编程语言)的数据库接口。大部分知名的数据库软件都支持ODBC方式访问。
Python有不止一个的ODBC开源项目,可以考虑用PyODBC 或ceODBC 。
2、JDBC
对于搞Java开发的同学,应该很熟悉JDBC。不过很多人有一个误解,以为只有Java才可以进行JDBC编程。其实不然!自从前几年JVM开始效仿DotNet,支持多种编程语言之后,很多脚本语言也可以在JVM上跑起来了。比如Python(JVM上叫Jython )、Ruby(JVM上叫JRuby )、Groovy 。作为测试人员,你也可以利用上述脚本语言,编写基于JDBC的数据库测试脚本。
3、ADO / ADO.Net
ADO / ADO.Net(以下简称ADO)是微软设计的跨数据库编程接口。既然是微软搞得,秉承其一贯风格,自然是不跨操作系统的。如果你所有的测试工作都在Windows平台上,也可以考虑用ADO来访问数据库。
如果要用Python进行ADO编程,可以考虑用PyWin32开源项目(官网在这里 )。它是专门针对Windows平台的Python扩展,让Python可以很方便地调用各种Win32的API(包括ADO的API)。
你还可以使用基于dotNet平台之上脚本语言。比如IronPython 、IronRuby 等。这些运行于DotNet之上的脚本语言,自然也就具有操作ADO的能力。
◇特定数据库的接口
前面已经提到"跨数据库的接口"有种种好处,那啥时候需要用特定数据库的接口捏?有时候,你需要使用某个数据库专有的某个特色功能,这时候,通用的数据库接口可能就搞不定了,你就需要用该数据库特定的编程接口来写脚本。当然,这种情况不是很多见。
下面,俺把几种常见数据库及其对应的Python开源项目列在如下表格中。
数据库 Python开源项目
Oracle cx_Oracle
SQL Server pymssql
DB2 pydb2
MySQL MySQL-Python
PostgreSQL psycopg2
SQLite (Python内置)
◇关于Python的补充说明
刚才介绍了多个操作数据库的Python开源项目。俺顺便补充一下:Python社区制定了一个数据库操作的规范 。那些比较靠谱的数据库操作的模块,都会遵循该规范。因此,你只要熟悉了某一个模块,也就很容易熟悉其它模块。
★基于网络文件系统的交互(NFS)
网络文件系统存在的目的,就是把跨主机的文件操作,伪装成本机的文件操作。所以,对NFS的灰盒测试,放到后面的帖子(主机内的跨进程交互方式)一起聊。
★基于其它应用层协议的交互
还有另外一些应用层的网络协议,其应用范围没有HTTP协议那么广,因此,Python没有把它纳入到内置的标准模块中。这时候,前面提到的 PycURL就可以派上用场了。你只要安装一个PycURL,就可以搞定十几种应用层协议 (FTP,FTPS,Gopher,SCP,SFTP,TFTP,TELNET,LDAP,LDAPS,IM AP,POP3,SMTP),非常之爽!
★基于Socket的交互
前面提到,如果软件系统自己实现了专有的应用层协议,那测试人员进行灰盒测试时,就必须了解该专有协议的格式以及传输层的知识。在这种情况下,测试人员可能需要直接和Socket打交道。
Python内置了对socket的支持,Python官方的洋文介绍在这里 。Python的socket API和传统的伯克利套接字API很像,如果你之前写过C语言的socket程序,那搞定Python的socket程序肯定是不在话下滴。
但你千万别高兴得太早。用脚本来模拟软件模块之间的socket通讯,主要难点往往不在于socket,而在于专有协议本身。有些专有的通讯协议格式多 变且复杂,有些虽然格式不太复杂,但是通讯双方交互的逻辑很复杂。因此,在socket层面进行灰盒测试,测试人员要多花精力在这方面。
对"跨主机的模块接口"该如何进行灰盒测试,就介绍到这里。下一个帖子介绍"主机内跨进程的模块接口"该如何搞。
发表评论
-
跨平台自动化测试部署
2012-01-20 09:42 439跨平台自动化测试部署 ... -
接下来做什么
2012-01-20 09:42 733接下来做什么 2010年10 ... -
跨平台编程和QT
2012-01-20 09:42 906跨平台编程和QT 2011年03 ... -
人民日报:中国企业未参与菲律宾石油开采竞标
2012-01-19 14:46 667人民日报:中国企业未参 ... -
人民日报:中国企业没有参与菲律宾南海石油开采竞标
2012-01-19 14:46 628人民日报:中国企业没有 ... -
第二届《全国京剧票友万里行艺术团》欧洲行开始报名
2012-01-19 14:46 843第二届《全国京剧票友 ... -
出口埃及记
2012-01-19 14:46 618出口埃及记 2010年11月28 ... -
消息处理函数
2012-01-17 04:31 714消息处理函数 2010年07 ... -
调用API函数
2012-01-17 04:31 948调用API函数 2010年11月26 ... -
从VC6到VC9移植代码问题总结收藏
2012-01-17 04:30 603从VC6到VC9移植代码问题 ... -
窗口和消息
2012-01-17 04:30 557窗口和消息 2011年06月27 ... -
vs2008使用点滴
2012-01-17 04:30 1906vs2008使用点滴 2011年02 ... -
2009亚太最具社会责任感华商领袖颁奖盛典8月2日隆重举行
2012-01-16 03:21 5952009亚太最具社会责任感华商领袖颁奖盛典8月2日隆重举行 ... -
林 伦 伦:关于海外潮学研究的几点看法和建议
2012-01-16 03:21 1268林 伦 伦:关于海外潮学研究的几点看法和建议 2011年03 ... -
011-5-20越南平阳沉船惨案陈述
2012-01-16 03:21 632011-5-20越南平阳沉船惨案陈述 2011年05月30日 ...
相关推荐
E:\最全面的Java接口自动化测试实战\第4章 企业级代码管理工具git的应用 E:\最全面的Java接口自动化测试实战\第5章 测试框架TestNG E:\最全面的Java接口自动化测试实战\第6章 测试报告 E:\最全面的Java接口自动化...
【软件测试】: 单元测试:模块接口、局部数据结构、路径、边界条件、错误处理、代码书写规范.doc
E:\最全面的Java接口自动化测试实战\第4章 企业级代码管理工具git的应用 E:\最全面的Java接口自动化测试实战\第5章 测试框架TestNG E:\最全面的Java接口自动化测试实战\第6章 测试报告 E:\最全面的Java接口自动化...
接口测试报告接口测试报告接口测试报告接口测试报告
性能测试实战(一 ~ 五)+自动化接口实战接口(一 ~ 三)+ 电商项目测试实战(一 ~ 四)
1、软件测试基本方法 静态分析 白盒测试 黑盒测试 2、测试模式 范围测试 说明书测试 风险测试 情景测试 组合测试 探索测试
公开课第十节:接口测试指南1.mp4 公开课第十一节:Jmeter完成自动化接口测试2.mp4 公开课第十二节:接口测试框架的前世今生.mp4 公开课第十三节:性能测试方案设计.mp4 公开课第十四节:python编程核心思想.mp4 ...
公开课第十节:接口测试指南1.mp4 公开课第十一节:Jmeter完成自动化接口测试2.mp4 公开课第十二节:接口测试框架的前世今生.mp4 公开课第十三节:性能测试方案设计.mp4 公开课第十四节:python编程核心思想.mp4 ...
接口测试的基本方法及常用接口测试工具使用说明。
这是一套完整的小程序测试课程,从用例编写,功能梳理,业务整理到接口测试的一整套体系结构。课程非常适合测试提高人员,目前在测试小程序人员,提高自己的业务,接口能力,增强个人水平。
GA/T 1400.4-2017《公安视频图像信息应用系统第4部分:接口协议要求》 公安视频图像数据库 视频图像信息数据库
本标准以《GM/T BBBB-2012可信计算 可信密码支撑平台功能与接口规范》为基础,定义了可信密码模块的命令测试向量,并提供有效的测试方法与灵活的测试脚本。 本标准适用于可信计算密码模块的符合性测试,不能取代器...
GET接口自动化测试方法学习,自己进行的总结,测试GET接口,与大家分享一下,希望大家多多指导,共同进步。有基础看更好哦!
本文介绍了单元测试(1 模块接口测试;2 模块局部数据结构测试;3模块中所有独立执行通路测试 ;4 模块的各条错误处理通路测试;5 模块边界条件测试。)中应该注意的重点
完整测试计划模板,详细描述了测试过程的前沿,测试计划的编写,人力的评估,风险的管理完整测试计划模板,详细描述了测试过程的前沿,测试计划的编写,人力的评估,风险的管理完整测试计划模板,详细描述了测试过程...
4、掌握用TestNG+HttpClient编写接口测试代码,做到全自动化测试。 | 章节 | 名称 | 内容 | |:---:|:---|:---| |第一章|接口测试基础|接口测试的定义 接口测试的意义 第一个实例| |第二章|接口测试用例...
IDEA接口测试RestfulToolkit插件IDEA接口测试RestfulToolkit插件IDEA接口测试RestfulToolkit插件
适合接口测试工程师,接口测试用例
vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具vrest 接口测试工具...
第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做?第二部分:主要介绍为什么要做接口测试,并简单...