接口测试是什么 & 工具

本文主要介绍了接口测试的基本概念、接口的请求模型、接口url组成等内容以及接口测试中涉及到的功能测试点、异常场景测试点、安全测试点、性能测试点等关键测试点,还包括http请求过程,Postman工具的使用等内容。

1. 接口是什么

1.1 什么是接口 :接口就是有特定输入和特定输出的一套逻辑处理单元

由于服务对象不同,接口又可以分为两种:

  • 一种是系统或服务的内部接口 (系统内部调用的接口):比如:购物流程,从登录系统,到加入购物车,再到支付订单,这一长串的流程中,都是通过系统内部接口来完成的

  • 一种是外部依赖接口 (外部系统对外提供的接口):比如:在购物后点击付款时,页面会跳转到支付系统,等你完成支付流程后,再跳转回订单页,(支付宝付款,微信付款等等)

    接口的本质:其实就是一种契约,遵循这样一种形式:在开发前期,我们约定接口会接收什么数据;在处理完成后,它又会返回什么数据

1.2 get、post请求有什么区别?

get:请求参数是header, 从指定的资源请求数据。
header:url,接口名,请求方法(get),请求参数
body:无
post:请求参数在body中, 向指定的资源提交要被处理的数据
header:url,接口名,请求方法
body:请求参数
  • 区别1:操作数据方式不同

    get是从服务器获取数据
    post是把需要处理的数据提交到服务器上

  • 区别2:传参方式及长度限制

    get参数通过url传递,参数衔接在url后面,而url的长度根据浏览器及服务器的不同而有不同限制。比如:Chrome(Browser):8182字符

    post参数放在Request body中,理论上讲,是没有大小限制的,http协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。比如:Tomcat默认:2M

  • 区别3:参数数据类型及编码方式

    get参数只允许ASCII字符,进行url编码

    post参数数据类型没有限制,支持多种编码方式,可发送类型包括如下:表单、任意格式的文本(如text、javascript、json、xml、html等)、二进制文件、GraphQL查询语言

  • 区别4:安全性

    get参数直接暴露在URL上,所以安全性相比post差

    post参数包含在body体中,不会被保存在浏览器历史或 web 服务器日志中,因而相比get安全一些

  • 区别5:缓存

    get请求会被浏览器主动cache
    post请求不会被浏览器缓存,除非手动设置

  • 区别6:幂等性

    get方法具有幂等性,其用于获取资源,不会改变资源的状态,不论调用一次还是N次都没有副作用,因而是幂等的

    post方法不具备幂等性,两次相同的post请求会在服务器端创建两份资源,它们具有不同的URI,因而不具备幂等性


2. 接口测试原理

模拟客户端向服务器发送请求报文,服务器接受请求报文后对相应的报文做处理并向客户端返回应答,客户端再接受应答的一个过程。(不用界面)

基本的测试思路是通过输入和输出判断被测系统或者对象的逻辑。

不同协议形式的测试:

  • HTTP 协议的接口:就是最基本接口,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法。不易扩展,适合实现单个功能。

  • RESTful 格式的接口使用rest风格规范原本http api的接口

    e.g. 如果只是要实现某个功能自己用,那就随便,按照自己的 风格来设计(用原版http api)就可以了。
    如果接口对外的,给其他应用提供功能,用RESTful统一接口设计规范!

    http api: url: http://www.xx.com/api/getconentbyname 只能算是实现了 一个接口
    RESTful: 假如 有一个friends接口,对于“朋友”我们有增删改查四种操作,怎么定义REST接口?

    • 增加一个朋友,uri: generalcode.cn/va/friends 接口类型:POST
    • 删除一个朋友,uri: generalcode.cn/va/friends 接口类型:DELETE
    • 修改一个朋友,uri: generalcode.cn/va/friends 接口类型:PUT
    • 查找朋友,uri: generalcode.cn/va/friends 接口类型:GET
      都是同一个url,接口类型改变
  • webService接口:走soap协议通过http传输,请求报文和返回报文都是xml格式的,在测试的时候都用通过工具才能进行调用,测试。(不了解)

