自动化工具 基于 HttpRunner + Django + Vue + Element UI 的接口自动化测试平台,生产可用

geekbing · 2024年03月24日 · 最后由 回复于 2025年04月03日 · 13345 次阅读

项目地址

https://github.com/tahitimoon/LunarLink

帮助文档

https://lunar-link-docs.fun

平台简介

基于 HttpRunner + Django + Vue + Element UI 的接口自动化测试平台,生产可用。

此外,非常感谢 花菜。没有 AnotherFasterRunner 就不会有 LunarLink :)

技术栈

  • [x] 🎨 Django
  • [x] 🎶 Django Rest framework
  • [x] 🎉 Vue.js
  • [x] 🎃 Element UI
  • [x] 🏐 django-celery-beat(定时任务)
  • [x] 🎲 Nginx(反向代理,https 配置等)
  • [x] 👟 HttpRunner(测试用例执行引擎)
  • [x] 🔒 RabbitMQ
  • [x] 🚚 Redis
  • [x] 💎 MySQL
  • [x] ⛏ Docker

功能模块

  • 登录:账号认证、用户管理、权限管理
  • 项目管理:新增项目、列表展示及相关操作,支持项目看板,显示项目每日、每周、每月不同维度数据
  • 项目概览:项目基本信息,API、测试用例、任务执行总览,每日明细
  • API 模板:一个 API 对应后端一个 HTTP 接口,API 可以单独运行,也可以作为一个用例步骤,支持 API 分组、参数提取、数据断言、变量引用、前后置钩子函数、接口调试、日志显示
  • 接口导入:支持同步 YApi(以 YApi 做媒介间接支持 Swagger、Postman、Har),无需手动录入接口
  • 测试用例:支持分组管理,由一个或多个 API 组成,支持关联接口的动态参数传递,不区分场景用例和单接口用例,支持同步、异步批量执行,生成测试报告
  • 配置管理:自定义不同配置的请求 base_url 地址,公共请求头参数、局部变量、前后置钩子函数、参数化内容,API 和用例可以选择不同配置执行
  • 全局变量:定义变量供 API 使用,变量值也可以引用驱动代码中的函数,通用账号、秘钥可以定义在此处
  • 驱动代码:支持 Python 脚本,定义前后置钩子函数、辅助函数可以轻松实现请求参数签名,加密和解密响应等功能
  • 定时任务:可设置定时任务,遵循 crontab 表达式,可在线开启、关闭,用例执行支持串行、并行,完成后测试报告推送企业微信
  • 历史报告:保存定时、调试、异步等不同类型的测试报告,可在线查看、筛选、删除,还可查看他人测试报告

在线体验

👩‍👧‍👦 演示地址:http://47.119.28.171:8081

  • 体验账号:test
  • 密码:test2023

准备工作

Python >= 3.9.5 (推荐3.9.x版本)
nodejs >= 16.0 (推荐最新)
Mysql >= 5.7.0 (推荐5.7.x版本)
RabbitMQ >= 3.x-management(默认需要,推荐最新版)
Redis >= 6.2.6

前端 ♝

建议使用 yarn,项目提供了yarn.lock,使用其他包管理器,容易出现版本依赖问题。

# 克隆项目
git clone https://github.com/tahitimoon/LunarLink.git

# 进入项目目录
cd LunarLink/frontend

# 安装依赖
yarn install --registry=https://registry.npmmirror.com

# 启动服务
yarn start
# 浏览器访问 http://127.0.0.1:8888
# config/index.js 文件可配置启动端口等参数
# config/dev.env.js 文件可配置后端接口地址
# config/prod.env.js 文件保持不变
# 构建生产环境
# yarn build

后端 💈

# 克隆项目
git https://github.com/tahitimoon/LunarLink.git

# 进入项目目录
cd LunarLink/backend

# 将.env.example文件重命名为.env 并配置相关参数
mv .env.example .env

# 安装依赖环境
pip3 install -r requirements.txt

# 执行迁移命令:
python3 manage.py makemigrations
python3 manage.py migrate

# 创建管理员用户
python3 manage.py createsuperuser

# 启动项目
python3 manage.py runserver

# 开启流量录制代理
python3 proxy.py

访问项目

# 登录管理后台,设置账号姓名
http://127.0.0.1:8000/admin/

# 浏览器打开
http://127.0.0.1:8888
用户/密码:管理员用户/密码

# 接口文档地址
http://127.0.0.1:8000/swagger/

开启定时/异步任务

# 启动celery,在控制台执行
celery -A backend worker -B --loglevel=info

