接口自动化测试平台--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 数接口还未实现)

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


项目管理


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

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

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


环境管理


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

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


相关文章
|
8月前
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
790 113
|
9月前
|
关系型数据库 MySQL 测试技术
【分享】AgileTC测试用例管理平台使用分享
AgileTC 是一个脑图样式测试用例管理平台,支持用例设计、执行与团队协作,帮助测试人员高效管理测试流程。
469 116
【分享】AgileTC测试用例管理平台使用分享
|
9月前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
9月前
|
人工智能 数据可视化 测试技术
AI测试平台自动遍历:低代码也能玩转全链路测试
AI测试平台的自动遍历功能,通过低代码配置实现Web和App的自动化测试。用户只需提供入口链接或安装包及简单配置,即可自动完成页面结构识别、操作验证,并生成可视化报告,大幅提升测试效率,特别适用于高频迭代项目。
|
9月前
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
9月前
|
人工智能 测试技术 项目管理
测试不再碎片化:AI智能体平台「项目资料套件」功能上线!
在实际项目中,需求文档分散、整理费时、测试遗漏等问题常困扰测试工作。霍格沃兹推出AI智能体测试平台全新功能——项目资料套件,可将多个关联文档打包管理,并一键生成测试用例,提升测试完整性与效率。支持套件创建、文档关联、编辑删除及用例生成,适用于复杂项目、版本迭代等场景,助力实现智能化测试协作,让测试更高效、更专业。
|
10月前
|
存储 人工智能 算法
AI测试平台实战:深入解析自动化评分和多模型对比评测
在AI技术迅猛发展的今天,测试工程师面临着如何高效评估大模型性能的全新挑战。本文将深入探讨AI测试平台中自动化评分与多模型对比评测的关键技术与实践方法,为测试工程师提供可落地的解决方案。
|
8月前
|
API 调度 虚拟化
VMware Cloud Foundation Automation 9.0.1.0 发布 - 私有云自动化平台
VMware Cloud Foundation Automation 9.0.1.0 发布 - 私有云自动化平台
395 3
VMware Cloud Foundation Automation 9.0.1.0 发布 - 私有云自动化平台
|
9月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
773 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读