接口测试入门

      接触测试开发这个模块快一个月了,辛辛苦苦写了大半个月的代码又要被推翻了。由于之前没有理解接口测试的原理和思想,走了很多弯路,有接口文档,却不知道如何设计用例。百度了一番,看了很多前辈写的心路历程,在这里,大概总结一下。
接口测试分为两种,一种是webservice接口,走soap协议通过http传输,请求报文和返回报文都是xml格式的,测试时通过工具soapUI进行测试,使用情况比较少。另一种是http api接口,走http传输协议,通过路径来区分调用的方法,最常用的是get和post请求。
get请求和post请求时通过路径来区分的,get请求的请求参数都是写在URL里的,格式为:http://url?param1&param2。而post请求一般都写在body里的,可能是key-value格式,或者是json串格式,也可能是上传一个文件。那么问题来了,get请求和post的区别在哪里呢?
1.get请求可以在浏览器中请求到,post请求的测试需要借助工具。
2.get请求使用url和cookie传参,post的数据放在body中。
3.post比get更安全,因为传递的参数在url上是看不到的。
4.get请求的url会有限制,而post请求的数据可能非常大。
5.一般get请求是来获取数据,而post请求是传递数据。
表面上看,post利用body传参,比get的url传参安全,但其实只要使用抓包工具(fiddler、Chales等),post的参数也是一览无余。
怎么来接口测试呢?根据什么来测呢?这就需要开发提供的 接口文档了,接口文档和功能测试的需求说明书是一样的。包括: 接口说明、调用的url、请求方式(get or post)、请求参数、参数类型(String、int、long等)、请求参数说明(是否可以为空)、返回结果说明(字段代表的意义)。有了接口文档后,我们就可以设计用例了,一般接口测试的用例分为以下几种:
1. 通过性验证,说白了 就是传递正确的参数,是否返回正常的结果
2.参数组合,因为参数有必传和非必传,参数的类型和长度,以及传递时可能业务上的一些限制, 所以在设计用例时,就要排列组合这些情况,保证所有情况都能覆盖到
3、接口的安全性,这个又分为几种情况:
  1)绕过验证,比如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我支付时,抓个包将订单金额一改,如果能以我改后的金额支付,那这个借口就有问题了。
  2)绕过身份验证,就是某个功能只有有特殊权限的用户才能操作,那我传递一个普通的用户,是不是也能操作呢
  3)参数是否加密,这个关系到一些账户的安全,比如我们在登录一些网站时,它要将我们的登录信息进行加密,如果不加密我们的信息就会暴露,危害性极大。
4) 密码安全规则,设置密码时复杂程度的校验。
4.根据业务逻辑来 设计测试用例
用例设计完成后,可以借助一些工具来进行接口测试,例如: postman jmeter
postman示例: postman使用比较简单,可以在列表中选择请求方式,在输入框中输入URL。
eg:如果是get请求,直接点击send就可以看出返回结果了。

eg:如果是post请求,会涉及到几种参数的上传方式和添加请求头、权限验证还有添加cookie等操作。在标红的地方基本都能完成。

还有一种测试接口的工具是jmeter,用途比较广泛,不但能测试接口的功能,还能对接口进行压力测试。自带的一些功能,比如参数化、数据关联更符合自动化测试的思想,而且还能操作数据库。在jmeter中需要创建线程组,线程组的循环次数和线程数决定了并发量,也可以设置持续时间或者启动结束时间来决定请求的运行时间。如图:

然后在线程组下面添加http请求,将接口的url、路径、参数、请求方法写好,再添加察看结果树来看请求返回结果,如果压测接口的化,需要添加聚合报告。

在jmeter中post请求添加请求头、cookie或者授权等,都需要添加相应的功能,比如标红部分,操作起来也比较简单。

使用jemeter时,可以对传递的参数进行参数化,有个函数生成器这样的小工具,举一个小小的例子,比如你想要生成一个随机数,只有打开函数生成器,输入最小值和最大值,再点击生成,就可以使用这个函数了,创建一个用户定义的变量,起一个变量名,变量值输入生成的函数,这样每次用到的时候,写成$(variable)就可以了。
  jmeter关联的意思是,上一个接口的返回结果,作为下一个接口的请求参数,很多场景都会用到,如果压测这种场景的接口,关联是非常好用的。


    以上便是使用jmeter做接口测试的一些基本用法(jmeter我现在还没有学习到,上图是看前辈写的)。
    在我目前的工作中,这些接口测试工具只是配合使用,现在要做的是用java实现自动化接口测试,并生成相应的测试报告,以及发邮件给相关人员。还在学习阶段,未完待续~

























































猜你喜欢

转载自blog.csdn.net/xiaochunjie_0829/article/details/80028578
今日推荐