接口测试总结

为了确认给前端同学数据的准确性,后端常常需要预先对接口进行简单测试,由于项目前后端调用主要是基于 http 协议的接口,所以测试接口时主要是通过工具或代码模拟 http 请求的发送与接收。工具有很多如:postman、curl 以及 python 的 requests 库等。

我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
LangChain编程从入门到实践

常见接口类型

  • HTTP接口:通过HTTP协议传输的接口,可以传输文本表单数据,也可以传输Json类型的对象数据或xml类型的数据。
  • RPC: 远程方法调用,随着分布式系统的出现,当你需要调用部署到其他服务器上的方法时,需要用到RPC。RPC只是提出了这样一个问题,有很多种解决方案,比如WebService(基于SOAP协议), REST(基于HTTP协议)。
  • SOAP: 简单面向对象协议,基于HTTP,使用xml作为默认传输格式
  • Web Service: 基于SOAP协议的一种RPC实现方案。相比传统的HTTP接口只传输文本请求和文本相应,通过Web Service可以直接拿到远程的一个对象,并能够直接调用该对象的属性和方法,比HTTP更高级。
  • REST/RESTful API: REST,表述性状态转移。一种HTTP接口的设计风格,将一切接口视为资源,要求接口路径统一管理,分版本管理,规定了GET/POST等请求以及HTTP状态码的使用规范,默认使用JSON格式传输。RESTful API即满足REST风格即设计规范的API接口
    常见接口类型.png

    什么是接口测试

  • 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

    接口测试的优势

  • 接口测试相对容易实现自动化持续集成,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。
  • 从安全层面来说:只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

    接口测试持续集成

  • 流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试阶段延伸,最终达到全流程自动化。
  • 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等
  • 问题定位:报错信息、日志更精准,方便问题复现与定位。
  • 结果校验:加强自动化校验能力,如数据库信息校验。
  • 代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。
  • 性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。

    接口测试质量评估

  • 业务功能覆盖,参数验证是否达到要求(边界、业务规则),接口异常场景覆盖,代码覆盖率,性能和安全指标。

    项目后端测试

  • 下面这张图基本反应了当前项目后端接口测试的主要内容
    项目后端接口测试.png

    常见的接口安全策略:

  • Session/Cookie机制: 即需要登录,登录后可访问各个接口,最常用的一种策略,适用于内部接口。
  • 固定appid模式: 用户注册时会生成一个唯一的appid,用户调用接口时需要携带appid,适用于公开接口,安全性较差。
  • 动态token模式: token即身份令牌,用户访问接口需要使用个人appid临时申请一个token,token有一定有效期,适用于公开接口,安全性较appid模式好。
  • 开放协议: Basic Auth/ Oauth1.0 / Oauth2.0: 适用于开放接口。
  • 数字签名: 将所有请求参数及参数值进行排列拼接,加上用户私钥,再进行Md5或其他加密生成一个请求的签名(sign),请求是需要携带签名,服务器收到请求后,会对请求重新计算签名并核实与请求所携带签名是否一致。安全性较高,可以有效防止请求被篡改。适用于内部接口及微服务接口。扩展阅读 浅谈常见的七种加密算法及实现

    接口测试工具

    Postman

    Postman功能概览图.png

    requests的使用

  • 一个完整请求过程
    1. 组装请求: 请求可能包含url,params(url参数),data(请求数据),headers(请求头),cookies等,最少必须有url
    2. 发送请求,获取响应:支持get,post等各种方法发送,返回的是一个响应对象
    3. 解析响应: 输出响应文本
      1
      2
      3
      4
      5
      6
      import requests 
      url = "https://demo.fastadmin.net/admin/index/login.html"
      requests.get(url)
      params = {"key1":"value1"}
      res=requests.get(url=url, params=params)
      print(res.text)

      curl 使用

      1
      2
      3
      4
      curl -o test www.baidu.com
      curl -i www.baidu.com
      curl -X POST www.example.com
      curl -X PUT www.example.com

      unittest测试框架

  • 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行。使用测试框架可以互不影响的用例执行及更灵活的执行控制
  • unittest几大组成部分
    • TestCase: 用例对象,编写测试用例时要继承该类,以具有TestCase的属性和方法
    • TestSuite: 测试集或测试套件,测试用例的集合,用来组织用例,支持嵌套
    • TestLoader: 用例加载器,用于向TestSuite中添加用例
    • TextTestRunner: 用例执行器(输出文本结果),一般以TestSuite为单位执行用例
    • TestResult: 测试结果

      参考链接

  • 接口测试总结
  • Python接口测试实战
作者

莫尔索

发布于

2020-07-14

更新于

2024-05-19

许可协议

评论