HTTP1.1支持7种请求方法

  • GET:请求获取Request-URI所标识的资源;(查询)
  • POST:在Request-URI所标识的资源后附加新的数据;(增加)
  • HEAD:请求获取由Request-URI所标识的资源的响应消息报头;
  • PUT:请求服务器存储一个资源,并用Request-URI作为其标识;(更新)
  • DELETE:请求服务器删除Request-URI所标识的资源;(删除)
  • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
  • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。

2.1 为什么说接口测试如此重要?

从它对项目的影响来说,接口测试直接测试后端服务,更加接近服务器上运行的代码程序,也更能发现影响范围广泛的 Bug。→ 越接近底层的 Bug,影响用户范围越广

随着中台化、服务化的发展,一套服务支持多种终端,例如 Android端、iOS 端、Web 端等,这些服务都是由一套后端服务支持的。如果在Web端发现一个界面问题,影响的只是Web端用户,倘若一个服务宕掉,影响的就不止是Web端,还有Android 端、iOS 端

2.2 接口测试的优越性

(1)相对于界面测试,接口测试可以更早开始,也可以测试一些界面测试无法测试的范围,因此它使测试更早的投入这句话变成现实;

(2)接口测试还可以屏蔽 UI 层不稳定性, 保障系统的鲁棒性,使得被测系统更健壮。



3. 接口测试怎么做

根据开发给的接口文档,来测试 e.g.接口文档

  1. 使用工具

    常用工具:postman、jmeter,但是postman和jmeter是不一样的,一般常规的接口测试都是用postman,jmeter也可以做接口测试,但是更多的是用来做压力测试和并发测试。还可以用 python的request库等等。

    工具这种具体操作没有详细记录,只记录注意点:PostmanJmeter,有时候跟fiddler一块用

  2. 请问你用过哪些抓包工具?抓包工具都可以用来做什么?

    常用的抓包工具有Fiddler和Charles,2种相似,以Charles为例,可以做如下工作:
    (👉Fiddler 操作看这篇)

    1)截取http数据包

    ❶ 抓取PC网络请求
    打开Charles,依次打开菜单 Proxy -> Proxy Setting 进入Proxy Setting页面,设置Port为8888,然后勾选菜单Proxy中的Windows Proxy,此时PC端的http请求都将先转发到Charles,这时就可以抓到包了。

    ❷ 抓取手机App数据包
    PC端开启代理后,通过在手机端(包括iPhone、Android)设置代理,连接到Charles工具,即可抓取到手机App的数据包。
    设置方法为在手机wifi高级设置中,加入代理ip(ip可通过Charles中 “Help” -> "Local IP Address"来查看)和端口,代理ip为Charles工具所在机器的ip,端口默认为8888,需要注意的是手机和Charles所在电脑需在同一局域网内。

    ❸ 过滤网络请求
    方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们我们需要过滤百度的请求, 那么只需要在 Filter 栏中填入 baidu 即可。

    方法二:在 Charles 的菜单栏选择 “Proxy”–>“Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。

    通常情况下,我们使用方法一做一些临时性的封包过滤,使用方法二做一些经常性的封包过滤。

    2)截取https数据包

    如果你需要截取分析 Https 协议相关的内容。那么需要安装 Charles 的 CA 证书。具体步骤如下。

    首先需要在电脑上安装证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”,按提示即可安装好证书。(PS: 默认情况下 Charles 并不做截取)
    打开菜单Proxy - SSL Proxying Settings,如下图,勾选【Enable SSL Proxying】,并增加对应的域名和443端口。

    如果需要在 iOS 或 Android机器上截取Https协议的通讯内容,还需要在手机上安装相应的证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,如左图所示,然后就可以看到 Charles 弹出的简单的安装教程,如右图所示:


    在手机设备上设置好 Charles 为代理后,在手机浏览器中访问地址:http://chls.pro/ssl, 即可打开证书安装的界面,安装完证书后,Charles就可以截取手机上的 Https 通讯内容了。
    (需要说明的一点是:Android7以上的版本APP默认只信任系统自带的CA证书,用户导入的证书不受信任,因此Android7以上版本安装的App即使手机安装了Charles的证书,也无法解析到https的包体内容。)

    3)修改请求参数值 、断点

    在Charles发起一个请求的时候,我们可以给某个请求打断点,然后修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。要针对某一个请求设置断点,只需要在这个请求右击选择Breakpoints就可以断点某一个请求了,如左图所示
    通过postman发送请求,charles会进入断点节目,点击【Edit Request】页签进入参数修改界面,如右图所示,修改p的参数值,然后点击【Execute】按钮,此时被修改参数值的请求被发送给api接口

    4)修改返回参数值

    修改返回值有2种方式

    ❶ 断点
    还用刚才断点修改请求参数的方式,进入断点页面后不做任何修改,直接点击【Execute】提交,此时打开如下页面,点击【Edit Response】,修改返回参数值,点击【Execute】即可

    ❷ Map
    以Map Local为例,打开记事本写入如下内容,并存储为door.txt

    {
        "code": 0,
        "msg": "这是通过map获取的response,开门"
    }
    

    Charles工具请求体上点击右键,选择【Map Local】,打开如下界面:
    Choose选择本地刚存储的door.txt文件,点击【OK】,再次通过postman发送请求,可以看到返回值已被替换为本地文件door.txt中的内容

    5)使用 Charles 进行压力测试

    使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下。

    在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择【Repeat Advanced】菜单项,如下图所示, 弹出的对话框中可以设置并发数和测试次数,点击【OK】按钮,就开始执行压力测试

    Charles还有模拟慢速网络,请求重放等功能


