首页/新闻资讯/正文详情

Postman变量机制实战:从环境切换到token自动传递

发布时间:2026/9/26 5:54:11 来源:云帆数科 栏目:资讯中心
Postman变量机制实战:从环境切换到token自动传递
聊个真实的场景。上个月朋友接手一套老项目的接口测试用例三十多个接口全部写死了开发环境域名每次想切到测试环境就得在编辑器里做一次全局替换替换完还不敢跑全量生怕把请求体里某个同名参数一起换掉。他一上午都在干这个活跑来问我Postman 到底有没有“配置化”的玩法我说有而且你天天都能用就是变量。Postman 的变量机制本质上就是把请求里的地址、参数、请求头、脚本中的值从“写死”变成“引用”。理解了它你就能用一份接口用例跑遍开发、测试、生产多个环境能在登录接口返回后把 token 自动塞给后续接口还能用 CSV 文件一次性跑几十上百组数据。这篇内容主要写给两类人一类是刚接触 Postman、被手动改参数折磨的接口测试新手另一类是已经在用变量但经常遇到“变量不生效”“作用域搞混”之类问题的人。我会按变量类型、作用域优先级、定义与读取方式、典型应用场景、常见翻车现场的顺序展开全程结合具体操作和代码尽量让每个人都能照着做。1. 项目概述为什么要理解 Postman 变量1.1 变量的核心价值从“改来改去”到“一键切换”先说一个容易被忽略的事实Postman 本身不提供配置中心也不管你是开发环境还是测试环境URL 怎么写它就怎么发。很多团队接口用例维护不下去不是不爱用工具而是被“手动改参”这件事耗光了耐心。举个例子。有个接口地址是http://dev.example.com/api/users另一套环境是http://test.example.com/api/users。如果你在请求地址里直接写死那么环境一换所有用例全要改。更麻烦的是请求头里的 token、密钥每个环境值都不一样散落在几十个请求里改起来极易漏。变量机制解决的就是这件事你把变化的部分抽出来存到一个叫“环境”的容器里请求里只写占位符。切换环境时Postman 会自动用当前环境的值替换占位符你不需要动任何一个请求。这不是什么高深概念有点像网页模板。你写过一个 PHP 或 Vue 模板的话应该能立刻理解这种“把数据从展示层剥离”的思路。Postman 变量就是接口测试领域里的模板引擎{{baseUrl}}就是模板里的变量标签。1.2 变量的本质接口测试里的“占位符”Postman 变量是一个键值对。键是变量名值就是你想替换的内容。在请求 URL、Headers、Body、Tests、Pre-request Script 里你用{{变量名}}的格式去引用它。发送请求时Postman 会先做一次全量字符串替换把变量标签替换成真实的值然后再发出请求。这里有两个常被新手误会的点第一变量替换是发生在请求真正发出之前也就是“预解析”阶段。所以你在手写请求体时写{{token}}实际发出去的是eyJhbGciOiJIUzI1NiJ9...这一长串真实 token。如果你在 Console 里看请求体看到的也是替换后的值不是在编辑框里看到的占位符。第二{{}}这个双花括号只作用于字符串。Postman 不会像 JavaScript 那样在表达式中帮你实时计算变量。你在请求体里写的{{count}} 1如果变量值是 10它被替换后就是10 1是一个包含加号和空格的字符串不是数字 11。想要计算你得用脚本在脚本里先取出变量做运算再赋值给新的变量。这一点我在后面的问题排查章节里还会展开讲。那么Postman 的变量到底有哪几种它们之间是什么关系这是用好变量的第一道坎。2. 变量地图Postman 的五种变量与作用域优先级2.1 五个作用域的定位与使用场景Postman 官方把变量分为五类从局部到全局依次是局部变量、数据变量、环境变量、集合变量、全局变量。它们的可见范围和生命周期完全不同我建议你直接记住他们的用途而不是死背概念。全局变量Global是所有集合、所有请求都能访问的变量生命周期最长只要你不手动删就一直存在。适合存放团队几乎不变的默认值比如组织名称、公共域名后缀。但全局变量不适合存环境差异较大的值因为它是全局唯一的你不可能同时拥有“全局变量下的开发域名”和“全局变量下的测试域名”。集合变量Collection Variables是挂在某个集合上的变量。一个集合可以理解为一组相关的接口用例比如“用户模块”“订单模块”。集合变量的生命周期也长但它只对当前集合生效。适合存放模块内共享、但不同模块可能有不同值的配置比如user_id、order_status这些业务层面的公共参数。环境变量Environment Variables是我们日常用最多的。一套环境就是一组键值对比如“开发环境”里有baseUrlhttp://dev.example.com“测试环境”里有baseUrlhttp://test.example.com。环境可以创建多套同一时间只能启用一套。环境变量适合存会随环境变化的值域名、账号、密码、token 都放这里。数据变量Data Variables来自外部文件主要是 CSV 或 JSON只在 Collection Runner 或 Newman 里才有。它相当于给每次迭代传入的一组“测试数据”变量名就是 CSV 的列名。比如 CSV 第一列叫username那么请求体里写{{username}}Runner 每次迭代都会换一个值。这个适合批量造数据、批量校验场景。局部变量Local Variables是在脚本里通过pm.variables.set()创建的变量只在当前请求的整个生命周期包括 Pre-request Script、请求、Tests 整个流程里有效。适合存放临时计算出来的中间结果比如签名串、时间戳。它的特点是随请求结束而消失不会污染其他请求。2.2 变量优先级最容易搞混的坑优先级这个话题我单独拎出来说因为这是翻车率最高的一块。Postman 在解析{{变量名}}时如果发现多个作用域里有同名变量它会按下面的顺序从高到低取值局部变量 大于 数据变量 大于 环境变量 大于 集合变量 大于 全局变量。举个例子你在全局变量里定义了baseUrlhttp://global.example.com同时开发环境里也定义了baseUrlhttp://dev.example.com当前启用的恰好是开发环境那么{{baseUrl}}最终解析出的就是http://dev.example.com。环境变量会把全局变量“盖住”。如果某个集合里还有同名的集合变量baseUrlhttp://collection.example.com因为环境变量优先级更高最终取值仍然是http://dev.example.com。这条规则说起来简单实际排查时很多人懵就懵在这里——明明全局变量里有值请求却是用的环境里的值或者明明集合变量已经更新请求里还是旧值。可以用一个生活场景来辅助记忆全局变量像家里的公共预算环境变量像这个月的家庭开销计划集合变量像你预算给自己的小目标局部变量像你临时口袋里的零钱。越靠近“当前这顿饭”的钱越容易花出去优先级越高。记住这个逻辑之后遇到“变量为什么是这个值”的问题先想想它到底被几个作用域定义了。3. 定义与读取变量界面操作和脚本操作全解析3.1 在界面里手动定义变量的两条路径第一种路径左侧导航栏选择“环境”点击右上角的加号创建新环境。环境名建议用开发环境、UAT环境这样一看就明白的命名。创建好后Environment 栏里就可以逐条添加变量键值对。这里要注意变量值栏右侧有个眼睛图标点开能看当前环境中所有变量的明暗状态暗色表示变量被更高优先级的同名变量覆盖了。这是个很实用的排查入口后面讲问题时会再用到。第二种路径在请求编辑框里直接输入{{变量名}}输入的过程中 Postman 会弹出快速添加提示你可以在那个下拉里直接选择“设为环境变量”它会帮你自动创建并赋值。这个方式适合边写请求边快速定义但容易造成变量管理混乱比如各种手滑创建的变量散落在全局里。我建议日常以第一种路径为主快速添加仅适合临时用一下。手动定义变量后读取方式就是在任意可以输入字符串的地方写{{变量名}}。URL、Params、Headers、Body、Tests 脚本里都可以。有一点要提醒 URL 里如果变量名带空格或特殊字符最好用 URL encode 后的值去填充否则替换后可能出现请求报错。3.2 在脚本里读写变量常用 API 对照与示例Postman 的脚本运行环境是 Node.js 的一个定制版本里面内置了一个全局的pm对象让你读写变量。主流操作我都列出来方便对照// 读取环境变量 let baseUrl pm.environment.get(baseUrl); console.log(baseUrl); // 设置环境变量 pm.environment.set(token, abc123); console.log(pm.environment.get(token)); // 读取全局变量 let globalEnv pm.globals.get(appName); // 设置全局变量 pm.globals.set(appName, demo-app); // 读取集合变量 let moduleId pm.collectionVariables.get(moduleId); // 设置集合变量 pm.collectionVariables.set(moduleId, 1024); // 设置局部变量只对当前请求生效 pm.variables.set(requestId, req_ Date.now());这四个对象分别对应四种作用域pm.environment、pm.globals、pm.collectionVariables、pm.variables。数据变量是例外它不在pm对象里而是通过data变量的形式注入到 Runner 中比如pm.iterationData.get(username)可以拿到当前迭代里 username 这一列的值。写脚本时我有一个习惯凡是从响应里提取的值先打印到 Console 再 set。举个常见场景登录接口返回一个 token我想把它存到环境变量里给后续请求用。Tests 脚本可以这么写let jsonData pm.response.json(); let token jsonData.data.token; pm.environment.set(token, token); console.log(token更新为:, token);这里建议先判断返回是否成功再存防止接口报错时把 undefined 存进去。如果这个值存进去了后续所有请求引用{{token}}都会得到一个 undefined 字符串接口自然报 401而且很难排查。稳妥的写法是if (pm.response.code 200) { let jsonData pm.response.json(); if (jsonData jsonData.data jsonData.data.token) { pm.environment.set(token, jsonData.data.token); } else { console.log(登录响应中没有token字段当前返回:, JSON.stringify(jsonData)); } }3.3 动态变量不用自己写时间戳和随机数Postman 提供了一些内置动态变量可以看成是拥有特殊魔力的“变量”。它们不是被预定义的键值对而是每次在请求中碰到时由 Postman 现场生成一个值。常见的几个动态变量作用示例输出$timestamp当前 Unix 时间戳单位秒1720000000$guid随机生成一个 GUID 字符串550e8400-e29b-41d4-a716-446655440000$randomInt0 到 1000 之间的随机整数742$randomUUID随机 UUID8f14e45f-e0b8-4a8b-9f02-6a9b6b4f1c3d$isoTimestampISO 格式的当前时间2024-07-03T12:00:00.000Z$randomEmail随机邮箱test.abcexample.com$randomFirstName随机英文名Emma$randomPassword随机密码9qTh!wZ动态变量只在{{}}里生效在脚本里你得自己生成比如Date.now()或uuid之类的函数。另外注意动态变量每次生成的结果都不同不适合用来做需要前后一致的断言。比如你断言pm.response.json().id {{randomInt}}那基本不可能通过因为 randomInt 每次都会重新生成。4. 变量在请求中的典型应用场景4.1 环境切换开发、测试、生产三套配置一键搞定这是变量最常规也最值钱的用法。拿一个典型项目举例接口地址一般由协议、域名、端口、路径前缀组成。开发环境是http://192.168.1.10:8080/api测试环境是https://test.example.com/api生产环境是https://api.example.com。你完全可以创建三套环境每套环境里都定义同样的变量名比如baseUrl、apiKey、adminUser、adminPass。请求 URL 统一写成{{baseUrl}}/users。切换环境时右上角下拉框从“开发环境”切到“生产环境”之后发的每个请求都会自动用新环境里的 baseUrl。实际维护中我个人建议把所有环境差异性的值都抽到环境变量里包括数据库标识、租户 ID、推送开关等。别觉得变量多麻烦变量少了以后环境切换基本等于白搭。有效做法是做一个环境变量清单三套环境保持键名完全相同、值不同。这样切环境之后你不需要检查每个请求是否漏改。这里有个细节环境变量支持“初始值”和“当前值”之分。初始值会随环境导出给别人当前值是当前机器上的运行时值。token 这类动态变化的值通常只写当前值不写初始值。否则你把环境导出发给同事时你自己的 token 也跟着泄漏出去了。4.2 前后端联调把登录 token 自动传给后续接口日常联调中最痛的场景就是登录态。你测完了登录接口拿到一个 token然后继续测用户信息、订单列表、个人设置这些接口全都要带Authorization请求头。手动复制 token 再粘贴到别的接口一次两次还能忍接口一多就很容易出错而且 token 过期后还要重新来一遍。配合变量机制可以这么玩第一步在登录接口的 Tests 里写上提取 token 的脚本把 token 写入环境变量。我给一份现成的模板let jsonData pm.response.json(); if (pm.response.code 200 jsonData.data jsonData.data.accessToken) { pm.environment.set(accessToken, jsonData.data.accessToken); pm.environment.set(refreshToken, jsonData.data.refreshToken || ); console.log(token已更新); } else { console.error(登录失败无法更新token响应, JSON.stringify(jsonData)); }第二步在集合的“授权”配置或每个请求的 Header 里引用变量。比如 Header 键是Authorization值写Bearer {{accessToken}}。这样 Postman 发请求前会先替换成真实的 token。第三步当 token 过期时先跑一遍登录接口后续接口全部自动恢复可用。这比手动复制粘贴省了不知道多少时间。如果希望更自动化还可以在集合的 Pre-request Script 里判断当前 token 是否快过期过期就先自动调登录接口。这个属于进阶玩法写起来稍微复杂但思路就是放一个isExpired的判断这里我先不展开后面讲脚本技巧时给示例。4.3 数据驱动用 CSV 文件批量调用接口变量机制和 Collection Runner 配合还能实现数据驱动测试。做法很简单准备一个 CSV 文件第一行写列名后面每一行就是一次迭代的数据。比如要批量创建用户username,email,age user001,user001example.com,23 user002,user002example.com,31 user003,user003example.com,28请求 Body 里写成{ username: {{username}}, email: {{email}}, age: {{age}} }然后打开 Collection Runner选择集合、选择环境、选择 CSV 文件设置迭代次数一般会自动对齐 CSV 行数点击运行。每次迭代 Postman 都会自动把对应行的值填进{{username}}等变量里。这里要注意CSV 文件要求 UTF-8 编码用记事本编辑的 CSV 很容易带 BOM 头导致第一列名多了看不见的字符。建议用 VS Code 的编码选择保存为 UTF-8 without BOM。CSV 和 JSON 数据文件的区别在于CSV 比较扁平、适合表格型数据JSON 可以嵌套适合复杂结构化数据。JSON 文件的话变量名对应的是 JSON 对象的键名。数据文件路径在 Runner 面板里选择选完可以预览前几行确认列名是否正确再开跑。如果需要调试数据文件里的取值可以在 Tests 里用pm.iterationData.get(username)打印当前迭代的值。4.4 请求体、Header、脚本中的引用细节除了 URL变量还能用在很多地方但不同位置的解析时机略有差异。URL、Headers、Body 这些属于“发送前替换”你在脚本里通过pm.request读取到的 URL 是已经替换后的而不是带占位符的模板。这个点容易被忽略比如你在 Pre-request Script 里想打印一下当前请求的 URL看到的会是真实值。在 Body 的 raw JSON 格式下Postman 能识别双花括号并替换。但如果你在 Body 里写的是{{timestamp}}且 timestamp 变量不存在它不会被替换请求体会原样带{{timestamp}}过去服务端必然报参数异常。所以我建议在脚本里设置变量后要顺手做一次断言或 Console 输出确保变量值没有 undefined。脚本里读取变量用的是pm.environment.get()不是{{变量名}}。很多人刚开始会把脚本里也写成let token {{token}};结果 token 的含义就变成字面量字符串“{{token}}”而不是 token 的值。除非你是想拼接字符串给某个服务端用否则脚本里不要用双花括号。5. 变量排坑实录我踩过的几个典型问题5.1 变量显示为黄色请求发出却是原样占位符Postman 的编辑框里如果变量解析成功变量名会显示为橙色或红色如果带下划线且没有正确匹配它会显示为黄色并保留原样。最常见的原因是变量名拼写不一致比如环境里定义的是base_url请求里写的是{{baseUrl}}匹配不上。这种情况打开环境面板把键名改成一致就行比在请求里逐个替换更省事。另一个隐藏原因是优先级覆盖。环境变量里明明有 token但全局变量里有一个同名 token 且值是旧值因为全局变量优先级低按说环境变量会赢但如果你同时又在请求的 Pre-request Script 里pm.variables.set(token, xxx)设置了局部变量局部变量优先级最高它会覆盖环境变量。最终你看到请求里带的是脚本里设的 xxx环境变量面板里的新值根本没生效。排查这类问题时我的建议顺序是先看变量名是否一致再看是否有更高作用域的同名变量最后看脚本里有没有偷偷 set 值。别一开始就怀疑是工具 bug。5.2 环境切换后变量值还是旧的这个坑特别多发于集合变量和全局变量。原因很简单集合变量和全局变量不随环境切换而改变它们挂在集合或工作区上。如果你把 token 存在集合变量里那么从开发环境切到测试环境token 可能还是开发环境的那份。正确做法是把 token 这类环境相关值放到环境变量里集合变量只放模块内固定、不随环境变化的业务参数。还有一种情况是你重新登录后环境变量里的 token 已经更新但某个请求仍然带着旧 token。这多半是因为请求是在登录接口之前发出的或者 Runner 的运行顺序不对。Collection Runner 的执行顺序是按集合里请求的排列顺序来的确保登录接口排在最前面或者依赖关系正确。5.3 请求体里拼接变量导致结果不符合预期我见过不少人想在请求体里构造一个“时间戳随机数”的串写成了{{timestamp}}_{{randomInt}}。这个语法没问题可以正常替换。但如果你想在脚本里生成一个签名串再赋给变量就不要写成字符串拼接let s {{timestamp}} {{randomInt}}因为{{}}在脚本里根本不会解析最终 s 的值会是字面量“{{timestamp}}{{randomInt}}”。正确写法是let ts Math.floor(Date.now() / 1000); let rand Math.floor(Math.random() * 1000); pm.variables.set(sign, ts _ rand);然后把变量{{sign}}用在请求参数里。简单说脚本是正常 JavaScript 环境变量取值只能用pm.*.get()或pm.variables.get()。5.4 给了变量值但断言里始终拿不到这往往是因为断言脚本写在了错误的生命周期里。Pre-request Script 在请求发送前执行Tests 在请求发送后执行两者变量可以共用但如果你想在请求前断言请求后才会生成的值那肯定是拿不到的。另外如果在 Tests 里用let jsonData pm.response.text()而不是jsonData pm.response.json()遇到非 JSON 响应你就会得到一串字符串引发断言失败。建议先识别响应格式再决定怎么解析。如果断言里引用了{{username}}也会因为双花括号不生效而失败。正确做法是pm.environment.get(username)或pm.variables.get(username)。我建议断言脚本里统一用pm.variables.get()因为它会按优先级自动找值跟请求发送时的解析逻辑一致。5.5 用 Console 快速定位变量值变量问题最有效的定位工具是 Postman Console。打开方式底部菜单栏点击“Console”或者按快捷键CmdAltLWindows 是CtrlAltL。发送请求后Console 会展示请求发送的全过程包括最终发出的 URL、Headers、Body。你在 Console 里看到的请求体已经是变量替换后的结果可以很直观地判断变量到底有没有被正确解析。如果发现 URL 里仍然是{{baseUrl}}/api/users而没有替换基本就是变量未定义或作用域不对。如果是替换成了空字符串一般是变量键存在但值为空。我自己的调试习惯是在脚本里加一行console.log(当前baseUrl:, pm.environment.get(baseUrl))确保脚本运行到某一步时值符合预期。这个习惯帮我省了大量查错时间。6. 提升效率的几个变量管理技巧6.1 用集合变量管理模块参数环境变量适合放环境差异值但有一些值跟环境无关却跟模块相关。比如用户模块里有个user_type参数在订单模块里这个参数无意义订单模块里有个payment_method用户模块也不需要。这些都可以放到集合变量里跟着集合走不会污染全局。具体做法在集合右键选择“编辑”找到“变量”标签页把模块公共参数填进去。这样即使切换环境这些业务参数也不会变而环境变量里只维护 baseUrl、账号、token 等环境相关值。整体结构更清晰团队协作时也更容易看懂。6.2 统一的变量命名规范变量名不规范是团队协作中最大的内耗来源。同一个 token张三叫token李四叫access_token王五叫Authorization。一旦交接整套用例的变量关系全乱了。我建议团队内统一环境的域名叫baseUrl登录后的凭证叫accessToken刷新凭证叫refreshToken公共请求头里的租户 ID 叫tenantId。命名遵循小驼峰或全小写下划线二选一别混用。另外环境变量和集合变量的键名尽量不要跟全局变量重名优先级引起的“隐藏覆盖”会让你排查半天不如从源头上规避。变量名之间也不要造无意义的带数字后缀的重复定义比如token1、token2这些基本都是临时改出来的应该合并成一个变量。6.3 Pre-request Script 配合变量做动态签名很多项目接口要求签名或者防重放每次请求都得携带时间戳、随机数和签名值。这种场景最适合用 Pre-request Script 配合局部变量实现。我以常见的 SHA256 签名做一个示例这只是思路具体算法以你的项目为准let ts Math.floor(Date.now() / 1000).toString(); let nonce Math.random().toString(36).substring(2, 8); let secret pm.environment.get(secretKey); let raw timestamp ts nonce nonce secret secret; // 使用 CryptoJS 计算签名 let sign CryptoJS.SHA256(raw).toString(CryptoJS.enc.Hex); pm.variables.set(sign, sign); pm.variables.set(ts, ts); pm.variables.set(nonce, nonce);随后请求 URL 或参数里直接写{{sign}}、{{ts}}、{{nonce}}。这样每次发送请求都会自动生成新的签名不用手工换特别适合压测或批量执行时使用。这里要强调一下CryptoJS在 Postman 脚本里是内置的可以直接用。如果你在脚本里写多个请求注意释放局部变量范围避免串值。有一点我在实际项目里体会很深变量机制厉害归厉害但过度设计也会伤人。我就见过有人为了“灵活”把环境里几十个变量层层引用一个变量依赖另一个变量结果切环境后补了这头漏了那头比直接写死还痛苦。我的经验是只在能从变化中获益的地方用变量比如环境差异、登录态、数据驱动纯静态的返回值写死反而更好排查。说到底Postman 变量不是什么黑魔法它就是一个键值替换系统。只要你理解了作用域和优先级能分清界面手动定义和脚本动态设置剩下的无非就是养成好习惯。等你哪天不再需要靠“全局替换”改域名、不再因为忘记更新 token 而反复点重新登录的时候你就会真的理解为什么我说变量这一课必须补。上面提到的遇到问题先看作用域、再看 Console、再看脚本 set 的顺序是我自己踩坑后反复验证过的排查路径希望能帮你少走一段弯路。

