Postman接口关联实战:环境变量与脚本实现API测试自动化
1. 项目概述为什么接口关联是API测试的“任督二脉”刚入行做接口测试那会儿我最头疼的就是那种“连环套”式的接口。比如你要测一个下单流程得先调登录接口拿到token再用这个token去调商品列表接口选个商品最后用商品ID和token去创建订单。每个接口都依赖上一个接口的返回数据手动复制粘贴token和ID测一遍还行测十遍、一百遍简直就是重复劳动的噩梦还容易出错。直到我系统性地掌握了Postman的接口关联技术才真正把测试效率提了上来。所谓接口关联说白了就是让Postman自动从一个接口的响应里提取数据并自动填入下一个接口的请求中实现接口间的数据传递和流程自动化。“Postman接口关联-案例学习(自用)”这个标题看起来像是一份个人学习笔记但它背后指向的是API自动化测试中一个非常核心且实用的技能点。无论是测试一个完整的业务流程还是验证数据在不同接口间流转的正确性接口关联都是绕不开的坎。它不仅仅是工具的使用技巧更体现了一种自动化测试的设计思维。掌握它意味着你能将零散的接口测试用例串联成有意义的业务场景测试让Postman从一个简单的“接口调试工具”升级为“业务流程自动化测试平台”。这份“自用”的案例学习其价值在于通过一个具体的、可复现的实例把抽象的概念和零散的功能点如环境变量、Tests脚本串联起来形成肌肉记忆。接下来我就用一个经典的“用户登录-获取用户信息”场景作为案例带你从头到尾拆解并实现接口关联分享我趟过的坑和总结的心法。2. 核心思路与设计环境变量与脚本的双簧戏实现接口关联核心在于解决两个问题如何存和如何取。Postman给出的答案是“环境变量Environment Variables”与“预请求脚本Pre-request Script”和“测试脚本Tests Script”的联动。你可以把环境变量想象成一个临时的、共享的记事本而脚本就是负责往这个记事本上写字和从上面读字的笔。2.1 整体流程设计我们以最常见的场景为例接口A登录返回一个令牌如access_token接口B获取用户详情需要在请求头中携带这个令牌进行认证。发送登录请求向登录接口发送用户名和密码。提取并存储令牌在登录请求的Tests标签页里编写JavaScript代码从响应体中解析出access_token并将其设置为一个环境变量例如token。应用令牌到新请求在获取用户详情请求的Authorization或Headers选项卡中使用{{token}}的语法引用这个环境变量。可选动态传递参数如果接口B还需要其他来自接口A的动态数据比如user_id同样可以通过脚本提取并存入环境变量再在接口B的URL或请求体中引用。这个设计巧妙之处在于它利用了Postman的脚本执行顺序。Tests脚本在收到响应后执行非常适合做数据提取和存储。而{{variable}}的变量引用语法在请求发送前会被实时替换实现了数据的动态传递。2.2 为什么是环境变量而不是全局变量或集合变量Postman提供了三种变量作用域全局变量Globals、集合变量Collection Variables和环境变量Environments。这里选择环境变量是经过考量的隔离性与灵活性环境变量依附于“环境”Environment。你可以创建“开发环境”、“测试环境”、“生产环境”每个环境有独立的变量值。这样同一套接口集合通过切换环境就能测试不同服务器而关联用的token等变量也会随环境隔离避免混淆。全局变量是所有环境共享的不够安全灵活。适合临时数据像token这类数据通常有有效期是会话级别的。将其存在环境变量中逻辑上更清晰。你可以随时切换环境或手动更新环境变量值来模拟不同状态。集合变量更适合存储一些相对固定、跨接口使用的值比如base_url基础域名。实操心得我习惯为每个测试项目至少创建两个环境“Dev”和“Test”。在“Dev”环境中变量base_url指向开发服务器地址在“Test”中则指向测试服务器。而像token这样的动态变量则通过脚本自动写入当前激活的环境中。这种分离使得用例维护和不同环境的测试变得非常清爽。3. 关键组件深度解析从脚本语法到变量管理理解了整体设计我们来深入看看实现关联所依赖的几个关键组件它们就像是乐高积木组合起来才能搭建出自动化流程。3.1 变量的引用与赋值语法这是基础中的基础必须形成条件反射。引用变量在任何可以输入文本的地方URL、Headers、Body、脚本里使用双花括号{{variable_name}}。Postman会在请求发送前将其替换为变量的当前值。例如在Header中输入Authorization: Bearer {{access_token}}。在脚本中操作变量这主要发生在Tests和Pre-request Script标签页使用Postman提供的pm对象。设置环境变量pm.environment.set(variable_name, variable_value);获取环境变量pm.environment.get(variable_name);设置全局变量pm.globals.set(variable_name, variable_value);获取全局变量pm.globals.get(variable_name);清除变量pm.environment.unset(variable_name);3.2 Tests脚本数据提取的“收割机”Tests标签页的脚本在请求响应返回后执行。它的主要任务有两个一是做断言验证Test二是提取响应数据Extract。我们关注后者。提取数据的前提是解析响应。现代API响应格式主要是JSON所以JSON.parse()和Postman内置的pm.response.json()方法至关重要。假设登录成功响应如下{ code: 200, message: success, data: { user_id: 12345, access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..., expires_in: 7200 } }我们要提取access_token和user_id脚本可以这样写// 方法一使用 pm.response.json()更简洁 let jsonData pm.response.json(); if (jsonData jsonData.code 200) { let accessToken jsonData.data.access_token; let userId jsonData.data.user_id; // 存储到环境变量 pm.environment.set(access_token, accessToken); pm.environment.set(current_user_id, userId); // 可选在Postman控制台输出一下便于调试 console.log(Token已设置: , pm.environment.get(access_token)); } // 方法二使用 JSON.parse()适用于需要处理原始字符串的情况 // let responseBody pm.response.text(); // let jsonData JSON.parse(responseBody); // ...后续操作同上3.3 预请求脚本动态装配的“流水线”Pre-request Script在请求发送前执行。虽然在本例的核心流程中它不扮演数据提取角色但在复杂关联中极其有用。例如动态生成参数根据时间戳、随机数生成请求参数。条件判断如果某个环境变量不存在则从其他地方计算或获取一个默认值。复杂计算对已有变量进行加工后再用于当前请求。例如在发送获取用户详情请求前我们可以确保access_token存在// 在“获取用户详情”请求的Pre-request Script中 let token pm.environment.get(access_token); if (!token) { pm.expect.fail(访问令牌不存在请先执行登录请求); } // 或者可以在这里对token进行一些格式化操作 pm.request.headers.upsert({ key: Authorization, value: Bearer token }); // 这是一种直接在脚本中修改请求头的方式与在UI界面设置{{token}}等效3.4 环境管理器的正确使用姿势很多新手设置完变量后还是觉得心里没底不知道到底存没存上。这时一定要善用Postman右上角的“眼睛”图标环境快速切换器和“环境管理器”。查看当前变量点击右上角的环境选择器可以看到当前激活环境下所有变量的键和值。这是最直接的调试方式。管理环境通过“Environment Manager”可以创建、编辑、复制、导出环境。建议为每个项目导出环境配置作为备份。初始值与当前值在环境编辑器中你可以设置变量的“Initial Value”初始值和“Current Value”当前值。脚本pm.environment.set修改的是“Current Value”。手动编辑时也请注意区分。踩坑记录有一次我写脚本时变量名手误打错了比如该用pm.environment.set(“token”, value)结果写成了pm.environment.set(“toke”, value)。由于Postman不会报错只是静默地创建了一个新变量toke导致后续请求引用{{token}}时一直为空。排查了半天才发现是拼写错误。所以在脚本中console.log输出一下变量值以及在环境管理器中肉眼核对变量名是两个非常好的调试习惯。4. 完整案例实操用户登录与信息获取全流程现在我们用一个完整的、可复现的案例把上面的知识串联起来。我们假设有两个接口接口A登录POST {{base_url}}/api/v1/login接口B获取用户信息GET {{base_url}}/api/v1/user/{{current_user_id}}/profile4.1 第一步环境与集合准备打开Postman点击左上角“New” - “Collection”创建一个名为“用户业务测试集”的集合。点击右上角的环境管理图标小眼睛旁边点击“Add”创建一个名为“My Test Env”的新环境。在这个环境中添加一个变量base_url并设置其初始值为你的API服务地址例如https://api.demo.com。保存并确保该环境被选中在右上角下拉框里。4.2 第二步创建并配置登录请求在“用户业务测试集”下点击“Add a request”创建第一个请求命名为“用户登录”。请求方法选择POSTURL输入{{base_url}}/api/v1/login。你会看到{{base_url}}变成了你环境里设置的实际地址。在“Body”标签页选择raw和JSON格式输入登录凭证{ username: testuser, password: testpass123 }这是最关键的一步切换到“Tests”标签页。这里是我们编写数据提取脚本的地方。输入以下代码// 1. 将响应体解析为JSON对象 let responseJson pm.response.json(); // 2. 检查响应状态码和业务码根据你的API设计调整 pm.test(Status code is 200, function () { pm.response.to.have.status(200); }); pm.test(Login successful, function () { pm.expect(responseJson.code).to.eql(200); pm.expect(responseJson.message).to.eql(success); }); // 3. 提取并存储token和user_id到环境变量 if (responseJson responseJson.code 200) { const accessToken responseJson.data.access_token; const userId responseJson.data.user_id; pm.environment.set(access_token, accessToken); pm.environment.set(current_user_id, userId); // 打印日志以便调试 console.log(Access Token stored: , accessToken); console.log(User ID stored: , userId); } else { console.log(Login failed, response: , responseJson); }点击“Send”发送请求。如果登录成功你应该能在“Test Results”标签页看到测试通过同时在Postman控制台View - Show Postman Console看到打印的Token和User ID信息。4.3 第三步创建并配置获取用户信息请求在集合下再新建一个请求命名为“获取用户详情”。请求方法选择GETURL输入{{base_url}}/api/v1/user/{{current_user_id}}/profile。这里同时引用了base_url和上一步存储的current_user_id。这个接口通常需要认证。切换到“Authorization”标签页类型选择“Bearer Token”。在Token字段里直接输入{{access_token}}。Postman会自动帮你格式化成Authorization: Bearer 你的token的请求头。另一种等价方式在“Headers”标签页手动添加一行Key: Authorization,Value: Bearer {{access_token}}。可选但推荐为了验证关联是否成功我们可以在“Tests”里加一个简单断言pm.test(User profile retrieved successfully, function () { pm.response.to.have.status(200); let jsonData pm.response.json(); pm.expect(jsonData.code).to.eql(200); // 可以进一步断言返回的用户ID与之前存储的一致 pm.expect(jsonData.data.id).to.eql(pm.environment.get(current_user_id)); });现在直接点击“Send”发送“获取用户详情”请求。神奇的事情发生了你不需要手动复制粘贴任何东西Postman自动用登录接口返回的user_id构造了URL并自动在请求头里填入了有效的access_token。如果一切配置正确你将直接收到用户详情的成功响应。4.4 第四步使用Collection Runner进行流程化测试单个请求手动发送验证了关联但自动化测试需要连续执行。这时就要用到“Collection Runner”。在集合“用户业务测试集”上右键选择“Run collection”。在Runner界面确保“My Test Env”环境被选中。你可以看到集合下的两个请求。默认会按顺序执行。点击“Run 用户业务测试集”。Postman会依次执行“用户登录”和“获取用户详情”。关键观察点“用户登录”请求的Tests脚本会设置变量。“获取用户详情”请求会使用这些变量并且它的测试结果应该通过。Runner会生成一份详细的报告展示每个请求的测试结果、耗时和日志。这标志着你的接口关联自动化流程已经跑通。5. 进阶技巧与复杂场景应对掌握了基础流程我们来看看更复杂的情况这些才是体现功力的地方。5.1 处理复杂的JSON响应结构不是所有API都返回规整的data.access_token。你可能遇到数组、深层嵌套、或者动态键名。响应包含数组{ items: [ {id: 1, name: A}, {id: 2, name: B} ] }提取第一个项目的IDlet firstId pm.response.json().items[0].id; pm.environment.set(“first_item_id”, firstId);动态键名或复杂路径可以使用jsonpath表达式但Postman原生不支持需借助第三方库或手动遍历。更简单的方法是先用console.log(JSON.stringify(responseJson, null, 2))把整个响应漂亮地打印出来看清结构再写提取逻辑。5.2 关联多个值与数据传递链一个接口可能返回多个后续接口需要的数据。除了token和user_id还可能有order_id,session_key等。只需在同一个Tests脚本里多次调用pm.environment.set()即可。更复杂的场景是链式关联A - B - C。A的结果给B用B的结果给C用。原理完全相同只需确保每个请求的Tests脚本正确设置变量后续请求正确引用。关键在于变量命名要有清晰的意义避免冲突。例如使用login_token、order_token、upload_file_id等而不是简单的token1、token2。5.3 变量清理与测试隔离自动化测试中测试用例之间应该尽量独立。如果上一个测试用例设置的变量影响了下一个可能会产生难以排查的干扰。在集合或请求的Pre-request Script中初始化变量可以在集合级别的Pre-request Script中将所有用到的环境变量设置为空或初始状态。// 在集合的Pre-request Script中 pm.environment.set(“access_token”, “”); pm.environment.set(“current_user_id”, “”);在Tests脚本末尾清理敏感变量对于像token这样的敏感信息在流程测试完后可以主动清空。// 在某个流程最后一个请求的Tests脚本里 pm.environment.unset(“access_token”);使用不同的环境为不同的测试套件创建不同的环境实现物理隔离。5.4 借助Console进行深度调试当关联不生效时Postman Console是你的最佳拍档View - Show Postman Console。它会记录每个请求的详细请求和响应内容。你在Tests和Pre-request Script中所有的console.log()输出。环境变量的变化情况。 通过查看Console你可以清晰地看到脚本是否执行、变量是否被正确赋值、请求发送时引用的变量值到底是什么从而快速定位问题是出在数据提取、变量存储还是变量引用环节。6. 常见问题排查与实战心法即使理解了原理实操中还是会遇到各种问题。下面是我总结的“排错清单”和心法。6.1 问题速查表问题现象可能原因排查步骤变量{{xxx}}未被替换请求中显示为原字符串1. 变量名拼写错误。2. 该变量在当前激活的环境中不存在。3. 环境未正确激活。1. 检查右上角环境选择器确认正确环境已选中。2. 点击环境选择器查看变量列表确认变量名和值是否存在。3. 核对脚本中的set操作和引用处的变量名是否完全一致大小写敏感。请求返回401/403未授权1.token变量值为空。2.token格式错误如缺少’Bearer ‘前缀。3.token已过期。1. 打开Console查看登录请求的Tests脚本是否执行token是否被成功设置。2. 检查获取详情请求的Header看Authorization头的值是否正确拼接。3. 手动复制token值在别的工具如curl中测试是否有效。Tests脚本中的pm.response.json()报错响应体不是合法的JSON格式可能是HTML错误页面或空响应。1. 先使用pm.response.text()打印原始响应查看内容。2. 检查请求是否成功状态码。3. 在脚本中加入try-catch块处理解析异常。Collection Runner中第二个请求仍使用旧数据可能因为第一个请求的Tests脚本执行失败如断言失败导致变量未更新。1. 查看Runner结果确认第一个请求的Tests是否全部通过。2. 确保变量设置逻辑不在某个if或pm.test断言块内而因条件不满足未执行。变量值意外被更改1. 多个请求的脚本操作了同一个变量名。2. 手动在环境管理器里修改了值。1. 规划好变量作用域和生命周期使用更具描述性的变量名。2. 在脚本中console.log输出变量变更日志。6.2 我的三点核心心法先手动后自动在编写复杂的关联脚本之前先用单次请求手动测试确保接口本身是通的响应格式是你预期的。用console.log大法把响应结构打印出来看明白再动手写提取逻辑。小步快跑即时验证不要一次性写完所有脚本再测试。每写一个pm.environment.set就发送一次请求然后立刻去环境管理器或通过console.log查看变量是否被正确设置。验证无误后再进行下一步。善用Runner和监控最终一定要用Collection Runner来运行整个流程。不仅要看最终的测试结果是否通过更要仔细观察每个步骤的请求详情和日志输出。Runner的日志是发现时序问题、数据污染问题的利器。接口关联的本质是“数据流”的自动化。当你能够熟练地在Postman中设计这条数据流就意味着你已经开始用自动化的思维来设计测试用例了。这不仅仅是掌握了一个工具功能更是测试能力的一次升级。从简单的登录获取信息到电商的加购、下单、支付再到内容平台的发布、审核、上线任何有状态的业务流程都可以被这样串联起来进行自动化验证。剩下的就是发挥你的想象力去构建更复杂、更贴近真实业务的测试场景了。

