如何开展灰盒测试[3]:接口测试实战——测试跨主机的模块接口

发表于:2010-12-29 11:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:编程随想(CSDNblog)    来源:51Testing软件测试网采编

  跨主机的交互方式,必然涉及到网络(为了防止爱抬杠的同学挑刺,事先声明:本节提及的网络,均是基于TCP/IP网络)。在TCP/IP协议栈的4个层次中,模块间的交互方式主要是位于上面两层(传输层、应用层)。

  有些软件系统,直接采用某种现成的应用层协议(比如HTTP)来进行跨主机的通讯。这时候,测试人员就只需关心该应用层协议,不用操心传输层是如何实现的。

  还有一些软件系统,自己实现了某种专有的应用层协议。这种情况下,对测试人员的要求就比较高了——测试人员需要大致了解传输层的知识以及该专有应用协议的格式。

  ★ 基于Web接口的交互(HTTP协议)

  由于这几年B/S系统大行其道,而B/S系统,总是离不开HTTP协议,所以俺首先来介绍它。

  在B/S系统中,服务端(也叫后端)总是会提供一些Web接口给客户端(前端)进行调用。这种调用总是基于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

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号