4. 接口测试的核心是持续集成?

Postman

只记录部分操作

  1. 如果2个接口之间有依赖

    e.g. http://39.107.96.138:3000/api/v1/topic/:id → 这个id是一个变量,需要一个具体值,依赖于另一个接口来得到具体值

    👉 先发送topic post请求获得id,把这个值放到另一个get请求:


5. 面试题

  1. 针对一个功能,客户端测一次接口再测一次,是不是重复了?

    系统架构按客户端类型不同可以分为三类,即:
    C/S(Client/Server):需要在PC安装客户端软件连接服务器交互的一种类型,比如钉钉PC版、微信PC版等;
    B/S(Browser/Server):通过浏览器访问特定服务器资源并与服务器交互的一种类型,比如牛客网等;
    M/S(Mobile/Server):现在的移动设备主要有iOS、Android两类,就是在移动设备安装应用软件与服务端交互的一种类型,比如牛客App等。

    可以看到,上面3种架构,后台都是Server端,前端各有不同,通常也有将异构的不同类型的客户端统称为大前端,在这样的背景下,服务端向不同类型的客户端提供服务,就需要先保证自己的功能、性能、安全性、稳定性、可靠性、可扩展性等满足需求,因此,虽然部分业务功能的验证看似客户端和服务端接口测试有重复,但是实际上还是有很大的差异,以下是列举的几个主要的差异:

    1)关注点
    接口测试关注于服务端程序逻辑、性能、安全性等验证;
    客户端测试侧重于UI层,关注于页面展示逻辑及界面前端与服务器集成验证。

    2)性能测试
    接口性能主要关注接口响应时间、并发、服务端资源的使用情况等;
    App端性能主要关注与手机相关的特性,如手机cpu、内存、流量、fps、耗电量等。

    3)自动化测试
    对接口测试而言,持续集成进行自动化测试是核心内容,接口一方面变动相对较少,另一方面即使变动case的维护工作量也相对较少,因此接口自动化可以做到低成本高收益;

    而客户端UI自动化测试通常是用自动化测试工具先识别、定位界面元素,然后对界面元素做相应的业务操作,最后添加验证点来判断程序执行结果是否与预期相符,而UI如果变化,自动化测试case就需要维护,而且UI自动化执行速度较慢、稳定性也相对较低,因而相比接口自动化来说成本相对较高、收益较低。不过客户端的部分测试可以实现全自动无人值守的自动化测试,比如通过App UI遍历测试工具驱动App运行,期间自动检测App crash、内存泄露、卡顿、ANR等bug并自动上报,这个测试就可以做到很少的人工介入,收益极大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值