接口和抓包

一、接口测试

        1.什么是接口

        API接口是Application Programming Interface的简称,是一些预先定义的函数,包括接口地址、传入参数和返回参数。

        可以简单理解为,当需要访问某些数据,正常状态下传入合格参数,会收到该数据范围内的返回参数。

        场景:在美团旅游频道,用户选定时间、地点后搜索航班,后台会调用搜索接口传入时间、地点等参数,接收航班类别、价格等参数,在前台页面上进行排列展示。同理,下单时会调用生单接口确认是否成单,支付时会调用支付接口完成交易,自动修改订单状态。

        2.什么是接口测试

        接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。

        一般我们用的多的是HTTP协议的接口、WebService协议的接口,还有RPC(Remote Procedure Call Protocol)——远程过程调用协议的接口

        不管是哪种接口,其本质就是发送一个request,然后服务器响应后返回一个response,然后我们对response进行分析,这即是接口测试。

接口的分类:

1.webservice接口         2.http api接口

webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。

http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。

一个URL就是一个接口:接口大致会分为一下几个部分:

请求协议:

http --- 普通的http请求

https --- 加密的http请求,传输数据更加安全

请求IP:就是指提供接口的系统所部署的服务器地址

请求端口:如果不填端口,默认是80,否则需要填写端口号

接口路径:指系统提供的接口在什么位置

接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数

        3.为什么要做接口测试

随着系统越来越多,以及复杂性越来越高,为了保证系统的独立性,也为了使业务更加的独立,系统间的交互,越来越多的使用接口,这时候,为了保证数据的传输的准确性,接口测试也应运而生了,数据的错误,有可能引起系统的重大BUG,

 所以,接口测试的必要性就体现出来了:

  ①、可以发现很多在页面上操作发现不了的bug

  ②、检查系统的异常处理能力

  ③、检查系统的安全性、稳定性

  ④、前端随便变,接口测好了,后端不用变

4.接口测试的重要性

        1.越底层发现bug,它的修复成本是越低的。

        2.前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。

        3.检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。

        4.如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。

        5. 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。

        6. 现在很多系统前后端架构是分离的,从安全层面来说:

                (1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。

                (2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

        5.接口测试工作流程

准备阶段(80%)

       拿到开发的接口文档,并理解每个接口的参数及含义

       了解被测试系统的业务流程

        编写接口测试用例

执行阶段(10%)

       测试用例/测试场景执行

       测试数据/系统数据收集

分析阶段(10%)

    数据汇总/日志分析

测试报告

        6.接口测试用例编写

接口测试用例编写要点

测试每个参数类型不合法的情况

测试每个参数取值范围不合法的情况

测试参数为空的情况

测试参数前后台定义的一致性

测试每个参数的上下限(这里容易出致命的BUG,如果程序处理不当,可能导致崩溃)

测试每个参数取值不合理的情况(包括取的值不属于自己,取值在这阶段不会出现,取值超出了自己所拥有的数量或者范围)

如果两个请求有严格的先后顺序,需要测试调转顺序的情况

自己和自己的交易、聊天等操作(这种特别容易遗漏)

  1)、通用接口用例设计

  ①、通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。

  ②、参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

  ③、接口安全:

  1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?

  2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功

  3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。

  4、密码安全规则,密码的复杂程度校验

  ④、异常验证:

  所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。

  2)、根据业务逻辑来设计用例

  根据业务逻辑来设计的话,就是根据自己系统的业务来设计用例,这个每个公司的业务不一样,就得具体的看自己公司的业务了,其实这也和功能测试设计用例是  一样的。

        7.接口文档

                我们做接口测试,需要开发提供接口文档。最重要的有一下几点:

        1.         被测接口的地址

        2.         接口参数,以及各个参数的说明

        3.         必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )

        4.         接口返回什么值,以及各个返回值的说明

        5.         接口是干什么的

        8.接口测试:json

8.1.什么是json

Json是一种数据载体

互联网本质就是数据传输,数据传输就需要数据载体。比如:页面信息就是存储在HTML这种数据载体中

8.2.为什么使用json

Json传输数据效率更高,所以部分场景下使用HTML与XML

但是JSON语言描述不及标签语言,所以部分场景下使用HTML与XML

如果传递少量数据,使用JSON

        9.接口测试工具及原理

常见接口测试工具

• 典型商业工具:loadrunner,soapui

• 典型开源工具: jmeter

• 扩展插件:POSTMAN

实现原理

• 模拟客户端对服务器进行多连接

例子:

猜你喜欢

转载自blog.csdn.net/m0_60378543/article/details/121690490