相关推荐

长程智能体推理瓶颈突破:并行测试时扩展实战指南
长程智能体推理瓶颈突破:并行测试时扩展实战指南

1. 长程智能体推理瓶颈到底卡在哪做长程任务智能体(long-horizon agents)的人,大概率都经历过这种场景:一个需要几十步甚至上百步才能完成的任务,比如跨多个数据源做调研、自动修复一个复杂代码仓库里的连锁缺陷、或者… · 2026/9/26 5:54:11

5G质差小区根因分析与闭环处置实战手册
5G质差小区根因分析与闭环处置实战手册

简介:本资源为《5G质差小区优化指导手册》专业文档,面向通信运营商网络优化工程师、5G无线维护技术人员及高校通信工程方向实践学习者,聚焦5G现网中低接入、高掉线、低速率三类典型质差小区的识别、根因分析与闭环优化。手册系统定义质差判定… · 2026/9/26 5:53:59

基于多模态模型的本地图库语义搜索实战:蓝耘元生代与OpenAI兼容接口
基于多模态模型的本地图库语义搜索实战:蓝耘元生代与OpenAI兼容接口

1. 为什么我要给本地图库做语义搜索我的图库里有将近四万张照片,分散在十几个年份的文件夹里。以前找图的方式非常原始:靠文件名、靠回忆拍摄时间、靠一张张翻。最要命的是,我脑子里想的是“傍晚的海边”,但文件名可能是“IMG_202… · 2026/9/26 5:53:59

