接口自动化测试平台--LRUN (一)

简介: 接口自动化测试平台--LRUN

为什么要写测试平台


2020第四季度的时候使用 Django + DRF + vue2 + HttpRunner2.x 写过一个半成品的接口自动化平台,后面由于一些原因就没有在写。直到 2021 年的第四季度,由于一些原因,又开始搞接口自动化测试平台了。

这次前端用的技术栈是 vue3 的 Composition API 语法(基于最新的 3.2.x 版本的 script setup 语法)、typescript、vite,element-plus 以及 vue3 的全家桶。

为什么要用 vue3 和 ts ?

当然是更快更好用,composition-api 更加适合大项目,ts 的可靠性和可维护性更高,虽然可能我用不到这些特性,但并不影响我以后出去面试的时候吹牛逼。

后端使用的是 Python 的 FastAPI 框架 + sqlalchemy + mysql + Apscheduler + pydantic 等

最早看到 FastAPI 框架是在 HttpRunner3.x 的源码里看到的,当时读源码的时候不知道这个库是做什么的,然后就去 Google 上搜索了一下。当时网上关于 FastAPI 的资料还是比较少的,就去看了下官网,从刚开始打算了解一下,到花了一下午的时间,都看啃官网文档。看完官方文档之后就放弃用了几年的 Django 框架。

平台大体可以分为三个部分。第一部分也是最主要的。运行 api 并且返回测试结果。我起名为 LRUN,L 代表了我姓的首字母和公司英文的首字母。它的主要功能就是传入一个 yaml 路径,在内部对 yaml 文件进行处理,包括参数提取、参数替换、断言、hooks,最后返回测试结果。

例如下面的 yaml 内容,实现了四个接口。登录接口,登录成功后获取到 token,保存为变量,在传给后面的接口,可以在请求头里使用提取到的变量。新增供应商,字段 contacts 是不能重复的,所以我写了个随机生成名称的方法,在这里直接调用这个方法。也可以选择该接口是否执行、执行次数、请求前置、请求后置等

- config:
    base_url: http://47.101.111.187:8081
    headers: {}
    name: 冒烟测试
    variables: {}
- test:
    extract:
      code: body.code
      token: body.data.token
    mock: false
    name: 登录接口
    request:
      headers:
        Accept-Language: zh-cn
      json:
        password: zouzou
        username: zouzou
      method: POST
      url: /api/user/login
    setup_hooks:
    - ${hook_down()}
    - ${hook_down()}
    skip: false
    ssl: true
    teardown_hooks:
    - ${hook_down()}
    times: 1
    validate:
    - eq:
      - body.code
      - '2001'
    - eq:
      - body.msg
      - login success
    - eq:
      - status_code
      - 200
- test:
    extract: {}
    mock: false
    name: 新增供应商
    request:
      headers:
        Authorization: JWT ${token}
      json:
        contacts: ${staff_name()}
        contacts_iphone: '17111111111'
        id: null
        remarks: '12'
        supplier_name: ${staff_name()}
      method: PUT
      url: /api/manage/supplier
    skip: false
    ssl: false
    times: 1
    validate:
    - ne:
      - body.msg
      - 供应商添加成功
- test:
    extract:
      id: body.data[0].id
    mock: false
    name: 查询员工数据
    request:
      headers:
        Authorization: JWT ${token}
      json:
        account: ''
        name: ''
      method: POST
      url: /api/manage/search/supplier?page=1&size=10
    skip: false
    ssl: true
    times: 1
    validate:
    - eq:
      - body.code
      - '2001'
    - eq:
      - status_code
      - 200
    - len_gt:
      - body.data
      - 8
- test:
    extract: {}
    mock: false
    name: 删除供应商
    request:
      headers:
        Authorization: JWT ${token}
      json: {}
      method: DELETE
      url: /api/manage/supplier?id=${id}
    skip: false
    ssl: false
    times: 1
    validate:
    - eq:
      - body.msg
      - 删除成功

各参数意义如下

  • test:一个 test 为一个接口用例
  • times:接口运行次数
  • skip:是否跳过接口
  • SSL:是否开启 SSL 验证。
  • mock:是否 mock 接口(目前功能还未实现)
  • request:填写请求信息,请求方式、请求体、path 等
  • extract:提取接口响应里的参数,支持提取响应头、响应体、响应 cookies。
  • validate:断言,支持丰富的断言方式(13种断言方式,满足接口测试断言的多种场景),eq 表示断言相等,not_equal 不等于
  • setup_hooks:请求前置,可以做一些加密处理
  • teardown_hooks:请求后置

运行上面的 yaml 文件后返回的结果如下,会返总耗时、总接口数、成功用例数、失败用例数、跳过的用例数。还有单个接口的详细信息。

查看返回结果

也会有详细的运行日志,简单截了三张图



如果你们用过 httprunner2.x 以及 httprunner3.x 的话,你就会发现功能很相似。因为我读了 httprunner3 的源码之后自己写了一个,起名为 LRUN。很大的一部分代码都是从 httprunner3.x 拿过来 借鉴的。在此感谢 debugtalk 开源出这么优秀的框架。

