实践可以得到经验
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端界面 │ │ 后端API服务 │ │ 部署执行器 │
│ (Vue/React) │◄──►│ (Node.js) │◄──►│ (Shell/CI) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
▼
┌─────────────────┐
│ 数据库存储 │
│ (MongoDB/MySQL)│
└─────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 🚀 自动部署控制台 用户:张三 │
├─────────────────────────────────────────────────────────────────┤
│ 环境:[测试环境 ▼] 版本:[v1.2.3 ▼] [🔄 刷新] [⚙️ 设置] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 客户端部署 │ │ 服务器部署 │ │ 数据库迁移 │ │
│ │ ✅ 已完成 │ │ 🔄 进行中 │ │ ⏳ 等待中 │ │
│ │ 耗时: 2分30秒 │ │ 进度: 65% │ │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ 部署进度:████████████████████████░░░░░░░░ 75% │
│ │
│ 📝 实时日志: │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ [14:32:01] 开始客户端包部署... │ │
│ │ [14:32:15] 上传客户端包到服务器... │ │
│ │ [14:34:31] ✅ 客户端部署完成 │ │
│ │ [14:34:32] 开始服务器包部署... │ │
│ │ [14:34:45] 正在停止旧服务... │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ [🚀 开始部署] [⏸️ 暂停] [⏹️ 停止] [🔙 回滚到上一版本] │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 📊 部署历史记录 │
├─────────────────────────────────────────────────────────────────┤
│ 时间范围:[最近7天 ▼] 状态:[全部 ▼] [🔍 搜索框] │
├──────┬─────────┬──────────┬────────┬─────────┬──────────────────┤
│ 状态 │ 版本 │ 部署时间 │ 耗时 │ 操作人 │ 操作 │
├──────┼─────────┼──────────┼────────┼─────────┼──────────────────┤
│ ✅ │ v1.2.3 │ 14:30 │ 8分钟 │ 张三 │ [查看日志][回滚] │
│ ❌ │ v1.2.2 │ 10:15 │ 失败 │ 李四 │ [查看日志][重试] │
│ ✅ │ v1.2.1 │ 昨天 │ 6分钟 │ 王五 │ [查看日志] │
└──────┴─────────┴──────────┴────────┴─────────┴──────────────────┘
// 推荐技术栈
- 框架:Vue 3 + TypeScript 或 React + TypeScript
- UI库:Element Plus / Ant Design
- 状态管理:Pinia / Redux Toolkit
- 实时通信:WebSocket / Socket.io
- 图表库:ECharts / Chart.js
- 构建工具:Vite / Webpack
// 推荐技术栈
- 运行时:Node.js + Express 或 Python + FastAPI
- 数据库:MongoDB / PostgreSQL
- 消息队列:Redis / RabbitMQ
- 任务调度:Bull Queue / Celery
- 容器化:Docker + Docker Compose
- CI/CD:Jenkins / GitLab CI / GitHub Actions
#!/bin/bash
# deploy.sh - 部署脚本示例
# 配置参数
VERSION=$1
ENVIRONMENT=$2
CLIENT_PACKAGE_URL=$3
SERVER_PACKAGE_URL=$4
# 1. 前置检查
echo "开始部署检查..."
check_environment
check_dependencies
# 2. 下载部署包
echo "下载客户端包..."
download_package $CLIENT_PACKAGE_URL "client"
echo "下载服务器包..."
download_package $SERVER_PACKAGE_URL "server"
# 3. 备份当前版本
echo "备份当前版本..."
backup_current_version
# 4. 部署客户端
echo "部署客户端..."
deploy_client
# 5. 部署服务器
echo "部署服务器..."
deploy_server
# 6. 健康检查
echo "执行健康检查..."
health_check
# 7. 清理临时文件
echo "清理临时文件..."
cleanup
echo "✅ 部署完成!"
// 部署相关接口
interface DeployAPI {
// 触发部署
POST /api/deploy {
version: string;
environment: string;
packages: {
client: string;
server: string;
};
}
// 获取部署状态
GET /api/deploy/status/:deployId
// 获取部署日志
GET /api/deploy/logs/:deployId
// 停止部署
POST /api/deploy/stop/:deployId
// 回滚版本
POST /api/deploy/rollback {
fromVersion: string;
toVersion: string;
}
// 获取部署历史
GET /api/deploy/history?page=1&limit=10&status=all
}
// WebSocket 实现实时更新
const socket = io('/deploy');
socket.on('deploy-progress', (data) => {
updateProgress(data.percentage);
updateCurrentStep(data.step);
appendLog(data.log);
});
socket.on('deploy-complete', (data) => {
showNotification('部署完成', data.result);
refreshDeployHistory();
});
// 部署状态管理
const DeployStates = {
PENDING: 'pending',
DOWNLOADING: 'downloading',
DEPLOYING_CLIENT: 'deploying_client',
DEPLOYING_SERVER: 'deploying_server',
HEALTH_CHECK: 'health_check',
SUCCESS: 'success',
FAILED: 'failed',
ROLLBACK: 'rollback'
};
class DeploymentStateMachine {
transition(currentState, action) {
// 状态转换逻辑
}
}
// 重试机制
async function deployWithRetry(config, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await executeDeploy(config);
} catch (error) {
if (i === maxRetries - 1) throw error;
await delay(Math.pow(2, i) * 1000); // 指数退避
}
}
}
这个方案提供了一个完整的自动部署可视化窗口设计思路,您可以根据实际情况调整技术栈和功能范围。建议先实现 MVP 版本验证可行性,再逐步完善功能。
我看了一下代码 当时用了https://gitcode.com/gh_mirrors/eas/easy-flow 把里面的代码抽出来当成项目模块维护了,代码很少,封装也不复杂,适合集成使用。
可以试试 Cursor 编程/学习辅助是个不错的选择哇
Cursor 提供隐私模式,且在官方文档中指出 嵌入向量和元数据(如哈希值、文件名)可能会存储,明文代码片段会在计算后销毁。
总的来说在隐私模式下,Cursor 仍需要处理你的代码,但会通过加密和临时存储等方式保护你的代码隐私,确保你的代码不会被永久保存或用于训练模型。
既然是 py 系的 支持一下前后置执行 py 脚本 就有可能兼容 sosotest(曾经入职迁移过 1500+ sosotest 场景用例)
还有的 AYO-YO-O 加我 我拉你进群交流
可以理解为数据工厂内部包装了一种造数方式其中一种是自动化脚本,作为外层包装,只需要外置一个大家通俗易懂的表单,内部引用自动化脚本,屏蔽内部逻辑,简化使用规则。
自动化脚本内部逻辑略显复杂,而造数的人并不关心内部构造,所以尽量屏蔽这些展示。
屏蔽掉内部逻辑,对外展示就是一个表单 + 一个按钮
关联关系也很简单,几个自动化脚本 + 一个拖拉拽简单表单,表单的 key 为变量,运行时注入即可。
多进程下 ws 连接的 app 实例,与你其他请求连接的 app 实例不是一个,但你都是在内存里存储的连接,而恰好进程资源是不共享的,你可以通过日志打印进程号验证这一点,多进程下你必须通过一个中间件共享资源。
哈哈哈如果你在浙江有婚假 可以从 1.26 休息到 2.19
可以看我历史的帖子 希望方向 对你有帮助
留一两个人做测试技术方面,其他打散分到横向部门去。后续技术方面价值不高的话,也都到横向部门吧。
我是现写的,我觉得初学者用 element/ antd 这种比高度封装的 admin template 上手更快。
宝 暂时没有呢
可以直接用 BlockingScheduler
在我们公司只要你做的事情对公司有价值,额外抽调一些开发人力去偶尔支持一下也是可以的,一般的测试平台不算是一个非常复杂的系统可能一小会就可以解决。如果公司连这点人力都不肯出那说明这种平台在咱们公司也没啥存在的必要。
我个人是觉得脚本都写的 6 的,无非是工程化差了点,所用的一些库有些区别,其他都是大差不差的,在现有整体平台搭建起来的情况下 改改 bug 应该没有什么问题。
另外我觉得对于个人而言,如果一直抱着使用者这种思路去工作,没有对工具的好奇心,可能最终也只会用工具了。
我认为不管你现在用纯代码也好,用配置文件也好,如果一直可以坚持用下去,那么最终会成为一个平台,放在业务开发上来说,很多细分领域的低代码平台已然很成熟, 大到金蝶云低代码, 小到那些拖拉拽的小应用。而对于测试层面来讲其实底层组件非常适合固化,例如一个步骤执行大概可以分为: 前置动作 - 步骤执行 - 后置动作, 抽象出中间的步骤,具体实现拿出来例如 http/mqtt/ws/modbus 等等。固化后的组装,数据传递则组成了一个场景用例,我认为这是一个非常适合平台化的场景,至于好用不好用,这些都是设计问题都是可以迭代之后改的,没有一个工具从出生就是非常好用的。
另外一个方面接口测试等自动化测试其实在现实的开发测试场景中占的比重并不是特别大,且如果作为一个能力孤岛也无法发挥出其重要作用,这就需要有效能度量,三方对接,采集监控,覆盖率采集,任务调度等等互相依托才可以发挥最大的作用。
举一个实际的例子:
一个公司使用 pytest allure 做自动化测试,那么他要解决以下问题:
可以发现这几个基础的问题有很多都涉及到持久化数据,以及代码能力。持久化数据之后最简单的写个页面展示, 代码能力方面,由于自动化测试的代码一直都在变,谁能保证自动化代码没有异常,而平台核心驱动代码可以一直不变,变得是用例配置,可以理解为用用例的配置去测试了平台核心驱动的代码,当用例越多那么平台就越可靠,不会出现使用产品来测试脚本的尴尬情况。
且当然以上这些基本的问题仅出于仅仅是测试这个角色在用的情况下,当一个用例作为监控/待办工具下,其他的角色(产品经理/研发)都会遇到更多的问题, 综上不管怎么样 拥有一个大家可以访问的页面是肯定的事情,至于平不平台,就要看这个东西大家的依赖程度,依赖越深,迭代越多,你这页面越复杂,慢慢也就成了一个平台。
ps: 附上我司的自动化测试
复写原来的执行 sql 的方法,做一个拦截即可。
像是 LLM Agent 这种开发配置平台,万变不离其宗其实就是个 Flow, 至于是 DAG/LIST 其实也只是一个展现交互方式。 另外我个人觉得这个应该做在低代码平台上面,因为对于低代码平台来讲本身具有规则引擎,并且 API/DB 等这种仅仅是获取资源的一种方式,他们并不该做为平台主体,作为依赖项更贴切一点。
在我目前的思想理解上,现在市面上的 agent 开发平台例如 langflow/dify/coze/chatdb 无非是原本 flow 中一些特殊节点(llm 相关的逻辑推理/知识嵌入/rerank),例如与测试相关的流程类的用例中,因为原本就包含一些控制器步骤(if/for/while)只要步骤增加一些 llm 相关的处理节点,外部套入 sse/ws 接口,就可以对外暴露出一个自己配置的 ai 助手。
正经群 话少也不让说与技术无关的事情 看到会提醒
加我 AYO-YO-O
求职软件上看一下高等级的职位要求。
主动去监测变化不如回调通知来的便捷, 例如加 git 仓库提交相关代码变更的事件回调亦或者 pipeline 中部署相关的事件触发回调。
你好,18 年毕业现在应该是六年不到一点的经验吧。 前后端写 CRUD 一俩个月就可以了(科班的), 主要是看你的兴趣点有没有在这上面,其他设计的时间就比较需要漫长的积累了。