接口测试的概念及常用方法

     接口的概念从IT的角度出发,主要是子模块或者子系统间交互并相互作用的部分。从形式上来看各种应用程序的API(最著名的Windows 系统的API),硬件的驱动程序,数据库系统的访问接口,再到后来的Webservice接口,http rest接口。虽然接口的形式各有不同,但是从测试角度来说,需要测试的内容大致是相同的,功能,性能,安全。

     我们常说的api就是接口的意思,现在常用的web项目,app项目的接口都是基于http请求的,有些系统内部之间调用的接口一般不需要我们测试,这些很多是基于jar包那种类型的接口,只了解到这就差不多了。

    接口类型常见的有get,post,put...类型。get类型的接口一般是指获取信息的接口,比如列表查询的功能,点击查询按钮就调用一个get接口,然后把信息返回出来。就是指把内容从服务器拉下来。

    post类型一般是提交表单的功能,比如注册、上传、发布帖子之类的就是post接口。就是指把内容推到服务器上去。

     接口测试的策略:接口测试属于功能测试,也可以看做是需要了解部分代码的灰盒测试。

     测试流程是:1测试接口文档。2.根据接口文档编写测试用例(用例编写方法完全可以按照黑盒测试的用例编写规则来编写,如:边界值、正交表等等设计方法)。3.执行测试,查看接口返回的接口数据是否正确,主要检查返回的接口是否和接口文档中定义的一样,还有要检查返回的数据是否和数据库中的保持一致。

     常用的接口测试工具:postman、soapui、jmeter、LR等

     eg1.http://web.juhe.cn:8080/environment/water/river?river=&key=21bc601d298e3008fa3e7bdca22e173e, 这是查询水质量的开放api,是一个get型接口。river=,等号后面就是要查询的参数,这里给参数为长江流域,然后在浏览器中访问下面地址:http://web.juhe.cn:8080/environment/water/river?river=长江流域&key=21bc601d298e3008fa3e7bdca22e173e, 返回的就是接口信息。

     eg2.get型的接口可以直接通过浏览器访问,参数就带在地址的后面以‘?’连接。但是post的就不行了,要用专门的工具来测试,常用的推荐jmeter和postman。

     postman做接口,推荐使用fiddler先抓包,获得的接口和参数,再使用postman。

--------------------------------

    1.注入(Injection):SQL注入、LDAP注入、OS命令注入

    2.无效认证和Session管理方式:cookies欺骗、通过xxs+csrf劫持session等

    3.跨站脚本:反射xxs、存储xxs、dom xxs

    4.直接引用非安全对象:垂直越权、平行越权类,绕过未授权操作等

    5.错误的安全配置:代码异常报错、HTTP请求方法、危险的web组件、IIS文件解析漏洞等

    6.暴露敏感数据:fuzz构造请求,爆出接口数据,%20截断看数据库链接等

    7.功能级权限控制缺失:功能级越权操作

    8.伪造跨站请求:crsf

    9.使用已知安全隐患组件:比如java反序列化、bash+cgi远程命令执行等

    10.未验证跳转:url任意跳转,未做判断

    貌似接口安全主要检查这几个,比如越权有些是在调用接口时产生的漏洞,或者sql注入也可能,接口只是在上级web层作出一些安全隐患检查