面试考Nginx日志Top10 IP?一条Shell命令拆解Linux运维核心技能
面试考Nginx日志Top10 IP?一条Shell命令拆解Linux运维核心技能

面试这种场景碰得多了,有时候真不是候选人水平不行,而是“会用”和“能解决问题”之间差了太多层。前几天面了个期望薪资28K的候选人,简历上赫然写着“精通Linux/Shell”,我让他在现场写个命令,统计一下Nginx访问日志里… · 2026/9/26 6:32:28

Quartus II 13.1下载安装与使用全攻略:认证问题解决及AS模式配置
Quartus II 13.1下载安装与使用全攻略:认证问题解决及AS模式配置

1. 为什么2024年还有人死磕Quartus II 13.1先说结论:如果你手头有Cyclone IV、Cyclone V这类老器件,或者学校实验室的板子还是DE2、DE0系列,那Quartus II 13.1大概率是你绕不开的一个版本。它不像新版Quartus Prime那样动辄几十GB、对系统版本… · 2026/9/26 6:32:28

Python批量重命名文件:5分钟写脚本告别手动改名
Python批量重命名文件:5分钟写脚本告别手动改名

告别手动改文件名!5分钟写个Python脚本,批量搞定所有文件重命名先说一下我自己的经历。前阵子帮朋友整理一个摄影项目,相机导出来的素材全是IMG_0234.jpg、IMG_0235.jpg这种名字,完全看不出内容。几百个文件要按拍摄日期、地点、序… · 2026/9/26 6:32:28