演示图 ✅

最佳回复

这个开源项目不错,提供了不少思路,赞赞

都是在前人的思路上面继续优化,取之开源,用之开源😀

geekbing #6 回复

看到了非常谢谢楼主,准备试着搭建你的项目,很符合目前公司人员定位,不会代码界面化操作,非常谢谢

共收到 36 条回复 时间 点赞

这个开源项目不错,提供了不少思路,赞赞

这类平台工具现在都跟车间批量生产的一样😁 ,大同小异的实现着

都是在前人的思路上面继续优化,取之开源,用之开源😀

li #1 回复

也是从别人的开源中来学习,现在开源出来,大家一起交流。😀

geekbing 关闭了讨论 03月25日 18:12
geekbing 重新开启了讨论 03月25日 19:35

有没有使用文档,比如提取变量作为参数之类的,看了下在线体验的,没找到这块的内容

帮助文档打不开

King #7 回复

帮助文档:https://lunarlink-doc.vercel.app/,估计得搭个梯子

这么改了啥?

任务中心怎么实现的?apsscheduler 还是 celery,支持多任务后台定时执行?

这咋还搞了个需要搭梯子的文档,大佬能搞个本地的帮助文档吗

cooling #11 回复

celery,支持的

King #29 回复

https://lunar-link-docs.fun/ 弄好了,你看看可以访问么😀

geekbing 关闭了讨论 03月27日 16:21
geekbing 重新开启了讨论 03月27日 16:21
disable #31 回复

https://lunar-link-docs.fun/ 可以看看这个文档

先赞为敬😀

感谢支持😀

geekbing #2 回复

你这里的 MQ 是干嘛用的?做异步任务?

做异步和定时任务

小型项目引入 RabbitMQ 咋感觉有点夸张😂 系统的复杂性和维护成本增加了吧,今晚看下代码😁

楼主牛啊,在现实项目中有应用到吗?后续还会维护吗?这个开源的项目

MQ 是作为 celery 的 Broker,也可能使用 Redis 代替。没啥维护成本。
前公司已经稳定运行 5 年

testerddfd #23 回复

有的,实际在公司中有落地,后续还会维护,还有好多东西需要优化。

niubility

花菜 #24 回复

了解,在 docker 里安装 rabbitmq 的确挺方便的,学了下 celery 的使用,原来这里的 mq 是消息代理的作用,也可以用 redis 替代

redis 做消息队列会有一个严重的问题,缺少 ack 机制,消费了消息,这个消息就没了。

如果发生 worker 处理异常,可能就会导致消息丢失。

另外,不仅仅是 mq,db,redis 这些都安装在 docker 也没问题。
不用担心性能损失的,对内的平台完全不用考虑。

哪怕对外的业务系统,这么干也完全没问题。

容器化的部署,迁移和升级都方便多了。

点了下用例和接口那里,感觉新用户使用起来有点晕,没有流程类指引信息,自己摸索了几分钟才猜出来怎么传值和添加

楼主,我看了使用手册,没看到有对驱动代码具体说明?怎么用呢?就比如我登录接口的请求签名规则写在这里,保存在什么地方怎么用呢?

流程步骤那里像 Swagger 文档, 然后有往左边拖拽写步骤用例这里看得我很懵,还是有学习成本,不比 jmeter 低

一个测试用例有多个接口组成,拖拽接口,形成接口的流程,比如登录接口->查看详情接口->添加购物车接口->结算 我理解是这样子

testerddfd #9 回复

理解没问题,是这样子的😀

testerddfd #11 回复

请求签名规则写在驱动代码里面,然后通过前置钩子函数去调用驱动代码里面的函数,详细可以参照操作手册里面的:接口管理 -> Hooks 和 最佳实践

文档地址分别如下:
https://lunar-link-docs.fun/docs/guide/api_manage.html#hooks

https://lunar-link-docs.fun/docs/guide/practice.html

geekbing #6 回复

看到了非常谢谢楼主,准备试着搭建你的项目,很符合目前公司人员定位,不会代码界面化操作,非常谢谢


部署在本地,运营 debugtalk 报错 Fatal Python error: _Py_HashRandomization_Init: failed to get random numbers to initialize Python
Python runtime state: preinitialized

#38 回复

可能是本地 Python 版本的问题,试试 Python3.9.5 的版本,然后使用虚拟环境安装依赖库。
可以把部署环境系统,Python 版本,问题描述等提到 github 的 issues 去,方便追踪。

能不能加下微信,有好多问题请教

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册