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

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

项目地址

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 回复

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

共收到 35 条回复 时间 点赞

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

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

测试新人 回复

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

li 回复

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

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

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

帮助文档打不开

King 回复

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

这么改了啥?

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

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

cooling 回复

celery,支持的

King 回复

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

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

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

先赞为敬😀

山止川行 回复

感谢支持😀

geekbing 回复

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

测试新人 回复

做异步和定时任务

测试新人 回复

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

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

测试新人 回复

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

testerddfd 回复

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

花菜 回复

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

测试新人 回复

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

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

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

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

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

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

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

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

测试新人 回复

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

testerddfd 回复

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

看看操作手册->最佳实践那,https://lunar-link-docs.fun/docs/guide/practice.html

testerddfd 回复

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

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

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

geekbing 回复

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


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

回复

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

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