相关新闻

YOLOv12在电力绝缘子缺陷检测中的实践与应用

YOLOv12在电力绝缘子缺陷检测中的实践与应用

1. 项目概述这个基于YOLOv12的绝缘子缺陷识别系统,是我在电力设备智能巡检领域的一次完整实践。系统通过深度学习技术实现了对输电线路绝缘子的实时缺陷检测,包含从数据标注、模型训练到应用部署的全流程解决方案。相比传统人工巡检方式,这套…

2026/10/9 11:47:41 阅读更多 →
TVP70025I视频解码芯片:从模拟信号到数字图像的全链路设计指南

TVP70025I视频解码芯片:从模拟信号到数字图像的全链路设计指南

1. 项目概述:为什么需要一颗专业的视频解码芯片?在嵌入式视觉、医疗影像或者工业检测设备里,我们常常会遇到一个看似简单却暗藏玄机的问题:如何把摄像头、录像机或者老式设备输出的模拟视频信号,变成我们处理器&#x…

2026/10/13 8:40:24 阅读更多 →
CNN-LSSVM混合模型在工业多输出预测中的应用

CNN-LSSVM混合模型在工业多输出预测中的应用

1. 项目背景与核心价值在工业预测和数据分析领域,多输出回归问题一直是个棘手挑战。传统单一模型往往难以同时处理高维特征提取和复杂非线性映射,这正是CNN-LSSVM混合模型大显身手的地方。去年在为某汽车零部件厂商做质量预测时,我亲历了传统…