那么我为什么要重新写一个呢?为什么不集成 httprunner3.x 呢?

2020 年使用 Django +DRF 写的时候,我是集成了 Httprunner2.7 版本的,但目前作者已经不维护 2 版本了,最新的是 3 .x 的版本。

在我读了 httprunner3 大部分的代码之后,我发现 httprunner3.x 是不支持通过传入 yaml 或者 json 文件路径来运行的(读了源码没发现这样处理的逻辑,也可能是我没有找到,欢迎各位大佬进行指教)。这样的话集成平台就不太好集成(个人感觉),而且作者目前也是在开发 go 版本的,有 bug 也不能及时的修复。

最重要的一点是我自己写底层实现我可以很方便的进行扩展,例如支持 RPC、Mock 等。后期也可以自己实现。出了bug 也方便进行定位、修复。

第二部分是使用 FastAPI 写的接口,主要是将数据保存到数据库,组装成 LRUN 所需要的 yaml 格式,在传给 LRUN 进行运行,最后拿到测试结果返回给前端。

第三部分是 vue 写的前端页面,可以在页面上输入数据,调用接口保存的数据库中。

画了简易的架构图,如下

下面来看一下平台页面是怎样的


登录注册


登录页面

注册页面,和登录页面是一样的,只是一个 css 样式的翻转

登录成功之后进入到首页,主要是做一些数据的展示(近 6 个月新增 API 数接口还未实现)

左侧可以收起菜单,也可以全屏。最右边可以退出登录、修改密码、修改头像。


项目管理


可以进行项目的增删改查,也可以创建私有项目。

平台项目之间是进行隔离的,当你选择了项目之后,才能进行下面的操作。

点击项目名称进入到环境管理页面


环境管理


点了项目名称之后就进入到了环境管理页面,显示的是该项目下的所有环境

可以添加测试环境、开发环境、线上环境等等。


相关文章
|
19天前
|
传感器 数据采集 监控
LabVIEW电池管理系统测试平台
LabVIEW电池管理系统测试平台
21 4
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试的前沿:AI与软件测试的融合
在数字化浪潮中,软件测试作为确保产品质量的关键步骤,正迎来一场革命。本文将深入探讨人工智能(AI)如何革新传统软件测试流程,通过具体案例分析,揭示AI技术在提高测试效率、减少人为错误以及预测潜在缺陷方面的潜力。我们将一窥AI在自动化测试中的应用现状,并展望其对未来软件质量保障的影响。
|
13天前
|
前端开发 数据管理 测试技术
前端自动化测试
前端自动化测试
|
16天前
|
JavaScript 前端开发 测试技术
自动化测试在API测试中的深度应用与实践
【7月更文挑战第8天】自动化测试在API测试中的应用极大地提高了测试效率和质量,为软件的快速迭代和持续交付提供了有力保障。通过合理选择测试工具、制定清晰的测试计划并遵循最佳实践,我们可以充分发挥自动化测试的优势,为软件产品的稳定性和可靠性保驾护航。
|
12天前
|
XML JSON 测试技术
Postman接口测试工具详解
📚 Postman全攻略:API测试神器!📚 发送HTTP请求,管理集合,写测试脚本,集成CI/CD。从安装配置到环境变量、断言、数据驱动测试,一步步教你如何高效测试RESTful API。实战案例包含GET、POST、PUT、DELETE请求。用Newman在命令行跑集合,自动化测试不发愁!👉 [洛秋小站](https://www.luoqiu.site/) 学更多!🚀
26 1
|
19天前
|
数据采集 测试技术
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
21 2
|
22天前
|
测试技术 API 持续交付
【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分
【7月更文挑战第2天】【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分:1) 自动化测试的重要性与Python的易用性、库支持、跨平台和社区优势;2) Unittest作为标准测试框架的基础用法,及Pytest的灵活性与强大功能;3) 实践中包括Selenium的Web UI测试、Requests的API测试,强调测试隔离、持续集成等最佳实践。Python助力高效稳定的软件测试。
27 2
|
8天前
|
监控 网络协议 安全
由于楼层自动化系统的复杂性和多样性,很难给出一个通用的Python代码示例,因为每个系统可能使用不同的硬件、通信协议和软件接口。
由于楼层自动化系统的复杂性和多样性,很难给出一个通用的Python代码示例,因为每个系统可能使用不同的硬件、通信协议和软件接口。
|
13天前
|
JSON 测试技术 数据格式
postman接口测试工具详解
postman接口测试工具详解
|
19天前
|
敏捷开发 监控 Devops
探索自动化测试的利剑:持续集成与持续部署(CI/CD)在软件测试中的应用
在软件开发的快速迭代中,传统的手动测试方法已经无法满足效率和质量的双重需求。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来优化自动化测试流程,提升软件交付速度及质量保证水平。我们将分析CI/CD在测试中的关键作用,并通过实际案例数据展示其对提高测试覆盖率、缩短反馈周期和增强开发协作的积极影响。
38 0

热门文章

最新文章