序
网络上接口测试资料很多,但是都是很散乱的,于是整理下资料,就有了这个blog
什么是接口测试
接口测试是测试系统组件间接口的一种测试。
接口测试可以分为哪几种
1、系统与系统之间的调用,比如银行会提供接口供电子商务网站调用,或者说,支付宝会提供接口给淘宝调用
2、上层服务对下层服务的调用,比如service层会调用DAO层的接口,而应用层又会调用服务层提供的接口,一般会通过
3、服务之间的调用,比如注册用户时,会先调用用户查询的服务,查看该用户是否已经注册。
测试思路
对于接口测试,首先测试人员要懂代码,你只需要知道接口的作用是什么就可以了(有文档更好,但大部分都没有);其次,自己去读开发的代码;然后,根据该接口功能及代码写测试用例。
用例设计:
1:写一个程序去调用该接口,看是否能够达到该接口所定义的功能
2:根据该接口参数,构造不同的用例,测试接口在参数合法及非法情况下能否达到预期效果
3:根据该接口中的逻辑,设计不同条件的用例,测试该接口实现代码的逻辑
4:进行容错及健壮性测试
5:静态检测代码,看是否有内存泄露、或永远走不到的分支、代码规范及逻辑是否合理。
6:对于一些接口,需要进行多线程测试
实现方法
工具来说是很多的,比如loadrunner、soapUI、Jemter等都是可以实现的,本文章中就直接用loadrunner实现,下面的是例子,测试的接口WSDL的链接:
http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL
接口测试协议说明
接口测试我们一般用WSDL协议的,WSDL是网络服务描述语言 ,是对Web Service的描述语言,是一种接口定义语言,用于描述Web Service的接口信息等。
测试步骤
创建脚本
打开LR的Virtual User Generator并新建一个协议为“Web Services”的脚本如下图:
导入WSDL
新建成功后进入功能和编写界面后,先点击“Manage Services”打开管理服务界面(如下图①),在弹出的“Manage Services”窗口中点击“Import”(如下图②),然后在新打开的“Import Service”的窗口中选择WSDL的导入形式(如下图③)。因根据WSDL来自不同的方式,选择对应的方式进行导入
而本手册以“URL”的形式进行导入,因此填入对应WSDL的URL后点击“import”(该WSDL为公网的各地市天气Web Service的WSDL描述地址)。导入成功后将可以看到该WSDL提供的接口描述信息,最后点击“OK”完成WSDL导入。
选择发送请求的方法和内容
导入WSDL成功后,进入默认生成的Action函数中,并让光标停留在该函数中(为了便于后续测试将“Service Call的方法”添加至Action函数中,如下图①及画圈处);点击“Add Service Call”(如下图②);在打开的“New Web Service Call”窗口中,右上角呈现可调取的方法(如下图③)。
选取其中一个方法“getSupportCityString”,可在下图中左下角查看到这个方法中的相关参数,而我们主要使用输入参数“Input Arguments”(具体输入填写规则可见WSDL描述文档,若没有明确文档,需与对应开发人员沟通),对应填入合规的请求值“福建”后点击“OK”
点击“OK”后界面回到了脚本编辑界面,并且LR自动把填写的请求转化为具体的脚本。我们通过“运行按钮”(下图画圈处)进行回放并查看回放日志结果
默认配置的回放日志如下图
若要查看详细日志可通过Vuser菜单下的“Run-time Settings”中General-log下的日志开启相应的日志类别,成功设置后将会在下一次回放中生效。(回放内容较多因此不在该册内贴事例图)
获取单个结果处理方式
在成功回放脚本后,在Virture User Generator工具栏点“Tree”(如下图①)将编写界面切换至树形界面,再选择对应的发送请求动作(如下图②),并切换至该动作对应的快照页签下的接收显示内容(快照是必须成功回放一次脚本后才可生成)
展开上图的Response信息下的“soap:Body”将呈现服务端返回给我们发出请求的对应数据
然后我们把其中的一个结果作为参数获取如下图:
在打开的“XML Parameter Properties”窗口中给该变量定义名称
点击OK后在Virture User Generator工具栏点“Script”将树形界面切换至编码界面,后可见LR对应生成的获取单个结果的代码
我们通过以下语句进行打印获取参数的结果以验证是否正确
lr_output_message(lr_eval_string("{ParamValueA}")); //“{ParamValueA}”对应定义的变量名 |