news 2026/9/10 18:22:23

PostIn接口自动化测试实战:从环境搭建到CI/CD集成的质量保障之路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PostIn接口自动化测试实战:从环境搭建到CI/CD集成的质量保障之路

1. 方案背景与整体思路拆解

1.1 接口质量保障到底在“保”什么

我做了好几年接口测试,最直观的感受是:很多人把“接口自动化测试”想简单了,以为只要用工具把每个接口的请求跑通、返回 200 就万事大吉。但真正到生产环境里,接口出问题往往不是“报 500”这么直白,而是返回了 200、Body 里给你塞了一个错误码,前端页面正常渲染不报错,数据却是错的。这种问题靠手工点一遍根本发现不了,必须靠自动化把断言做扎实,把脚本沉淀下来,才能在每次迭代后快速回归出这类隐性风险。

拿我接手的一个电商中台项目举例,支付、库存、订单、会员四个核心域加起来将近四百个接口,每次发版前靠手工回归一遍至少两个半天。更要命的是,接口之间的依赖关系错综复杂,下单接口要先拿 token,token 过期后又得重新登录,登录和下单之间的时序稍有差池,整个链路就崩。后来我改用 PostIn 把这套链路全部做成自动化脚本,回归时间从半天压缩到二十分钟,问题的关键不在“工具多厉害”,而在于把接口质量从“人工抽查”变成“全量动态校验”。

我用 PostIn 下来,最核心的一个判断标准是:接口质量不只看单个接口是否通,还要看四个维度——功能正确性、数据准确性、异常兼容性、响应性能。功能正确性就是接口返回的业务结果是否符预期,比如下单成功后库存扣减数对不对;数据准确性是断言返回字段、数据库落库数据、缓存数据三者是否一致;异常兼容性是非法入参、鉴权过期、依赖服务抖动时,接口是否能按约定返回错误信息而不是直接挂掉;响应性能则是单接口响应时间是否在合理阈值内,最好建立基线,防止某次改动把查询接口从 200ms 拖到 2s。

PostIn 在这四个维度上给了我比较完整的抓手,这也是为什么这篇实战我会围绕它来讲。工具不是银弹,但选对工具能让建立测试体系的过程少走很多弯路。

1.2 为什么是 PostIn 而不是“脚本全家桶”

你可能会问,做接口自动化,用 Python + requests 或 Java + RestAssured 写一套框架不是更自由吗?这话对,也不对。我自己早期就是用 Python 自建框架,封装了请求方法、数据库断言、测试报告,跑了小一年。那套东西的毛病也很明显:接口变动频繁时脚本维护成本高,团队成员上手门槛不低,而且录制的接口文档和自动化用例是分离的,别人改完文档忘了同步用例,踩坑踩得莫名其妙。

换到 PostIn 这类工具,最大的好处是把“接口文档、调试、自动化、报告”串在了一条线上。它不是替代编码自动化,而是把很多重复劳动——造请求体、管理环境、处理鉴权、汇总报告——先帮你做掉了。你真正需要投入精力的是用例设计和断言策略,这两块恰恰是测试人员的核心竞争力,也恰恰是脚本框架最费时的地方。

当然,工具也有边界。如果你的场景需要大量复杂的加密签名、私有协议、动态字节流,还是得靠编码框架来做。PostIn 适合的是主流 HTTP/HTTPS 接口的业务自动化,覆盖面已经非常广。我在后面的实战里会不断提到一个词:分层。逻辑层用工具来沉淀用例、日常回归、定时巡检,遇到工具搞不定的极端诉求再用代码补充,两条腿走路,既快又稳。

2. 环境搭建与用例设计基本功

2.1 你的测试环境管理,够不够“环境无关”

真正动手用 PostIn 写用例之前,第一件事不是急着去点“新建接口”,而是把环境管理设计好。接口测试最烦的一个问题就是不同环境切换:开发的联调环境 host 是http://dev-api.xxx.com,测试环境是http://test-api.xxx.com,生产是https://api.xxx.com,如果你在用例里把 URL 写死,换环境就得全改一遍,又蠢又容易漏。

我用 PostIn 的解决方案是,先建好三套独立环境配置:dev、test、prod。每套环境里定义 baseUrl、公共请求头、公共超时时间、数据库连接信息这几个关键变量。比如测试环境我除了 host,还会把adminTokensellerToken这类需要手动预置的数据放进环境变量里,方便联动用例直接引用。切换环境时只需要在右上角切换一个下拉框,所有用例自动指向对应环境。

这里有个很值得分享的经验:环境变量命名一定要统一,不要 dev 环境叫devHost、test 环境叫test_url,而是统一叫baseUrl,然后让每个环境各自定义同名变量。这样你的用例脚本里永远只写{{baseUrl}},环境切换对用例零侵入。一旦命名不统一,切换环境之后你还要去审计每个用例里引用了哪些变量,维护成本翻倍。

另外,PostIn 里可以给每个请求单独设置超时时间和重试次数,但我在实际项目管理中建议,超时设置不要放到单个用例上,而是放到环境级全局配置里。道理很简单,接口超时时间跟环境有关,联调环境普遍慢,生产环境快,如果硬编码在用例里,环境切换时超时逻辑就变成了一堆“看着没事但经不起推敲”的玄学配置。我在全局把默认超时设成 5000ms,个别特殊慢接口再用用例级覆盖。

2.2 鉴权与登录态,先解决这个“拦路虎”

接口自动化最大的拦路虎不是请求怎么写,而是登录态怎么维护。我见过很多团队的接口自动化用例,跑第一个接口先去调登录接口拿 token,然后把 token 硬编码在用例参数里。结果 token 一过期,全部用例红灯,排查半天发现是 token 过期了,不是接口出问题。

PostIn 处理鉴权的方式在我看来比较顺手。它支持在请求头中引用变量,也支持脚本能力来做动态数据处理。我的标准做法分成三步:

  • 在环境变量里预先定义accessTokenrefreshToken
  • 专职写一个login接口,把它放到测试集的最前面,返回的 token 通过后置脚本解析并写回环境变量,这样后续所有用例引用{{accessToken}}自动取到新值。
  • 设置会话保持,让同一套测试集内的请求自动携带 Cookie。如果项目用的是 JWT,在 Authorization 头里引用变量即可。

这里要注意一个细节,token 的刷新时机不能只在登录接口里做。比如你做一套长链路用例,下单、支付、退款耗时可能超过 token 有效期,跑到最后一步突然 401,整条链路失败,但前面的接口其实是正常的。解决思路是写一个公共的脚本片段,校验每个接口的响应状态码,如果发现 401,就调用刷新接口更新 token,然后自动重放一次当前请求。这个机制在 PostIn 里可以通过“全局脚本 + 自定义代码”实现,别看它只是个几十行的逻辑,实际能救回大量半夜巡检失败。

我踩过一个具体的坑:一开始我把登录接口也放进了自动回归集,结果每次跑回归都会真实创建一个新用户,测试库里越积越多脏数据,最终导致数据库里唯一键冲突,登录接口开始 500。后面我把登录和用例数据准备分开,登录尽可能用固定的预置账号,不往库里写数据;必须走注册流程的场景,单独用清理脚本配合测试账号池来做。生产环境千万不要用真实用户做自动化回归,这一点无论用什么工具都适用。

2.3 断言不是“有几个字段”,而是“业务规则”

接口用例设计里,断言做得够不够好,直接决定这套自动化是“能跑”还是“有用”。很多初学者习惯断言响应里某个字段包含某一串值,比如订单号为 123 就判断成功。一旦接口逻辑调整、字段别名变化,或者同一条数据对应的订单号换成别的,用例就会误报或者漏报。

我在 PostIn 里设计断言时遵循三层结构:

  • 第一层,协议层断言:HTTP 状态码为 200,响应时间小于阈值,返回格式是 JSON 且不是 HTML 错误页。这层保证接口“没挂”。
  • 第二层,业务层断言:核心业务字段符合预期,比如result.code为 0,result.messagesuccessresult.data.statuspaid。这层保证“业务逻辑对”。
  • 第三层,数据层断言:把接口返回的数据和上游数据库、缓存中的数据做交叉比对。这层通常需要调用数据库查询能力或关联上游查询接口,保证“数据真的一致”。

有人说第三层太重了,接口自动化应该只做黑盒。我不同意,很多线上问题恰恰是接口层返回的数据和数据库落库数据对不上,比如接口报成功但数据库字段没写进去,或者数据库写了但接口返回的是旧值。PostIn 支持在脚本中执行外部请求,也支持连接数据库做一些查询断言,我在关键写操作后都会加一个“反向查询校验”——比如调用退货接口成功后,回查订单表,确认return_status确实变成了returned

另外断言的表达式选择也要注意。能精确到字段就做精确断言,不要用“包含”这种模糊断言一竿子打到底。比如判断支付状态,status == "paid"body.Contains("paid")可靠得多,后者遇到paid_failed这种包含paid前缀的字段也会误判为成功,排查一眼看不出来。

3. 数据驱动与链路串联实战

3.1 参数化不是“换个值”,而是“批量场景”

接口自动化的核心价值之一是参数化。没有参数化的用例,本质就是一个“能跑的录屏”,覆盖不了多组数据场景。PostIn 支持 CSV、JSON、Excel 等格式的数据文件导入,你可以把一批测试数据放到文件里,循环跑同一个用例,每条数据自动替换请求体中的变量。

拿一个典型的注册接口举例。你在 PostIn 里新建一个测试用例,请求体写成:

{ "username": "{{username}}", "phone": "{{phone}}", "email": "{{email}}", "invite_code": "{{inviteCode}}" }

然后导入一份 CSV:

usernamephoneemailinviteCode
test_user_00113800000001u1@test.comA1B2C3
test_user_00213800000002u2@test.comD4E5F6
test_user_00313800000003u3@test.comG7H8I9

跑起来之后,PostIn 会循环生成三个并发请求,每个请求用 CSV 里的一行数据。这种模式下,你不再是一遍一遍手挖数据,而是把“数据集合”本身变成测试资产。随着测试数据积累的越来越多,接口在不同入参组合下的行为覆盖度就越高。

我在这里特别想强调一个指标:接口自动化的有效覆盖度。很多团队汇报自动化执行率 99%,但你仔细看,同一个用例只有一条数据,跑了一千次也是那条数据在反复横跳。真正有效的覆盖是数据结构维度的覆盖——正常值、边界值、非法值、缺失值、超长值、类型异常值,这六类数据都跑到,才算这条用例真正覆盖到位。这是我做接口质量保障两年多心得最深的一条。

3.2 链路用例,把“单接口”变成“业务流程”

单接口自动化做得再漂亮,也不代表整条业务链路是通的。实战里大多数严重事故都出在链路环节:下单接口能通过,支付接口能回执,但订单状态没有正确流转;订单号在 A 系统查得到,在 B 系统查不到。PostIn 的测试集支持按顺序执行用例,也可以把上一个接口的返回值提取为变量传给下一个接口,这是做链路自动化最基础也最关键的能力。

我举一个从登录到订单查询的完整链路例子:

第一步,登录接口返回tokenuserId,在后置脚本中提取并写入全局变量:

// 后置脚本示例:提取登录返回值 const resp = pm.response.json(); pm.environment.set("accessToken", resp.data.token); pm.environment.set("userId", resp.data.user_id);

第二步,创建订单接口引用上面两个变量,请求体写成:

{ "user_id": "{{userId}}", "product_id": 10086, "quantity": 2, "channel": "app" }

第三步,创建支付接口,请求体里用到创建订单接口返回的orderNo,用同样的后置脚本提取方式把它从响应里拿出来。这样三步串联跑下来,变量在用例间自动流转,不需要人工干预。

链路自动化有个反直觉的坑,就是“很多用例看起来是独立的,实际上应该串起来跑”。最典型的就是购物车、下单、支付、退款、售后这套流程,如果你全部拆成独立用例,每个用例都重新走一遍登录、加购、下单,一方面执行时间拉长,另一方面数据依赖也混乱。我会把一条完整业务链路设计成一个测试集,用例之间通过变量传递参数,执行顺序固定,最后只输出这条链路整体的通过/失败结果,定位问题时再看具体是哪一步挂了。这种设计还有一个好处:失败追溯效率高,一次失败直接精确到链路里的某一个接口,不会出现四处告警不知道哪里是根因的情况。

3.3 返回值的动态依赖,别再手抄订单号了

接口返回值提取是最基础但也最容易被忽略的一环。PostIn 里不仅支持 JSONPath 提取,也支持正则表达式提取,我通常会根据接口返回结构选择最合适的方式。

如果返回 JSON 结构明确,优先 JSONPath:

{ "code": 0, "data": { "order": { "order_no": "PO20250601001", "status": "CREATED" } } }

提取订单号用:

$.data.order.order_no

稍微复杂一点的情况,比如返回里有一个订单列表,你要取第一个未支付订单的编号,JSONPath 写起来会有点绕,可以借助脚本解析。直接在后置脚本里拿到响应体做逻辑处理:

const resp = pm.response.json(); let firstUnpaid = resp.data.orders.find(item => item.status === "UNPAID"); pm.environment.set("unpaidOrderNo", firstUnpaid.order_no);

这种做法的好处是,你把数据提取逻辑和接口业务紧密绑定了,后续任何人看这个用例,都能一眼明白这个接口返回的哪一部分数据会被后面用上。我在团队里定了一个规范:所有产生订单号、支付流水号、审批单号这类关键业务标识的用例,必须在后置脚本中显式提取并写入环境变量,并给变量命名加上领域前缀,比如pay_orderNooms_shipmentId,防止多套用例之间变量名冲突后互相覆盖。

我自己吃过一次亏,一开始所有提取的变量都叫orderNo,结果两个不同的测试集并行跑,变量互相覆盖,订单查询链路跑了一半引用到了另一个链路刚写入的订单号,最后整个回归报告错得离谱,排查花了整整一个下午。从那以后我对环境变量的命名隔离格外严格。

4. 自动化执行、定时任务与 CI/CD 集成

4.1 怎么把 PostIn 用例跑在 Jenkins 上

自动化用例写得再好,如果不能脱离人工点击持续跑起来,价值就打五折。PostIn 支持命令行方式执行测试集,这就为集成持续集成环境留了口子。我这边标准的落地流程是:PostIn 搭建并调好测试集,然后用命令行工具在 Jenkins 上执行,执行结束后把报告回传到内部平台。

Jenkins 里的构建步骤可以简化为一个 shell 脚本:

#!/bin/bash # 在 Jenkins 工作空间执行 PostIn 命令行 postin run --collection "订单核心链路" --env test --report-path ./reports/order-core

这里有几个细节值得注意。第一,命令行执行的返回码建议配置成非零即失败,这样 Jenkins 才能根据退出码判断构建是否通过。第二,PostIn 的环境配置在命令行执行时也要指定,不能依赖界面上手动切换的环境,否则 CI 执行时可能用的是本地残留的环境缓存,导致行为不一致。第三,报告路径建议按日期建目录,方便追溯历史记录,我在脚本里会拼上$(date +%Y%m%d)这个变量,让每次执行结果落在独立的目录下。

接入 CI 之后,最直观的改变是每次代码合并前自动触发的“冒烟回归”。开发提交合并请求时,流水线自动跑一遍核心链路用例,十五分钟内出结果,如果失败会在合并请求页面上直接标记为“不通过”。这一步把接口问题挡在了合入主干之前,而不是等到测试环境才暴露。从源头拦截的质量成本,远低于事后返工,这个账怎么算都划算。

4.2 测试报告与质量门禁

跑完接口自动化,最怕的就是给出一份“123 个用例、120 通过、3 失败”的裸数据,没有上下文、没有趋势,团队看了等于没看。PostIn 的报告里可以看到每个用例的请求详情、响应内容、断言结果,失败的时候能直接展示是哪一步断言没过。对我来说,报告的核心其实是定位链路,所以我习惯用报告里附带的请求耗时和断言详情来回溯:如果是断言失败,看具体字段差异;如果是超时失败,看耗时分布;如果整段链路都失败,优先看公共前置接口是不是挂了。

质量门禁是更进阶的玩法。我一般在 CI 里配置三个门槛:

  • 关键链路用例通过率必须 100%,任一失败则构建不通过。
  • 非关键用例通过率不低于 90%,低于阈值发出告警但允许构建继续。
  • 全量用例执行后的平均响应时间增量不能超过基线 10%,防止性能退化。

这套门槛设定的逻辑是分级管理:核心流程绝不让步,边缘场景允许有灰度空间。全部门禁一票否决的坏处是脆弱,偶尔一个断言误报就能卡住全部发布,团队很快就对门禁失去信任,最后大家要么绕开门禁、要么把用例全注释掉,自动化形同虚设。分级门禁让质量红线清晰,又保留了一定的业务试探空间,我实践下来稳定性和团队接受度都提升了一个档次。

