后端接口测试【免费下载链接】easy-mockA persistent service that generates mock data quickly and provids visualization view.项目地址https://gitcode.com/gh_mirrors/ea/easy-mock点击查看免费下载Easy Mock 是一个基于 Node.jsKoa构建的可视化、可持久化的 Mock 数据生成服务帮助前后端团队在接口未就绪时快速获得稳定、可扩展的模拟数据并内置接口代理、团队协作与 Swagger 导入等能力。本文以本仓库 README.md 为骨架结合 app.js、router-config.js、config/default.json 等源码与配置完整讲解 Easy Mock 的安装、配置、启动、命令与 PM2 生产部署并深入剖析其 Mock 生成、代理、安全限流与缓存等底层实现让读者既能照着文档跑起来也能读懂源码去定制。Easy Mock 是什么Easy Mock 是一个快速生成模拟数据、并提供可视化视图的持久化服务。所谓持久化指所有项目、接口与 Mock 规则都存放在 MongoDB 中不会因为服务重启而丢失可视化则指它提供了完整的 Web 管理界面基于 Vue 2 iView 构建前端代码位于 views/ 目录可以在浏览器中直接创建项目、编辑接口、预览 Mock 数据。从 package.json 可以看到Easy Mock 当前版本为 1.6.0主入口为app.js服务端基于 Koa 2 生态koa-router、koa-jwt、koa-body、koa-ratelimit等数据层使用 Mongoose MongoDB缓存与计数使用 ioredisMock 数据生成依赖 Mock.jsmockjs并借助vm2在沙箱中执行用户自定义的 Mock 模板逻辑兼顾灵活性与安全性。核心特性一览根据 README.md 的 Features 列表Easy Mock 提供以下核心能力特性说明仓库佐证接口代理API Proxying将 Mock 接口转发到真实后端服务实现先联调后替换controllers/mock.js 中getMockAPI的代理分支快捷键操作编辑器内置键盘快捷键提升接口编辑效率views/components/keyboard-short/协同编辑多人可同时编辑同一项目状态实时同步views/store/modules/project.js 等状态管理团队项目支持创建团队Group并将项目归类到团队按团队控制权限router-config.js 中的/api/group/*路由RESTful接口 URL 支持{param}路径参数自动转换为:param匹配controllers/mock.js 中 URL 归一化逻辑Swagger / OpenAPI支持 1.2 / 2.0 / 3.0 规范可基于 Swagger 快速创建项目并展示入参、返回值与实体类路由POST /api/project/sync/swagger与依赖swagger-parser-mock灵活响应数据响应体支持函数式模板、自定义 status/headers/cookiescontrollers/mock.js 中_res处理逻辑Mock.js 语法直接使用 Mock.js 的xxx语法生成随机数据controllers/mock.js 中的Mock.mock调用restc 接口预览通过 restc 中间件以可视化方式预览 Mock APIrouter-config.js 中restc.koa2()其中支持接口代理意味着当某个接口的mode被配置为http(s)://...时Easy Mock 会作为中转把请求转发到目标地址并返回真实数据否则走本地 Mock 模板生成数据。两种模式共存于同一套/mock/:projectId/:mockURL路由体系。环境准备在开始之前需要先准备好以下运行环境来自 README.md 的 Quick Start 前提说明Node.jsv8.xREADME 明确标注v10.x 不受支持请以 v8 系列为准MongoDB v3.4Redis v4.0服务端依赖项可从 package.json 的dependencies中查看包括 Koa 系列中间件、mongoose、ioredis、ldapjs、mockjs、vm2、swagger-parser-mock等。安装与快速启动安装克隆仓库并安装依赖$ git clone https://gitcode.com/gh_mirrors/ea/easy-mock.git $ cd easy-mock npm install配置Easy Mock 使用 node-config 作为配置管理模块会根据运行环境加载不同的配置文件。仓库内已提供默认配置 config/default.json你可以直接修改它也可以新建config/local.json覆盖其中部分字段local.json不会被提交适合存放本机差异化配置如数据库地址、JWT 密钥等。完整的默认配置如下与 README.md 中的配置示例一致同时这也是仓库内 config/default.json 的真实内容{ port: 7300, host: 0.0.0.0, pageSize: 30, proxy: false, db: mongodb://localhost/easy-mock, unsplashClientId: , redis: { keyPrefix: [Easy Mock], port: 6379, host: localhost, password: , db: 0 }, blackList: { projects: [], // projectId例5a4495e16ef711102113e500 ips: [] // ip例127.0.0.1 }, rateLimit: { // 参照 koa-ratelimit 的配置 max: 1000, duration: 1000 }, jwt: { expire: 14 days, secret: shared-secret }, upload: { types: [.jpg, .jpeg, .png, .gif, .json, .yml, .yaml], size: 5242880, dir: ../public/upload, expire: { types: [.json, .yml, .yaml], day: -1 } }, ldap: { server: , // 设置 server 代表启用 LDAP 登录。例ldap://localhost:389 或 ldaps://localhost:389使用 SSL bindDN: , // 绑定用户名例cnadmin,dcexample,dccom password: , filter: { base: , // 查询用户的路径例dcexample,dccom attributeName: // 查询字段例mail 或 email } }, fe: { copyright: , storageNamespace: easy-mock_, timeout: 25000, publicPath: /dist/ } }启动配置完成后使用开发模式启动$ npm run dev # 访问 http://127.0.0.1:7300dev脚本在 package.json 中定义为nodemon --ignore views/ --ignore public/ app即使用 nodemon 监听文件变化自动重启服务方便开发调试。启动成功后app.js 会输出server started at http://0.0.0.0:7300。配置项深度解读下面逐项说明每个配置字段的作用并结合源码说明其实际影响。服务监听与基础参数port / host / proxy / pageSize / dbport / host服务监听端口与地址。在 app.js 中通过app.listen(port, host)生效默认0.0.0.0:7300。proxy是否为 Koa 开启信任代理头。在 app.js 中通过app.proxy config.get(proxy)生效部署在 Nginx 等反向代理之后时应考虑开启。pageSize接口/项目列表的默认分页大小在 controllers/mock.js 与 controllers/project.js 中以config.get(pageSize)读取默认 30。dbMongoDB 连接串。在 models/index.js 中mongoose.connect(config.get(db))直接使用默认mongodb://localhost/easy-mock。Redis 配置redis: { keyPrefix: [Easy Mock], port: 6379, host: localhost, password: , db: 0 }Redis 在 Easy Mock 中承担三类职责接口数据缓存/mock路由首次请求时会把整个项目的接口列表写入 Redis有效期 30 分钟见 controllers/mock.js 中的redis.set(redisKey, ..., EX, 60 * 30)限流计数作为koa-ratelimit的存储后端见 router-config.js接口调用计数每次 Mock 请求都会redis.lpush(mock.count, api._id)用于统计接口被调用次数。该配置在 util/index.js 中通过new Redis(config.get(redis))创建全局连接getRedis()供其他模块复用。安全与限流jwt / blackList / rateLimitjwt登录凭证的签发与校验配置。secret用于签名expire为过期时间默认 14 天。在 app.js 中通过koaJwt({ secret: jwtSecret })全局启用并对以下路径放行/api/u/login、/api/u/register、/api/mock/by_projects、/api/mock/export、/api/wallpaper。签发逻辑在 controllers/user.js 中读取jwt.secret与jwt.expire。blackList.projects / ips黑名单。在 middlewares/index.js 中blackList.ips配合ip-filter实现 IP 级拦截ipFilter中间件blackList.projects在mockFilter中间件中生效命中黑名单的projectId返回接口请求频率太快已被限制访问。rateLimit接口限流。在 router-config.js 中通过koa-ratelimit配置max窗口内最大请求数与duration窗口毫秒数默认 1000 次 / 1000ms并输出Rate-Limit-Remaining/Rate-Limit-Reset/Rate-Limit-Total响应头。文件上传uploadupload: { types: [.jpg, .jpeg, .png, .gif, .json, .yml, .yaml], size: 5242880, dir: ../public/upload, expire: { types: [.json, .yml, .yaml], day: -1 } }在 controllers/util.js 的上传接口中types允许上传的扩展名白名单不符合则直接拒绝size单文件大小上限字节默认 5 MB5242880 字节dir文件存储目录相对config/解析见 app.js 中/upload静态服务的路径拼接expire对.json/.yml/.yaml这类配置文件型附件设置过期时间day为 -1 表示不过期大于 0 时返回过期日期。文件会按YYYY/MM/DD目录归档并以 MD5 随机命名。LDAP 登录ldapldap: { server: , // 设置 server 即启用 LDAP 登录如 ldap://localhost:389 或 ldaps://localhost:389SSL bindDN: , // 绑定账号如 cnadmin,dcexample,dccom password: , // 绑定账号密码 filter: { base: , // 用户搜索基路径如 dcexample,dccom attributeName: // 用户名字段如 mail 或 email } }在 util/ldap.js 中LDAPUtil.enable判断ldapConf.server是否为空只要配置了serverLDAP 登录即被启用。登录流程为使用bindDNpassword建立连接并 bind再以filter.base为基、按attributeName搜索用户最后校验用户密码该文件同时处理了连接超时与错误回调。相关单元测试见 test/util/ldap.test.js。前端配置fefe: { copyright: , storageNamespace: easy-mock_, timeout: 25000, publicPath: /dist/ }publicPath前端静态资源的基础路径默认/dist/。构建配置 build/webpack.base.config.js 中直接读取fe.publicPath。如需替换为自己的 CDN 地址修改后必须重新执行npm run buildstorageNamespace前端本地存储命名空间前缀timeout前端接口请求超时时间毫秒copyright登录页/页脚版权文案。背景图服务unsplashClientId登录页背景图由两套服务提供Unsplash与Bing。在 controllers/util.js 的wallpaper接口中若配置了unsplashClientId请求https://api.unsplash.com/photos/random?...返回类型标记为unsplash若留空默认则由 Bing 的壁纸接口提供返回类型标记为bing并在请求失败时降级为内置的默认图片。背景图结果会通过 LRU 缓存 1 小时避免频繁请求第三方接口。常用命令除npm run dev外README.md 还列出以下常用命令均定义于 package.json# 构建前端静态资源 $ npm run build # 以生产环境方式启动需先执行 build $ npm run start # 运行单元测试 $ npm run test # 语法检测ESLint $ npm run lint命令细节说明build实际执行build:dev即先清理dist/再依次执行build:clientwebpack 打包前端与build:serverwebpack 打包服务端渲染代码产物输出到dist/由 app.js 中的/dist静态服务对外提供start以NODE_ENVproduction直接运行node apptest先执行node test/gen生成测试用例再以NODE_ENVtest运行 Jest--runInBand --forceExitlint使用 ESLintstandard 风格对.vue与.js文件做静态检查。生产部署PM2README 推荐使用 PM2 作为守护进程保证服务稳定常驻。部署步骤如下1. 全局安装 PM2$ [sudo] npm install pm2 -g2. 启动前先完成配置与构建按上文说明配置好 config/default.json 或config/local.json执行npm run build生成前端静态资源。3. 用 PM2 启动$ NODE_ENVproduction pm2 start app.js以NODE_ENVproduction启动时node-config 会加载production环境的配置如config/production.json若有且 app.js 会挂载视图渲染中间件middlewares/view对外提供完整的 Web 界面。部署在内网服务器时建议在 Nginx 层再做一层反向代理与静态资源缓存。从源码看核心实现路由与中间件骨架服务启动链路位于 app.jskoa-jwt鉴权 →koa-body解析 →cors跨域 →routerConfig.mock与routerConfig.api两组路由。其中API 管理路由前缀/api定义在 router-config.js覆盖用户登录/注册/更新、分组创建/加入/删除/更新、项目创建/复制/更新/删除/同步 Swagger/工作台、Mock 接口增删改查/导出以及壁纸、文件上传等接口Mock 数据路由前缀/mock同样定义在 router-config.jsall(*, middleware.mockFilter, rate, restc, mock.getMockAPI)—— 所有方法、所有路径都经过黑名单过滤、限流、restc 预览后统一交由getMockAPI处理。Mock 数据生成与接口代理核心逻辑在 controllers/mock.js 的getMockAPI中流程如下解析/mock/:projectId/:mockURL*路径见 middlewares/index.js 的mockFilter同时从query.jsonp_param_name判断是否走 JSONP 回调从 Redis 读取该项目的接口列表缓存30 分钟过期未命中则查 MongoDB 并回填将接口 URL 中的{user}归一化为:user用path-to-regexp匹配当前请求的 method 与路径匹配成功后分两种模式生成响应代理模式当api.mode以http(s)开头时通过axios转发请求到目标地址拼接路径参数、合并 query、透传 body 与 headers超时 3 秒失败时返回接口请求失败本地 Mock 模式把api.mode即用户编辑的 Mock 模板放入vm2沙箱超时 1 秒先Mock.mock(...)做一次数据验证拦截setTimeout等危险调用再执行模板生成数据执行计数redis.lpush(mock.count, api._id)最后按 JSONP 或普通 JSON 返回。自定义响应与 JSONP在本地 Mock 模式下若模板返回值包含_res字段则支持自定义 HTTP 响应来自 README 的自定义响应配置特性实现在 controllers/mock.js 的 274-294 行{ code: 200, data: { ... }, _res: { status: 200, // 自定义 HTTP 状态码 headers: { ... }, // 自定义响应头 cookies: { ... } // 自定义 Cookie } }模板中还注入了_req对象包含 query、params、cookies 等使得 Mock 模板可以基于真实请求动态生成数据同时支持jsonp_param_name配置的 JSONP 输出。缓存、计数与调度任务util/index.js 中的BaseUtil.init()在 app.js 启动时调用会启动两个后台调度任务dropFileSchedule按upload.expire配置定期清理过期的上传文件mockUseCountSchedule定期把 Redis 中的调用计数落库到mock_count集合。测试与质量保障Easy Mock 配备了较为完整的单元测试与静态检查单元测试基于 Jest supertest测试覆盖位于 test/ 目录包括 test/controllers/mock.test.jsMock 接口的创建/匹配/代理、test/controllers/util.test.js上传与壁纸、test/middlewares/index.test.js黑名单与工具中间件、test/util/ldap.test.jsLDAP 登录等Mock 规范样例test/specs/swagger.json 提供了一份 Swagger 2.0 示例文档可用于验证基于 Swagger 创建项目/接口的功能代码规范npm run lint使用 ESLint standard 风格检查.js与.vue文件见 package.json。小结通过本文你可以完成 Easy Mock 从安装、配置到生产部署PM2的全过程并掌握port / db / redis / jwt / blackList / rateLimit / upload / ldap / fe等全部配置项的作用与底层影响。进一步阅读 app.js、router-config.js、controllers/mock.js、middlewares/index.js 等源码可以帮助你在实际业务中更好地定制限流策略、扩展 Mock 模板能力或接入企业 LDAP 登录体系。赞分享后端接口测试【免费下载链接】easy-mockA persistent service that generates mock data quickly and provids visualization view.项目地址https://gitcode.com/gh_mirrors/ea/easy-mock点击查看免费下载相关推荐Easy Mock 快速上手指南可视化 Mock 数据服务的安装、配置与部署easy-mockEasy Mock 快速上手指南可视化 Mock 数据服务的安装、配置与部署easy mock 导读 Easy Mock 是一个可视化、能快速生成模拟数据后端接口测试XStream高级技巧自定义转换器与别名系统深度解析XStream高级技巧自定义转换器与别名系统深度解析 XStream是一款强大的Java对象与XML序列化框架它提供了灵活的自定义转换器和别名系统让开发者Easy Mock 完整使用指南Mock 数据生成、Swagger 导入与响应式数据实战Easy Mock 完整使用指南Mock 数据生成、Swagger 导入与响应式数据实战 Easy Mock 是一个可视化、能够快速生成 模拟数据 的持久化后端接口测试上一篇HackTricks终极指南从零开始构建你的网络安全武器库下一篇opencodex 池账号配额预充Quota Priming启动期与首路由前的 WHAM 预热实现解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考