2026/10/13 4:56:01 阅读更多 →

最新新闻

Agent技能拆解与编排实战:从碎片化到体系化

Agent技能拆解与编排实战:从碎片化到体系化

1. 技能碎片化:Agent落地的头号瓶颈这段时间在折腾智能体项目,我最大的体会就是:真正卡住进度的往往不是模型选型,不是推理框架,而是“技能”这层皮。模型再聪明,碰到实际任务时还是靠一个个具体技能去接活…

2026/10/13 8:39:55 阅读更多 →
reactor-core 基准测试实战:JMH 任务使用指南(benchmarks 模块)

reactor-core 基准测试实战:JMH 任务使用指南(benchmarks 模块)

后端异步编程 【免费下载链接】reactor-core Non-Blocking Reactive Foundation for the JVM 项目地址: https://gitcode.com/gh_mirrors/re/reactor-core 点击查看 免费下载 导读 本文以 benchmarks/README.md 为核心,系统讲解 reactor-core 仓库中 b…

2026/10/13 8:39:55 阅读更多 →
SonarQube报告解读:常见质量问题排查与修复实践

SonarQube报告解读:常见质量问题排查与修复实践

工作里接触到越来越多的团队把白盒测试和代码评审绑在一起做,而 SonarQube 几乎是绕不开的那道坎。它不直接帮你跑测试用例,却能在你每次提交代码后,从静态分析的角度告诉你“这里可能会炸”“那里是一个隐患”。我最初接触 SonarQube 时&…

