Python接口自动化测试框架(工具篇)-- 接口测试基础知识扫盲(一)

本文介绍了接口测试的基础知识,包括接口的定义、API接口实现、接口测试的重要性及范围。重点讲解了如何做好接口测试,强调了接口测试的前提、熟练使用测试工具、设计测试用例和接口测试的持续集成。适合初学者了解接口测试的入门知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

从事软件测试工作,怎能不知、不会接口测试为何物,不管前端是啥(app\h5\web\小程序)凡是你肉眼所见的都是通过后台服务接口提供的数据所渲染的,那么于服务而言,它又是衔接服务(不管是系统还是模块)更好的完成业务流(通讯)及提供完整的业务数据(数据交换)。总而言之,谁也离不开接口。

二、什么是接口

咱们所知的接口,通常是指前端通过调用后台url,获取响应数据,渲染页面呈现出来的过程。那么这个过程里,调用后台url就可以看做是接口(API),连接前后端的通道;它是系统能力的提供者,API是接口定义的具体实现。

三、API接口实现

解开接口背后的秘密,它实际上是一个个的函数,由函数内部去处理相应的业务逻辑,最终将结果返回给前端渲染,然后就是咱们看到的样子。

作者既然以python语言入手,那么就以其中Flask框架来演示接口的本质:

  • Flask框架,写一个登录接口,然后启动服务,查看接口文档
'''
Created on 2021年5月24日

@author: qguan
'''

from flask import Flask, jsonify
from flask_restplus import Api, Resource, fields, reqparse


app = Flask(__name__)
# 接口文档头
api = Api(app, version='1.0', title='Swagger接口文档', description='用户中心',)

# 设置中文编码 
app.config['JSON_AS_ASCII'] = False
# app.config['JSONIFY_MIMETYPE'] ="application/json;charset=utf-8" 

# 接口
http = api.namespace('login', description='登录接口')    # 模块命名空间

# 响应参数
todo = api.model('描述', {    # 返回值模型
  'result': fields.Integer(readonly=True, description='True of False'),
  'token': fields.String(required=True, description='Return Token')
})

# 定义接口参数
parser = reqparse.RequestParser()    # 参数模型
parser.add_argument('zone', type=str, required=True, help="国别码/区号")
parser.add_argument('mobile', type=str, required=True, help="手机号")
parser.add_argument('code', type=int, required=True, help="验证码")

class TodoDAO(Resource):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.params = parser.parse_args()

    @http.expect(parser)    # 用于解析对应文档参数,             
    @http.response(200, "success response", todo)    # 对应解析文档返回值
    def get(self):
        
        if  not all([self.params.get("zone"),self.params.get("mobile"),self.params.get("code")]):
            return jsonify({"code":-1, "msg":"参数不能为空"})
        
        if "86" not in self.params.get("zone"):
            return jsonify({"code":-2, "msg":"国别码站不支持其他国家地区"})
        elif len(self.params.get("mobile")) != 11:
            return jsonify({"code":-3, "msg":"目前仅支持11位中国大陆手机号"})
        elif len(str(self.params.get("code"))) != 4:
            return jsonify({"code":-4, "msg":"验证码不正确"})
        
        return jsonify({"code":0, "msg":"登录成功"})

http.add_resource(TodoDAO, "/ByMobile", endpoint="to_do")

if __name__ == '__main__':
    app.run(debug=True)
  • 接口文档,包括请求地址、请求方法、请求参数、请求头、响应参数:

在这里插入图片描述

  • swagger接口文档本身也支持执行接口测试(后面会有工具介绍如何做接口测试)

四、什么是接口测试

类比功能测试,咱在前端(app)点击某个按钮、页面功能,需要有所反馈,总不能是静止没有响应的,让人不知所措,那么它需要测试,回到接口,编码具体实现了接口的功能,但是没有测试,不知道它能提供什么样的数据(功能),同样让人不放心;所以它也需要测试。那它怎么测,它又不像客户端有可以点击的地方,这就需要通过一定的手段(工具)模拟测试。经验总结接口测试的要点:验证接口传输数据的正确性、安全性及性能,对应的就是接口功能测试、接口安全测试、接口性能测试。

4.1、为什么要做接口测试

原因呢,上面也说一点,就是它的正确性,一个没有经过测试的接口,怎么放心交给前端给到用户去使用?

  • 接口放在前端那是一个一个的url地址,那么在后端它可能存在千丝万缕的关系,这就是业务关联性,简单点说,有些事情不是一个接口就能完成的,在开发架构上讲的是高内聚低耦合。
  • 接口的功能比较单一,容易覆盖测试范围,更容易持续集成,减少人工回归成本和时间资源,缩短测试周期,更能有效的阻击因接口或其他接口的变动而引起的程序问题。
  • 相对于前端功能而言,它又偏底层,更接近代码,如熟知的分层测试金字塔,塔尖的是UI功能测试、随之是服务层接口测试、最后是代码单元测试;从而越早测试越能发现问题,越早发现问题,那么修复它的成本就越低。

五、接口测试范围

功能层

  • 保证业务功能的正确性,同时需要包括异常场景的考虑
  • 业务规则的覆盖,入参的不同,实现业务逻辑有所不同
  • 参数验证,入参、出参的业务规则,还有入参的边界值
  • 异常场景,主要取决于用户的行为习惯及使用环境导致

服务性能

  • 这点对应的就是接口性能测试,着重关注响应时间、吞吐量、并发数及资源要求

安全性

  • 接口安全测试也不能忽视,用户越权、SQL注入等问题

六、接口测试重点

  • 常规性测试,入参和出参的检验,重点关注数据类型
    • 比较关注接口的容错性,时常关注入参类型错误,程序是否能够处理
    • 出参是否与预期结果一致
    • 入参的边界值是校验服务是否有处理正确
  • 性能
  • 安全

七、如何做好接口测试

7.1、接口测试的前提

  • 友好的接口文档,不管是从管理、维护方面都应该有清晰的流程
    • 能够快准狠的找到对应的接口、接口变更记录、可以有默认设置
  • 标准的接口规范,这有点像约束,就是要主次分明、清晰明了、有统一标识符等等

7.2、熟练的接口测试工具

不管是postman还是jmeter又或者soapui,都不重要,它只是工具,辅助咱完成接口测试的工具而已,但是一定要熟练。当然为了后期规划,它的选择就显得尤为重要:接口功能–接口性能–接口安全,那么soapui是最好的选择,但是安全在实际中少有涉及,那么jmeter成为不二之选(因为开源可拓展),postman则可以和开发有更多的交流(现实中大多开发都使用postman调试接口)

7.3、设计接口测试用例

接口测试用例的设计与功能测试用例有所不同,功能测试用例多以场景设计实现,既有前置条件、操作步骤、步骤间对应预期结果;那接口测试用例呢,它有隐藏的前置条件(基础数据是存在的)、没有操作步骤、但有预期结果,那么接口测试用例主要从以下几方面来设计:

  • 入参类型,即要覆盖入参的参数类型
  • 入参边界值,有些参数是有范围的
  • 入参组合,主要是分必填和非必填
  • 出参的结果断言,不同的入参数据,会有不同的结果响应
  • 还有就是场景法,将它隐藏的前置条件设定出来,即接口关联(依赖)

7.4、接口测试持续集成

前面也说过了,既要节省回归测试成本又要缩短测试周期,那么接口测试走持续集成已成必然趋势。所以选择的工具(手段)要支持CLI模式能结合Jenkins等自动化平台实现自动化回归测试,这里要说一点:自动化测试主要是用于回归测试和冒烟测试。

  • 拒绝硬编码接口测试,要灵活设置,降低脚本的维护成本;
  • 不做复杂的接口断言,尤其是涉及数据库断言,尽量避免操作生产数据库环境
  • 也不做复杂的业务场景接口测试,即覆盖异常情况,建议做正确的业务流接口测试
  • 同时应分析每次接口测试脚本,即对结果进行分析,关注其性能相关问题

八、总结:接口测试应该要掌握的知识点

  • 系统业务,即被测试对象,要知道自己测试的是什么,有什么特性
  • 对于接口协议也要有所了解,毕竟socket和http还是有区别的
  • 接口测试工具,掌握一两款即可,其他可多做了解
  • 数据库基础操作命令,就是select、insert、update、delete这些

8.1、如何去学

  • 业务方面,只有自己多玩请教开发吧
  • 技能方面:多看书、逛论坛、看教程
  • 最主要的是系统的学习和大佬的提携
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

职说测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值