4.3 定时巡检,把接口质量变成“天天盯”的活

有些接口问题不是发版才会有,服务端依赖抖动、缓存失效、数据库慢查询、第三方服务不稳定,都可能在半夜爆发。等你第二天早上上班看到告警,用户其实已经受影响了好几个小时。所以我强烈建议把核心接口的自动化用例改成定时巡检任务,比如每个小时跑一次核心交易链路,每天凌晨跑全量回归。

PostIn 能够配置定时任务,也可以借助外部定时调度工具来触发命令行。我更倾向于用外部调度,因为这样的执行记录天然统一在了 CI/运维体系里,后续做告警通知也更方便。我在巡检任务中配了通知群机器人,失败时自动推送链路名、失败断言和报告链接。这个机制帮我提前发现过很多隐藏问题,比如凌晨大促前缓存预热失败导致接口响应飙升、某个依赖的 mock 服务被运维回收导致测试环境大面积 503,这些都是手工回归很难碰到的场景。

值得提醒的是,定时巡检会持续产生真实或接近真实的业务数据,务必让测试数据做好隔离。我的做法是专门建一套巡检专用账号,数据写入后都有固定的标识前缀,定期跑清理脚本把 24 小时前的巡检数据清掉,既保证巡检数据完整性,又防止测试库膨胀连累开发联调。

5. 常见问题与排查技巧实录

5.1 高频问题速查表

写这部分之前,我把这些年用 PostIn 和相关接口自动化工具踩过、见过的高频问题整理成了一张速查表,希望对你有直接帮助:

问题现象大概率原因排查思路
用例偶发失败,重跑就通过接口响应不稳定或超时时间太紧看失败时的耗时分布,把超时阈值放宽;检查依赖服务是否存在抖动
登录接口通过了,后续接口全是 401token 提取逻辑未生效或 token 已过期检查后置脚本中变量名与环境变量拼写是否一致;确认是否配置了 token 刷新机制
断言一直失败但浏览器里手动请求是正常的请求头缺了 Cookie 或 Content-Type 不对对比浏览器请求和 PostIn 请求的请求头差异,重点看 Content-Type、Accept、Origin
链路用例中第二个接口取到的变量为空第一个接口的返回值结构变了在报告里查看第一个接口的实际响应,更新 JSONPath 或正则表达式
命令行跑的结果和界面上跑的不一致环境配置选择不一致确认命令行执行时指定了正确的环境名称,检查环境变量是否被脚本改动过
数据驱动跑完没有按 CSV 行数执行数据文件编码或列名映射有问题用 UTF-8 保存 CSV,检查请求体变量名与 CSV 表头是否完全一致
测试集执行顺序乱了用例未按顺序配置依赖关系确认链路用例的设置中启用了指定顺序执行,不要依赖默认排序
定时任务执行报错,但手动执行正常定时任务运行环境缺少网络权限或环境变量检查定时任务执行主机是否能连通目标环境,排查凭证配置是否正确

这张表不是万能药,但每一条都是真实排查过至少一次的经验。

5.2 一次典型失败排查实录

我有一次接到团队的告警,核心链路中的“创建订单”用例从早上开始持续失败,但手工用 PostIn 点请求是成功的。一开始我也懵,按老经验去查断言、查数据,折腾了半小时没头绪。后来把报告里的请求详情翻开,发现失败用例实际发出的请求体里,商品数量是空字符串而不是预期的数字。排查 CSV 文件,发现新加的几行数据里有一行商品数量栏是空的,数据驱动执行时会把这个空当字符串传进请求体,后端参数校验直接拒绝,链路中断。

这个问题的根子不在 PostIn,而在于测试数据本身没有做完整性校验。从那以后我在导入 CSV 之前一定会写一个小脚本检查字段是否有空值、类型是否正确、主键是否唯一,并且把数据文件的版本纳入用例管理,每次修改代码里引用的测试数据,也要走 review。顺带说一句,数据驱动文件里尽量不要放 NULL 这种显式值,不同后端框架对 NULL 的解析逻辑不一致,不如直接把这一行数据删掉或者填一个明确的边界值。