2026/10/13 8:39:55 阅读更多 →
基于Vue与Node.js的同城民宿管理系统设计与实现

基于Vue与Node.js的同城民宿管理系统设计与实现

接手这类偏业务的开发项目,往往不是因为技术本身有多难,而是需求背后那堆"说不清道不明"的日常琐碎。去年夏天,一位做短租的经营者找到我,手里管着十几套分布在不同小区的民宿,订单、房态、保洁排班全靠Exce…

2026/10/13 8:39:55 阅读更多 →
报错别直接丢给AI:最小复现示例让AI改代码不再越改越乱

报错别直接丢给AI:最小复现示例让AI改代码不再越改越乱

先问一句:你有没有经历过这种场景——让AI改一段代码,第一次报错A,它给你改了;跑一下变成报错B,再让它改,变成报错C;改到第五轮,你发现项目里多了好几个没用的函数、几处重复的逻辑&…

2026/10/13 8:39:55 阅读更多 →
LiteLLM实战:统一大模型API网关的部署、路由与预算控制

LiteLLM实战:统一大模型API网关的部署、路由与预算控制

做AI应用这一年多,我最大的感受是:模型本身其实不是瓶颈,真正让人头大的是怎么把一堆杂七杂八的模型接入、路由、计费、限流这些东西收拾利索。LiteLLM这个开源项目,说白了就是帮你把这件事打包干完——它把市面上主流的大模型API…

2026/10/13 8:38:54 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →