1. 从手工点按钮到批量回归:Collection到底解决了什么问题
1.1 手工测试的三大痛点,你肯定遇到过
如果你用过Postman,十有八九经历过这样的场景:开发改了后端某个模块,你需要在Postman里一个一个点开几十个请求,逐个点Send,看返回结果。点完一遍,颈椎僵硬,眼睛发花,想再回归一遍又得重来。这不是个人操作习惯的问题,而是纯手工接口测试天然的三个弱点。
第一,耗时。接口一变,回归清单少则五六个,多则几十个请求,每个都要手动切换环境、手动改参数、手动查看结果。哪怕每个请求只要十秒钟,三十个请求就是五分钟起步,还不包括思考和组织的时间。第二,容易漏。手工操作最大的问题不是慢,而是注意力会疲惫,点着点着就漏掉一个请求,或者某个请求参数忘了改,测了等于没测。第三,没法固定场景。今天回归时这个请求用了A用户的数据,明天再用B用户的数据,整个结果就没有可比性,出了bug也不好定位是代码问题还是操作过程变了样。
而Collection集合批量运行,解决的就是这三件事。你可以把一组相关接口整理成一个Collection,按业务链路的顺序排好,配置好环境、变量、脚本和数据,然后一键让Postman按顺序把所有请求跑一遍,自动收集结果、执行断言、输出报告。整个过程不需要你一直在旁边守着。这也是这个功能在我眼里最核心的价值:它把"手工逐个测"变成了"自动化批量回归",而且是依托于Postman本身就能做到的,不需要额外引入一套复杂的测试框架。
1.2 批量运行不是"把接口堆一起跑",而是一次完整的回归
很多人第一次接触Collection批量运行时会有一个误解,觉得它就是把一堆请求放进一个文件夹里,然后一次性发送。这个理解对了一半。Collection批量运行确实是把多个请求串起来跑,但真正有价值的地方在于"串"字,而不是"跑"字。
一组接口之间往往存在依赖关系。比如你测电商系统,先要登录拿token,然后用token查商品列表,再把商品加购物车,最后下单结算。这四个接口如果拆开单独跑,每个都能跑通,但组合在一起才能真正验证一条完整的业务链路。Collection批量运行正好覆盖这个场景:你按调用顺序把请求排好,通过脚本把上一个请求返回的token存成变量,下一个请求自动引用,这样整条链路就可以无缝地串起来重复执行。
另一个场景是数据驱动。同一个下单接口,需要测正常价格、折扣价、零元订单、库存不足、未登录等一组case,每个case的请求体不同但结构相同。如果手工去改一遍,费时费力,还容易改错。借助Collection的批量运行能力,配合CSV或JSON数据文件,Postman可以自动把每一组参数带进去跑一遍,自动验证每一组的响应是否符合预期。这才是批量运行真正值钱的地方——它不只是省掉了点鼠标的时间,还帮你把"回归测试""参数组合验证""接口链路验证"这些原本需要额外写脚本的事情,都在Postman里完成了。
一句话总结我的建议:不要只把Collection当成分类文件夹,要把Collection当成一套可重复执行的测试资产来设计。这个思维转变,是今天这篇文章最想传递的东西。
2. 好的Collection不是文件夹:变量、脚本和依赖这样设计
2.1 三种层次的变量,搞清楚优先级比背文档管用
批量运行之前,首先要做的一步是把Collection里的变量体系捋清楚。Postman的变量有全局变量、环境变量、集合变量和数据变量等好几层,新手经常在这里翻车。变量用对了,批量运行就是一条流水线;变量没配对,你会在响应日志里看到一堆{{xxx}}原样输出。
先说我的推荐用法。环境变量用来放不同环境之间的差异配置,比如测试环境的Base URL是http://192.168.1.10:8080,生产环境是https://api.example.com,这种一变就变的东西应该放进环境变量里。集合变量用来放这个Collection内部共享的固定值,比如公共请求头里的Content-Type、默认的channelId。全局变量我建议尽量少用,因为全局变量不区分环境,很容易污染。比如你在联调环境给全局变量设置了token,切到测试环境后,老token还是会优先被引用到,导致鉴权莫名其妙失败。
关于优先级,Postman从低到高大致是这个顺序:全局变量 < 集合变量 < 环境变量 < 数据文件 < 局部变量。什么意思?如果同一个名字token在环境变量和数据文件里都存在,批量运行时数据文件里的值会把环境变量盖掉。很多人不知道这一点,结果明明在环境里配置了正确的token,一跑批量却用的是数据文件里的旧值,排查半天才反应过来。建议你理解成:越"贴近当前请求"的变量,优先级越高。数据文件属于"本次运行"的数据,所以它会压过环境预设值。
2.2 集合级脚本:批量运行中"统一动作"的正确位置
Collection除了装请求,还能挂脚本。选中Collection,右侧可以看到Pre-request Script和Tests两个页签,分别对应请求前脚本和响应后断言。很多人只是把它们当成单独的每个请求里的辅助工具,但在批量运行场景下,集合级的脚本才是真正的利器。
集合级Pre-request Script会在集合里每一个请求发送之前执行。比如你可以在这里统一生成当前时间戳,写入变量reqTime,所有请求的Body里都能引用{{reqTime}};或者统一给需要签名的请求计算MD5签名,这样签名逻辑只维护一份,而不是复制到每一个请求里去。集合级Tests同理,每当一个请求返回后,都会先执行集合级Tests,再来执行请求自己的Tests。你可以把公共断言写在这里,比如"所有响应都必须200""所有响应时间不能超过3秒",这样每个请求就自动拥有了统一的底线检查。
我自己的习惯是:公共逻辑全放到集合级,个性断言才放到单请求里。举个例子,集合级Tests里写:
pm.test("接口响应时间不超过3000ms", function () { pm.expect(pm.response.responseTime).to.be.below(3000); }); pm.test("接口状态码为200或201", function () { pm.expect(pm.response.code).to.be.oneOf([200, 201]); });这样批量跑下来,任何一个请求如果响应时间超标或者状态码异常,结果面板里立刻就会看到失败标记。如果你把这些公共检查复制到每个请求里,不仅维护成本高,还很容易漏。集合级脚本这个设计,越用越会觉得它贴心。
2.3 令牌串联:从登录接口到业务接口的依赖处理
批量运行最常见的依赖场景就是登录态。业务接口需要带token,而token只有登录接口登录成功后才返回。你怎么在批量运行中让后面的请求自动带上新登录得到的token?
正确做法是这样。集合里的第一个请求放登录接口,在它自己的Tests脚本里写入提取token并保存的逻辑。比如登录接口返回的JSON结构是{"code": 0, "data": {"token": "xxxx"}},脚本可以这样写:
const res = pm.response.json(); if (res.code === 0) { pm.environment.set("accessToken", res.data.token); } else { throw new Error("登录失败,无法获取token"); }后续所有需要鉴权的请求,在Authorization或Header里填Bearer {{accessToken}}。批量运行时,第一个请求先把token存好,第二个请求发出时变量已经被填充,自然就能引用到最新值。
这里有一个很多人踩过的坑:手动单跑登录接口时token确实被设置了,但批量跑的时候后面的业务接口还是401。原因多半是环境没选对,或者你用了集合变量保存token,而请求里同时又存在同名环境变量,并且环境变量优先级更高。变量引用优先级的问题前面提到过,实际排查时我建议你先在批量运行前打开环境变量的"当前值"看一眼,再运行一次,确认第一个请求的Tests有没有真正把值写进去,这样排查链路会很清晰。
顺带提一个和登录态相关的细节:批量运行时Postman的Cookie是共享的。如果你的接口走Cookie鉴权,登录接口Set-Cookie之后,后续请求会自动带上Cookie,不需要你手动处理。但如果上一次运行遗留了过期Cookie,新登录接口反而可能让Cookie信息变乱,所以批量回归前也别忘了在设置里清一下Cookie。
3. Runner参数面板:迭代、顺序、延迟你真的调对了吗
3.1 迭代次数和请求执行顺序的默认逻辑
Collection准备好之后,点Collection右侧的Run按钮,就会进入Runner面板。这个面板看起来就是个普通弹窗,但其实里面每一项参数的组合效果,直接决定你这次批量跑得稳不稳。
先讲迭代次数。Runner面板里的Iterations表示"整套Collection要顺序执行几遍"——注意,是整套,不是单个请求。比如你的Collection里有15个请求,Iterations设成3,那Postman会先把15个请求按顺序跑一遍,再跑第二遍,再跑第三遍,总共执行45次。这个逻辑听起来简单,但很多人第一次会理解错,以为迭代次数少指"每个请求跑3次"。其实从结果面板上看会更直观:总结果数是请求数乘以迭代数。
再讲执行顺序。默认情况下,Runner按Collection当前的展示顺序执行,也就是你在列表里看到的那个先后次序。如果你把集合里的请求当成一条业务链路来编排,那这个顺序就是你想要的调用顺序。但有个坑:默认顺序是严格按照Collection树结构来的,如果里面有Folder,会先执行Folder里的请求还是先执行平级请求?我的经验是,建议你提前在Collection里把顺序调整到位,不要依赖Runner自动排序。实测中,Postman会按Collection树"从上到下、文件夹内从左到右"的方式执行,这个顺序在Runner面板里是可以看到并通过拖拽调整的。稳妥起见,每次新建Collection我都建议按业务链路顺序放置请求,文件夹名用模块名加序号前缀,比如01-登录认证、02-商品查询、03-订单流程,这样一眼就能看懂执行顺序,也不容易出错。
3.2 数据文件、延迟和"保存响应"这几个选项怎么配合
Runner面板下半部分有几个选项框,很多人忽略,但它们在特定场景下极其好用。
第一个是Data File,也就是数据文件选择框,后面专门讲数据驱动时会展开。这里只提醒一句:一旦你选择了CSV或JSON数据文件,迭代次数会受数据行数限制,建议迭代次数直接等于数据行数,别人为拉开差距。
第二个是Delay,请求间延迟,单位毫秒。它会在每两个请求之间插入一个等待时间,而不是在每轮迭代之间等待。批量跑几十个请求的时候,如果接口服务端有频率限制,或者请求之间涉及异步操作、数据库落库,延迟设得太短,后面请求很容易失败。我实测过一个下单流程,订单创建接口返回成功后,紧接着去查订单详情,如果中间不加延迟,偶尔能查到但经常查不到,因为订单数据是异步写入的。这时候在Runner里把Delay设为500到1000毫秒,命中率立刻稳定。注意这个Delay是所有请求之间都生效,不是只对特定请求生效,所以设置之前要估一下整体时长。
第三个是Save responses。勾选后,Runner会在结果面板里保存每个请求的完整请求头和响应体。跑完过后,你可以随时点一条请求回看当时的实际响应内容,这对排查定位问题很关键。代价是运行内存和耗时都会上升,如果接口数量特别大,结果数据会很占空间。我自己的习惯是本地调参的时候勾选,真正放到自动化流程里跑的时候不勾,提高整体效率。
还有一个很实用的选项叫Keep variable values。勾选它,批量运行结束后,脚本里写入的变量值会保留;不勾,则运行结束后变量会回滚到运行前的值。举个例子,如果你在Tests脚本里用pm.environment.set("accessToken", ...)更新了token,勾选后会保留新token,不勾则还是旧token。这个选项对"运行是否污染环境"影响很大,我在下面的踩坑章节里专门说。
3.3 别把运行器跑挂:限流与超时控制的实战调参
批量运行除了功能上要配置对,还要考虑到实际运行环境。接口数量一多,或者迭代次数一大,请求就会像潮水一样打向服务端。很多测试环境扛不住这种瞬时压力,会出现连接超时、服务假死,甚至给后端留下大量脏数据。
针对这种情况,我的建议是分梯度来。第一次批量跑,Delay设大一点,比如1000到2000毫秒,观察整体响应情况,确认服务端稳定后再逐步缩小。不要一上来就设置Delay=0跑全量,看起来爽快,出了问题定位成本极高。除此之外,可以在集合级Tests里加一个超时断言,比如pm.expect(pm.response.responseTime).to.be.below(3000),一旦响应超时立刻标记失败,这样你能在结果面板上快速筛选出"不是业务错而是性能错的请求"。这种区分定位会节省大量时间。
关于超时配置,单个请求的Settings里有一处叫Request Timeout,默认没有上限,但批量跑的时候如果某个接口卡死,整个Runner就可能一直停在那里不动。我做自动化冒烟测试时会习惯手动把它设成5000毫秒,超过就当失败处理。虽然Postman没有提供Runner级别的全局超时,但通过"集合级断言+单请求超时"的组合,已经能覆盖绝大多数场景。
另一个和资源相关的经验是:批量运行完,结果面板如果保存了大量响应体,Postman会明显变卡。Runner面板里尽量在跑完后立即导出需要的报告和结果,然后清掉本次运行结果,桌面版的多轮大结果沉淀会拖慢整个应用,特别影响后面继续调试的心情。
4. 数据驱动:让一套请求变成上百条用例
4.1 CSV数据文件怎么写,字段和变量怎么对应
数据驱动是Collection批量运行里最值得花时间掌握的能力。它的思路很简单:请求模板保持不动,把变化的参数外置到一个数据文件里,Postman每轮迭代从数据文件里取一行数据填充进请求,这样一套请求就能被多条数据复用。
数据文件最常用的是CSV。格式有严格讲究,第一行必须是列名,也就是变量名,后面每一行是一组测试数据。比如我要测试一个根据用户ID查信息的接口,CSV可以这样组织:
userId,expectName 1001,张三 1002,李四 1003,王五在请求的URL或者Params里,把写死的值替换成{{userId}},这样批量运行时,第一轮迭代取第一行,userId变成1001,第二轮取第二行,变成1002。如果你的接口的GET参数是/api/user?userId=xxx,那就直接在Params里的value处填{{userId}}。POST接口同理,Body里用{{userId}}占位。这就是数据驱动最朴素的用法。
JSON数据文件也可以,结构是数组套对象,比如:
[ {"userId": 1001, "expectName": "张三"}, {"userId": 1002, "expectName": "李四"} ]两种格式我都有用过。CSV更轻量,Excel另存为就能生成,适合团队里不太懂技术的同事维护用例;JSON可以嵌套复杂结构,适合body层级比较深的情况。如果你只需要传单个字段,CSV就够用了。
这里要提醒的一个细节是编码。CSV文件如果包含中文,另存的时候一定选UTF-8编码,不要用ANSI。否则在Windows上导入后,请求体里的中文参数会变成乱码,排查起来非常隐蔽。还有,CSV列名不要带空格和特殊符号,user-id这种命名在引用时容易出幺蛾子,建议统一用驼峰命名或下划线。
4.2 迭代次数与数据行数的匹配关系及边界情况
选了数据文件之后,迭代次数和数据行数的关系,值得单独说清楚。
Postman默认的逻辑是:迭代次数最大不能超过数据文件的行数。比如CSV有5行数据,Runner面板里Iterations最多设5,设6也只会跑5轮,超过的部分不会反复循环使用数据。这一点和很多人的直觉不一样。所以最佳实践是:Iterations直接设成数据行数,或者干脆保留默认值让Postman自动读取,重点是把数据文件选对。
还有一种情况需要特别注意:某些列在CSV里是空值。空值会导致变量被设置成空字符串,请求体里就会出现""这种内容。比如有手机号字段,某一行没填,请求发出去后服务端可能返回"参数缺失"之类的错误,而你还以为数据没问题。我的习惯是,在让测试同事准备数据文件之前,先给一份模板文件,并要求必填字段不得留空。如果确实需要测空值场景,那就明确写出来,比如MMS值写一个空格字符,也算一种显式测试意图。
与之相关的深度用法是,数据文件的字段可以和断言配合起来。断言里读当前行的期望值,方式是通过data对象。在前面那个查用户名的例子里,Tests脚本可以这样写:
const res = pm.response.json(); pm.test("用户名与数据文件中期望值一致", function () { pm.expect(res.data.name).to.eql(data.expectName); });data是Postman在数据驱动模式里自动注入的全局对象,表示当前迭代正在使用的数据行。这个写法非常推荐,因为它让每条数据不仅被执行,还被验证了"它对不对的结果"。如果某行数据让接口返回了错误的用户名,断言会立刻把它揪出来,而不是看着一大片200状态码就以为一切都好。
4.3 断言里读数据:让每个用例都验证到自己的数据
批量运行最大的错觉就是"都返回200了,应该没问题"。实际上,接口返回200只代表请求成功,不代表业务逻辑正确。尤其是数据驱动模式下,每条数据的期望值往往不同,更需要针对每一行数据做独立断言。
继续以用户查询接口为例,响应结构是{"code": 0, "data": {"id": 1001, "name": "张三"}}。如果只看状态码,1001、1002、1003全部返回200,你会以为测试全过了。但如果接口有bug,把1002的name返回成了"张三",状态码还是200,肉眼根本发现不了。断言的存在就是为了捕获这种业务逻辑错误。
除了对字段值做比对,你也可以对返回结构做检查。比如:
pm.test("查询结果包含关键字段", function () { pm.expect(res).to.have.property("data"); pm.expect(res.data).to.have.all.keys(["id", "name", "mobile"]); });这种断言对一个批量回归项目来说特别重要,因为接口结构一旦变化,它能立刻报出来,你不用等到前端联调时才发现字段对不上。
在数据驱动模式下写断言,有一个经验:尽量把断言写成"根据当前数据断言当前结果",而不是"断言一个固定值"。也就是说,期望值从data.expectXXX里取,而不是从代码里写死的常量里取。这样数据文件里的每一行,就等价于一个独立的测试case,你扩充测试用例时只需要往CSV里加行,不需要修改任何脚本。这也是我把数据驱动称为"用一套请求变成上百条用例"的原因。
5. 跑完不是结束:结果面板、失败排查与报告导出
5.1 Runner结果表怎么看:状态、断言、响应时间
Runner运行结束后,结果面板会展示一个汇总表格。有人只看一眼"整体通过率"就关掉了,其实这个面板的信息量远不止通过率。
结果表里,每一行代表一次请求执行,列名大致包括请求方法、名称、URL、状态、响应时间、断言失败数量等。状态列会用绿色和红色区分通过失败,直观但容易让人产生惰性。我的建议是优先关注两列:断言失败数和响应时间。断言失败数说明的是业务逻辑是否通过,响应时间则暴露了性能隐患。如果一个请求响应时间为3186ms,虽然断言全过了,但在批量回归的语境里它也是值得关注的信号,说明这个接口有变慢的趋势。
结果面板还支持按状态筛选,比如只看失败项,或者只看某个Folder里的请求。接口数量大的时候,先筛失败项再逐条点开,比从头翻到尾效率高得多。筛完之后,点开任意一行,右侧会展示详细的请求和响应内容,包括请求头、请求体、响应状态、响应体和测试结果。这一步是排查问题的入口。
5.2 失败用例的排查链路:Console日志和请求对比
批量跑完有失败用例怎么办?我的固定排查链路是三步走。
第一步,先看结果面板里这条请求的断言失败详情。点击失败项,测试结果标签页里会直接显示哪一条断言挂了,比如"expected response to have status code 200 but got 500",这个信息能帮你判断是断言写错了还是接口真的有问题。
第二步,打开Postman底部的Console控制台,重新跑一次(可以只跑这一个Collection或Folder),在Console里能看到更底层的信息——实际发出的请求URL、Headers、Body,以及收到的响应原始内容。很多批量运行时的问题,比如变量没解析、请求体格式错乱、Cookie没带上,在这个原始请求日志里会原形毕露。
第三步,对照一下这个请求单独手动运行的样子。在Collection里找到这条失败请求,环境变量保持不变,手动点一次Send,对比响应是否一致。如果手动能过、批量里挂掉,那问题大概率出在依赖上——比如前置请求没有成功设置变量,或者上一轮的脏数据影响了这一轮。如果手动也挂,那问题就在接口本身,与批量运行无关。
这套链路不复杂,但很有效。我见过不少人批量跑失败后第一反应是改断言、加Delay,其实问题根本不在那儿。先看原始日志,再对比手工执行,永远比瞎猜省时间。
5.3 导出报告:从本地结果到团队共享
Runner的结果面板默认只存在你本地,关掉窗口后想看就得重新跑一遍。如果要把批量运行的结果拿给开发、项目经理看,或者作为测试记录存档,导出报告就是必要的环节。
导出方式很简单,结果面板右上角有Export按钮。你可以选择导出为JSON格式,这是机器可读的结构化数据,适合做二次统计;也可以选HTML格式,浏览器打开后是一份带表格的报告。我一般两种都导出:JSON留着存档,HTML发给需要看的人。
不过这里也要说句公道话,Postman自带的HTML报告相对朴素,就是请求列表、状态码、时间、断言结果,没有图表和趋势分析。如果你所在的团队对测试报告有更高要求,建议用Newman配合htmlextra这类报告插件。Newman的HTML报告会更美观,带通过率图表,断言的统计也更清晰。别误会,这不是说Postman内置导出不好,而是不同场景要选不同工具。本地快查快用,自带导出足够;交付给团队看,Newman的增强报告更专业。
6. 让批量运行跑得更远:Newman命令行和自动化集成
6.1 Newman:脱离开图形界面批量运行Collection
如果你只在自己的电脑上用Postman,前面的内容已经够用了。但当你需要把Collection批量运行纳入团队的持续集成流程,或者让它在服务器上定时跑起来,就需要接触Newman。
Newman是Postman官方的命令行工具,作用是脱离图形界面运行Collection。它和Runner执行的是同一套Collection文件,同一个断言脚本,只是没有GUI,运行完后把结果输出到终端或保存成文件。这也意味着,你精心设计好的Collection,换一个运行载体就可以变成自动化测试工具链里的一员。
安装Newman的前提是你有Node.js环境,然后执行:
npm install -g newman安装完成后,先导出Collection文件。在Postman里选中你的Collection,点右侧"..."菜单,选择Export,选Collection v2.1格式,得到一个JSON文件。同时,如果用了环境变量,也把环境文件导出来。命令行的基本调用是这个样子:
newman run my-collection.json -e my-env.json如果你需要并发、失败重试、数据文件、报告输出等能力,Newman都提供了对应的参数。它本质上就是把Runner面板的选项翻译成了命令行参数,理解这一点,从GUI迁移到命令行的过渡成本就很低了。
6.2 环境文件和数据文件的命令行组合
实际项目里,Newman运行Command经常比上面那行要长得多。这里给一份我常用的成型命令模板,你可以直接套用。
假设你的项目结构大致是:
/workspace ├── collection.json ├── env-test.json └── testdata.csv需要按数据行跑、每轮迭代之间有延迟、超过5000ms算超时,并导出HTML和JSON报告,命令可以写成:
newman run collection.json \ -e env-test.json \ -d testdata.csv \ --delay-request 500 \ --timeout-request 5000 \ --reporters cli,html,json \ --reporter-html-export report.html \ --reporter-json-export report.json这里有三个参数值得单独解释。--delay-request 500就是Runner面板里的Delay,单位毫秒。--timeout-request 5000是每个请求的超时上限。-d指定数据文件,和Runner面板选数据文件是同一件事。命令行方式最大的好处是可配置、可重复,同一份命令可以在不同机器上复现完全一样的测试过程,这是手动点按钮做不到的。
另外一个实用参数是-n,指定迭代次数,替代面板里的Iterations。如果和数据文件一起用,同样注意迭代次数不要超过数据行数。
6.3 从手动跑到定时跑的落地思路
有了Newman之后,批量运行就从一个"偶尔手动点的功能"变成了"可以自动执行的任务"。最常见的落地思路是把Newman命令封装到一个Shell脚本里,然后用服务器的定时任务去调用它。比如每天凌晨跑一遍冒烟测试,把报告发到指定目录;或者每次代码发布后,在发布流程里增加一步"自动执行接口回归"。这些都属于很成熟的工程实践,Postman官方也提供了Newman和CI系统的集成文档。
但如果你所在的公司没有搭建CI/CD这套东西,也建议先从本机定时任务开始。比如Windows的任务计划程序、macOS的launchd,都可以定时执行Newman命令,让批量回归每天自动跑一次。第二天早上到工位,打开报告看一眼有没有回归失败,比手动点一早上Send要轻松得多。
需要提醒的是,自动化运行和手动运行有一个心态上的区别。手动跑挂了我们可以现场查,自动跑挂了你必须依赖报告本身去定位问题。所以运行环境、报告生成、日志保留这些环节,要提前规划好。Newman生成的报告文件记得按日期归档,比如命令里就带report-$(date +%Y%m%d).html这种命名方式,这样出了问题能快速找到对应日期的历史报告。
最后再多说一句,网络上有不少"跳过登录""破解汉化包"之类的流传版本,我劝你不要碰。Postman现在启动需要登录,这是官方策略,正常注册一个免费账号登录后,本地数据照样能用,没必要为了省登录那一步去承担未知的安全风险。至于汉化,新版在设置里已经支持切换多种显示语言,直接在官方版里调语言设置就好,更省心也更安全。
我做接口测试这几年,用过不少自动化工具,回头来看,Postman Collection是最简单、也最容易被低估的起点。不需要学复杂的语法,不需要搭庞大的框架,只要把Collection里的变量、脚本、数据文件这些基本功打磨好,再用Runner或Newman把它们串起来,它就能覆盖一个中小型项目绝大部分的接口回归需求。它的上限超乎很多人的预期,而它给你的成长路径,也足够平滑。