1.(web)接口的本质是什么?
在谈接口测试之前,想先问一下,接口是什么?
很多人可能使用过postman一类的工具,填上url和访问方法等等,然后工具会访问这个url并把返回值呈现给你,那么,是否这个url就是“接口”?
答案是,不一定。
(web)接口的本质,其实就是部署在服务器上的程序。
访问url,这个url可能只是一个静态资源,那么我认为不能算是接口,接口是有一定属性的、协商过的满足一定协议的服务,类似于www.baidu.com/pic/1.jpg这种静态文件的url,其实只是让你访问,但没有任何的处理。(但是并不是说静态资源就不用测了,是两回事,静态文件的url不能算接口, 但是cdn统一向外提供静态资源的服务可以算接口,图片的名称可以算传入的参数)
接口是开发预先定义好的程序,是web服务的子集,接口名其实就是程序名,当你(可能还带着参数)访问这个程序名的时候,程序就会按照预定的流程进行处理;这个程序可能会处理sql可能不会,可能会把数据做处理也可能只是简单返回一个ok,这不重要,重要的是,他一定是一段具有逻辑的程序。
2.如何进行(web)接口测试?
如果把问题从如何进行(web)接口测试,等价的换为,如何对一个程序进行测试,那么我想,对大家而言会轻松很多,因为一直以来,我们都在做这样的测试。
如何对一个程序如何进行测试?
很简单,先分类,首先是基本的功能逻辑验证,然后可能还会有安全性测试,程序健壮性测试,性能测试等等。
具体来说,我建议按照以下的顺序循序渐进的完善我们的接口用例case。
首先,做到回归可用,也就是说,将接口组合,串起一整条业务线,这个时候每个接口的参数可能是固定的,但是跑起来已经可以覆盖基础业务场景;
其次,完善接口测试的业务逻辑,达到业务逻辑的全覆盖,这个时候可能每个接口会有不同的入参以实现不同的业务场景(举例而言,金牌的业务场景和普通认证的就有不同)
然后,在该基础上,查验是否已经实现了接口文档所有的入参类型和返回值类型,如果没有实现,那么加上,最终实现对文档内参数的覆盖;
最后,有针对性的对接口增加边界值,异常值,安全测试数据等等非文档内的参数进行补充测试。
3.接口从哪儿来?
如果有接口文档,肯定是看文档最好了,但是一个文档应该要包含接口的所有信息(所有可能的入参包含是否必选,所有可能的返回值,返回值类型),目前而言,可能还不够能作为参考;
如果没有文档或者文档缺失严重,可以自己根据业务流程抓包(fiddler)。
4.接口测试的工具
自己写的话,可以用py+request库,结合测试框架比如testng等等进行设计;此外现成的工具比较著名的还有soapui,test studio for apis,以及我们今天要说的jmeter。
5.使用jmeter访问一个接口
jmeter的安装我就不说了,官网直接下载就行,需要说明的是,最新的jmeter3.2需要java8的支持。
首先我们需要在测试计划里新建一个线程组,所有的访问都会在该线程组下进行;
以我司登录接口举例,在线程组内,增加一个http取样器并填写好我们要访问的地址(xxxxx.xxxx.com),协议(https),方法(POST),路径(/passport/api/auth/app-login);
开始跑,发现已经跑完了,但是并不知道跑的结果;
要知道结果,我们需要添加一个监听器(聚合报告&查看结果树),
发现返回的是没登录的信息,这时候我们加上post参数,userName,password,tenantCode,
查看返回值,发现登录成功了,那么我们现在把参数改一下,把密码改为错误的密码。
查看结果,发现对于jmeter来说,这个访问依然算成功的,那么如何让正确的登录和错误的登录有区别呢?
我们需要增加断言,也就是,判断标准。
在取样器后加上断言。
现在我们断言登录正确的情况。
然后切回错误的密码,可以看到这时候jmeter已经算他是失败的了。
这样我们一个基本的访问-断言-查看报告的流程就形成了。
但是具体到业务场景,我们可能会遇到一些问题。
6.jmeter里的参数化
举个最简单的例子,我们很多接口都是有依赖的或者频繁用到某个参数,比如说,登录账号,那么如果哪天登录的账号出问题了,难道要一个接口一个接口改吗?
当然不是,我们可以对登录账户进行参数化。
这里先介绍一下量级比较少的话,我们可以用用户自定义的变量,右键添加一个配置元件,用户自定义的变量,在这里我们可以自定义变量名和变量值,使用${}的语法进行引用。
如果量级比较大,我们可以把数据放到excel里,然后使用csv data set config,同样式右键添加一个配置元件,这个暂时不细说了,有兴趣的可以百度或者之后直接问我。
7.jmeter里的取参传参
我们的可能会遇到很多情况是,一个接口,需要用到上一个接口里返回的参数,这时候,我们需要用到提取器来进行参数提取,此外,有登录依赖的接口,可以使用http cookies管理器,如果你登录成功了,会自动替你管理cookies。
在取样器右键选择后置处理器-正则表达式提取器,进行参数的提取。
8.jmeter里获取数据库的数据
我们有可能会遇到需要校验或者使用数据库里的参数,比如说,验证码登录,我们就需要去数据库里查询验证码,这时候需要用到jdbc connection configuration,在线程组下右键-添加-配置元件-选择jdbc connection configuration
9.把jmeter放进持续集成
首先我们需要安装一个ant,然后把jmeter extras目录下的ant-jmeter-1.1.1.jar这个包扔到ant的lib目录,再把jmeter下的build.xml修改一下,这时候就可以用ant启动jmeter,并把测试报告转化为html了。
然后配置一下jenkins,使用ant插件构建build.xml就可以了
这个比较麻烦,所以不单独写了,附上我之前参考的文档:
Jmeter+Ant+Jenkins搭建持续集成的接口测试框架https://my.oschina.net/hellotest/blog/516079