当今互联网产品的测试策略往往会采用菱形结构,即重量级 API 测试,轻量级 GUI 测试,轻量级单元测试,由此可见API测试在现今测试中的重要性不言而喻。本文将设计一个测试用例,通过这个测试用例我们去感受API测试是如何进行的,并介绍几款常用的测试工具。
目录
一、API测试步骤
二、使用cURL命令行工具进行测试
2.1 Session场景
2.2 Cookie场景
三、使用Postman图形工具进行测试
3.1 发起API请求
3.2 添加参数验证
3.3保存测试用例
3.4 执行测试用例
四、总结
对API的测试往往是使用API测试工具,比如常见的命令行工具cURL、图形界面工具Postman或者SoapUI、API性能测试的JMeter等。
首先,我们需要下载安装cURL,然后就可以通过以下命令发起Account API的调用。如下图
curl -i -H "Accept: application/json" -X GET "http://127.0.0.1:8080/account/ID008"
这行命令中参数的含义如下:
第一个参数“-i”,说明需要显示response的header信息;
第二个参数“-H”,用于设定request中的header;
第三个参数“-X”,用于指定执行的方法,这里使用了GET方法,其他常见的方法还有POST、PUT和DELETE等,如果不指定“-X”,那么默认的方法就是GET。
最后“ http://127.0.0.1:8080/account/ID008 ”,指明了被测API的endpoint以及具体的ID值是“ID008”。
当使用cURL进行API测试时,常用参数还有两个:
“-d”:用于设定http参数,http参数可以直接加在URL的query string,也可以用“-d”带入参数。参数之间可以用“”串接,或使用多个“-d”。
“-b”:当需要传递cookie时,用于指定cookie文件的路径。
需要注意的是这些参数都是大小写敏感的。
了解了这几个最常用的参数后,我再来分析一些最常用的cURL命令以及使用的场景,包括Session的场景和Cookie的场景。
如果后端工程师使用session记录使用者登入信息,那么后端通常会传一个 session ID给前端。之后,前端在发给后端的requests的header中就需要设置此session ID,后端便会以此session ID识别出前端是属于具体哪个session,此时cURL的命令行如下所示:
curl -i -H "sessionid:XXXXXXXXXX" -X GET "http://XXX/api/demoAPI"
如果是使用cookie,在认证成功后,后端会返回cookie给前端,前端可以把该cookie保存成为文件,当需要再次使用该cookie时,再用“-b cookie_File” 的方式在request中植入cookie即可正常使用。具体的cURL的命令行如下所示:
// 将cookie保存为文件
curl -i -X POST -d username=robin -d password=password123 -c ~/cookie.txt "http://XXX/auth"// 载入cookie到request中
curl -i -H "Accept:application/json" -X GET -b ~/cookie.txt "http://XXX/api/demoAPI"
Postman是目前使用最广泛的Http请求模拟工具之一,常常被用于Web Service API的测试。早期的Postman,是以Chrome浏览器的插件(plugin)形式存在的,最新版本的Postman已经是独立的应用了。
操作步骤:
我们的目标是对Account API做测试,所以这里你需要选择Postmant的“Request”模块。进入相应界面后,你需要按下图的提示依次执行以下三步操作,发起Account API的调用。
完成以上步骤后,我们看到返回的response默认以JSON文件的形式显示在下面的Body中。
这样就完成了一次Account API的调用,是不是非常简单。但问题是,这只是一个API调用,并没有对调用结果进行自动化验证。接下来,我们就加上结果验证的部分,一起看看会有什么效果。
在Postman中添加结果验证也非常方便,假定我们在Account API测试过程中有以下四个验证点:
我们可以打开我们的test界面,然后在右下角的“SNIPPETS”中依次点击:
完成以上操作后,“Tests”中会自动生成验证代码,接着只要按照具体的测试要求,对这些生成的代码进行一些小修改就可以了。
这个操作起来很简单,在我们postman工具的左侧,提供了Collection收集工具,我们可以点击Save As按钮可以建立我们的Collection,并将我们创建的测试用例保存进去。
顾名思义,我们情面也提到了,就是准备好数据、发起请求的这个过程。在postman里面,点击send按钮即可。
通常情况下,无论你采用什么API测试工具,基本的测试步骤往往都是三步,即准备测试数据(并不是所有的API测试都需要这一步)、通过API测试工具发起对被测API的request、验证返回结果的response。
扩展思考:
单个API测试是比较简单的,但在实际项目中,往往存在按时序的API调用以及异步API调用,这类API应当如何测试的?如何解决呢?