AI代理工作流实战:500美元替代5万美元团队的成本与落地
AI代理工作流实战:500美元替代5万美元团队的成本与落地

1. 这场“500 美元替代 5 万美元团队”的讨论,到底在说什么最近圈子里聊得最多的一件事,就是有人用一套 AI 代理工作流,把原本需要一个小团队才能完成的软件交付流程压缩到了一个人加几百美元 API 成本。标题里那个“500 美元替代 5 万美元团… · 2026/9/26 6:32:22

AI Agent 实战:从大模型到智能代理的工程化落地
AI Agent 实战:从大模型到智能代理的工程化落地

软件装上大脑这件事,听起来像科幻,但落到工程实践里,它其实是一个非常具体的命题:怎么让一个只会"你问我答"的大模型,变成能自己拆任务、自己调工具、自己检查结果、自己决定下一步的代理。MultiOn 就是在这… · 2026/9/26 6:32:22

开源大模型新选择:Xiaomi MiMo v2.6 Pro 的设计思路与工程落地
开源大模型新选择:Xiaomi MiMo v2.6 Pro 的设计思路与工程落地

开源大模型又添新面孔:聊聊 Xiaomi MiMo v2.6 Pro 的设计思路与实际落地年开源模型圈一直没消停,前有各种大参数怪兽,后有主打轻量高效的紧凑模型。最近我留意到 Xiaomi MiMo v2.6 Pro 这个 open-weight LLM,热度不低,… · 2026/9/26 6:32:22

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码