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 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
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 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
API测试
API
什么是API
WINDOWS API
迅雷API
如何实现api钩子
浅谈api hook技术
Java XML API 漫谈
搜职网开放API接口
什么是Windows API
BREW 3.0 API 參考資料簡介
Java Transaction API概述
浅析本机API
JFreeChart中文API
Java API Design Guidelines
Servlet API中文帮助
Basic JMS API Concepts
Google中国地图API应用
Java NIO API详解
The Wireless Messaging API
libcurl - C API
Hibernate API简介
什么是Windows API
Google Analytics API发布