API测试

来源:百度文库 编辑:神马文学网 时间:2024/04/25 06:18:14
一、 API测试简介
API测试与其他测试一样,首先要做的是把测试环境搭建好,各种必须的配置文件都准备完毕,在开始测试之前确保服务器上的程序是可测的(有必要的话可以寻求研发帮助).
API测试除了要测试功能以外还要测试接口。一个API或者函数可以作为一个单元,对这个单元进行单元测试,你可以用黑盒方法,也可以用白盒方法。黑盒方法就是不去看这个单元的实现代码,只根据这个单元的功能说明来设计测试用例并进行测试。测试的时候你可能需要写一点简单的代码来做数据准备,然后去调用需要测试的接口,一般也需要写一些代码来接收或者验证被测单元的输出是否正确;白盒测试方法就是你通过分析被测单元的实现代码,根据不同的测试策略(如分支覆盖或者逻辑覆盖等)来设计测试用例并作相应的测试。平台产品的需求很多是来自网站,简而言之,平台产品提供API供网站研发使用。我们需要测的就是这些暴露出来的API,确保这些API在功能上没有缺陷。
API测试和一般手工测试在测试原理上是一样的。
例如在aranda-1.1中有这样一个需求,用户能在线删除自己的图片。很简单,正常测试流程中,我们一般这样做,在页面上传一个普通图片,然后选中该图片,点击删除,最后去验证该图片是否被正常删除.但是在aranda-1.1中,只能看到接口,没有前台页面上传文件,故需要写一点代码来模拟这个过程:
public void testDeleteImage() throws Exception {
1 String path = "D:\\temp\\test.jpg";
2 this.fileCache = new FileCache(getImageFile(path));
3 ArandaFileRef imageRef =arandaFileService.createFile("src/source.jpg",
4 true, new MemoryInputStreamWrapper(fileCache));
5 assertTrue(imageRef.delete());     //true
6 assertFalse(imageRef.exists());   //true
}
上面的测试代码中,第1,2,3,4行代码所做的事情就是上传一个图片,第5行去调用需测试的接口,并验证结果,第6行验证图片是否已经被真的删除。
二、 明确哪些是需要测试的API
研发的代码中可能实现了很多API, 首先必须明确哪些需要测,哪些不必要测; 哪些这个迭代不测,下一个迭代再测; 有一些接口是可能就直接调用另外一个接口,这些接口有没有必要测等。这些问题最好在提交测试之前根据需求和计划跟研发沟通清楚, 这些没有确定清楚直接导致漏测接口或者测了没必要的接口(无用功) 。
三、 明确每个API实现的功能和设计TC
在确定了哪些接口需要测试之后,就必须明确每个接口实现的功能及接口的参数、返回值的意义等。理解这些接口参数的含义,这些参数将是设计TC的维度。采用黑盒测试的方法,等价类划分,边界值分析,错误推测等常用方法均可使用。简单的说,这些参数可以看成一个一个输入框,类似网页手工测试一样,将准备数据输入即可。用黑盒的方法来为API设计TC和网页手工测试很类似,无非就是把参数看成输入框而已。但是API测试在设计TC的时候还可以“偏白”一点,就是直接去看接口的实现的代码,特别是一些异常情况的处理,一般程序在异常处理上总是相对于正常情况要脆弱一些,然后对前面用黑盒的方法设计好的TC进行一些补充。
值得注意的是,1)TC设计的时候尽量详细,粒度尽量的小,测试代码都是类似的,可能仅仅是传入的参数不一样,而测试校验的工作是计算机做的,所以一般情况下针对某个接口,10个TC和20个TC跑的花费是差不多的,但是测试粒度方面和代码覆盖率方面可能就增加了不少。2)TC也是要进行维护的,在测试执行阶段,如果发现需要补充TC,最好不要在现有的测试代码上改,要新加代码,同时在TC文档中也同步更新。如果是TC的缺陷,才去修改对应的代码,并在TC文档中做更新。3)在设计TC文档的时候,测试步骤的粒度最好能够细到每一步需要调用哪个函数或接口,有点类似伪代码的风格,这样在写代码的时候就不用怎么思考,仅仅去实现它。
四、 依TC写代码
在aranda-1.1中,每个测试类去继承AbstractDependencyInjectionSpringContextTests,SpringContextTest是 junit的扩展。注入需要的类(spring IoC),然后按照TC上的测试步骤的描述,一步步完成代码的实现,照葫芦画瓢就行。开始运行调试。可以参见下面的例子(图1和图2连起来),TC文档可以写在javadoc里面。(注:写代码最好了解一下spring IoC和Junit)。

图1:一些初始化

图2:依TC写代码


附:Debug及eclipse快捷键
调试方式:打断点
1.Step Into (also F5) 跳入
2.Step Over (also F6) 跳过
3.Step Return (also F7) 执行完当前method,然后return跳出此method
如果一行有很多方法,
当第一次按F5键就跳入这一行第一个方法,F6一步一步调试,F7跳出这方法.
当第二次按F5键就跳入这一行第二个方法,F6一步一步调试,F7跳出这方法.
以此类推.想进入这一行第几个方法,就按几次F5和F7.
详细参见:http://www.ibm.com/developerworks/cn/opensource/os-ecbug/index.html?S_TACT=105AGX52&S_CMP=techcto

Eclipse快捷键:
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变味小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)