另外,响应断言失败未必是接口 bug,也可能是测试数据变了、上游依赖状态变了,所以排查时先看“基线是否变了”而不是一上来就改脚本。我的标准动作是:先在报告里看失败断言的具体字段,然后手动请求接口看返回,再到环境里查一次数据库,三步走下来基本能定位到问题所属层。千万不要跳过前两步直接进数据库,那样很容易被脏数据误导。

5.3 避坑技巧与维护心得

最后聊几个我在实战中沉淀下来的维护技巧。

第一,用例命名一定要带业务语义。不要叫test_001login_oldtest_3这种名字,三个月后你自己都分不清哪个是核心用例、哪个是废弃用例。我的命名格式是“模块_链路_场景”,比如payment_order_paySuccesspayment_order_payFail_refund。一套能长期使用的自动化体系,用例命名就是代码注释,别人接手时靠名字就能理解意图。

第二,尽量保持用例幂等。比如提交重复订单的场景,要先判断如果这个订单编号已存在,就跳过或先清理再执行。接口自动化最怕“跑第二次就失败”,这通常意味着用例对数据状态有强依赖,在设计时就要通过初始化脚本把前置数据重置。你可以把重置动作放在测试集的前置脚本里,保证每次执行都从干净状态开始。

第三,定期审视用例的失效情况。我建议每两周看一次失败用例,区分是“接口回归问题”“测试数据过期”还是“用例本身写错了”。别把所有失败都当成开发的事,很多失败是你自己的脚本和线上行为产生了偏差,及时修正反而让测试资产越来越准。

第四,对定时巡检,把告警阈值分级。不要一失败就疯狂刷屏各个群,那样导致告警疲劳后真正有价值的问题反而没人看。我只在核心链路失败时推给研发群,非核心用例失败时聚合成日结报告,避免干扰。接口自动化的目标是为质量服务,不是为制造噪音。

6. 写在最后的经验

接口自动化这条路,我从最早手工点接口、到自建 Python 框架、再到用 PostIn 做平台化管理,最大的体会是:工具永远是放大器,决定上限的永远是你对业务的理解和用例设计的功力。PostIn 帮我省去了造轮子的时间,让我能把精力放在“这个接口到底要验证什么业务规则”“这条链路失败会对用户造成什么影响”这些真正重要的问题上。

如果你刚开始接触接口自动化,建议不要一上来就铺几百个用例,先挑一条核心链路、用 10 到 20 个用例跑通全流程,把环境管理、鉴权、断言、数据驱动、CI 集成这条链路打通,再逐步沉淀扩展。等用例规模上去了,你再回头看,会发现之前那些“跑不动”“维护难”“结果不可信”的坑,大部分都是前期设计没做足。

希望这篇实战手记能让你少踩几个我踩过的坑。后面有机会,我还会把 PostIn 的脚本扩展、自定义断言器、多环境数据隔离方案继续拆开聊,那些都是更进阶的玩法,也值得细细打磨。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 18:22:09

Python虚拟环境详解:创建、管理与实践指南

1. 为什么需要Python虚拟环境? 刚接触Python开发时,我经常遇到这样的问题:昨天还能正常运行的项目,今天突然报错;在A电脑上开发的功能,部署到B电脑就各种依赖冲突。直到学会了使用虚拟环境,这些…

作者头像 李华
网站建设 2026/9/10 18:22:02

Java SSM框架实现企业物资采购进销存系统开发

1. 项目概述:基于Java SSM的物资采购进销存系统物资采购与进销存管理是企业运营的核心环节,传统手工操作模式效率低下且易出错。我最近用Java SSM框架开发了一套完整的物资采购网站系统,实现了从供应商管理、采购订单、库存预警到销售出库的全…

作者头像 李华
网站建设 2026/9/10 18:21:18

昇腾CANN/GE ACL数据类型及API

数据类型及其操作接口 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Tens…

作者头像 李华
网站建设 2026/9/10 18:20:33

CVAT 计算机视觉标注工具快速上手指南

CVAT 计算机视觉标注工具快速上手指南 【免费下载链接】cvat Computer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeling servic…

作者头像 李华
网站建设 2026/9/10 18:19:05

10分钟零硬件跑通Zephyr RTOS第一条输出

10分钟零硬件跑通Zephyr RTOS第一条输出 【免费下载链接】zephyr Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures. 项目地址: https://gitcode.com/GitHub_Trending/ze…

作者头像 李华