深夜的咨询
凌晨一点多,手机屏幕亮了一下。
我点开消息,是一位学员发来的私教预约。备注栏只写了一句话:
“想咨询跨系统的UI自动化和接口自动化,代码能力比较弱,不知道从哪开始。”
第二天晚上,我拨通了他的语音。
“哈喽,可以听到吗?”我问。
“可以可以,hello hello。”对面传来一个略带局促的声音,背景音里还有键盘敲击的声响,像是刚从工位上抽身出来。
简单寒暄之后,我直接问了第一个问题:“你现在的代码能力,是什么水平?”
电话那头沉默了两秒。
“比较弱吧,”他笑了笑,带着一点自嘲,“做了这么多年,主要还是偏功能测试。代码之前学过一点点,但……不太熟。”
“那你现在是带团队,还是自己一个人在做?”
“没有带团队了,自己做。”
我大概能想象到他的状态——功能测试做了好几年,业务很熟,但每次遇到代码相关的工作就开始头疼。想提升,又不知道从哪下手。周围的同事要么已经能写框架了,要么干脆转了管理,自己卡在中间,不上不下。
这不是他一个人的困境。
很多测试人,都卡在了“工具依赖”这一步
他接着问了一个很典型的问题:
“如果要做跨系统的UI自动化和接口自动化,有没有什么工具能快速上手?代码我后面再补……”
我打断了他:“你现在的任何工具,其实都是有缺陷的。”
这句话我说过很多次,但每次都要再说一遍。
工具的本质是封装复杂度,但封装也意味着限制。当你遇到工具不支持的业务场景、不兼容的协议、不匹配的流程时,你没有代码能力,就等于没有退路。
他听进去了:“我知道有缺陷。我的想法是,先用工具快速跑起来,代码再慢慢提升。”
这个思路本身没问题,关键是怎么执行。
我问他:“Postman会用吗?”
“这个会用。”
“那好,我给你看一个东西。”
一个很多人都不知道的Postman技巧
我打开电脑,开始共享屏幕。
“Postman里面,可以直接生成Python代码,你知道吗?”
我随便定义了一个请求,填好header、body、请求参数,然后点开界面右上角的“Code”按钮。
“看,这里可以选择语言——Python、Java、Go、JavaScript……你选Python,它就自动生成了完整的requests请求代码。”
“我之前听说过这个功能,”他说,“但没实际操作过。”
“这个功能最大的价值,不是帮你省那几分钟写代码的时间,”我说,“而是让你先跑起来,再理解 。”
什么意思呢?
你不需要一开始就懂requests库的每一个参数。你只需要在Postman里把接口调通,然后生成代码,粘贴到IDE里,运行——它就能跑。
跑通了,你再去改参数、加断言、做关联。这叫逆向学习 :从可运行的代码出发,反推语法和逻辑。
对于代码基础弱的人来说,这个路径比从头啃语法书要友好得多。
他明显来了兴趣:“那接口之间的依赖怎么办?比如登录之后的token怎么传给下一个接口?”
“Postman也支持。你把登录接口的返回字段定义成变量,下一个接口直接用,然后生成代码的时候,这些变量依赖关系都会被带进去。”
“那……跨系统呢?”他追问,“我们公司的业务不是单系统,一个订单下来,要过前端、后管、进销存、扫码系统……五六个系统串在一起,这种怎么自动化?”
所谓的“跨系统”,本质是接口依赖
这个问题我经常听到。
很多测试人被“跨系统”“跨平台”“跨端”这些词吓住了,觉得复杂度上了几个数量级。
其实没那么玄。
“接口自动化跟你的前端展示没有任何关系,”我解释,“它只关心字段标识——它来源于PC还是H5还是手机端?仅此而已。”
“你所说的跨系统,是业务的上下游依赖。我们只需要做一件事:把接口串起来 。”
我打开IDE,给他写了一个简单的示例:
import requests # 第一个接口:创建订单,返回
order_id url1 = "http://api.example.com/create_order" data1 = {"user_id": 123, "amount": 100} resp1 = requests.post(url1, json=data1)
order_id = resp1.json()["order_id"] # 第二个接口:审核订单,需要用到order_id url2 = "http://api.example.com/approve_order"
data2 = {"order_id": order_id} resp2 = requests.post(url2, json=data2)
“看懂了吗?”我问。
“有点理解了,”他说,“我之前就是不知道怎么把上下文的字段串起来。”
“你把上一个接口的response取出来,赋给一个变量,这个变量作为下一个接口的传参——就这么简单。”
“有没有完整的示例代码可以参考?”
“你直接搜索‘Python requests demo’,”我说,“一搜一大把。我建议你自己找、自己写一遍,比任何人给你现成的代码都印象深刻。”
“对对对,手动操作记忆才深刻。”他语气明显轻松了一些。
UI自动化,选什么工具?
聊完接口,话题转到UI自动化。
他之前接触过一点UI自动化,但实用起来发现页面变化太频繁,维护成本高,就搁置了。
“UI自动化,我推荐一个工具:Airtest。”
“是网易那个开源的吗?”他问。
“对。Airtest的特点是录制回放 ,你对着手机屏幕点一遍操作,它自动生成脚本。对于跨端场景——iOS、Android、Windows、H5——它都有不错的支持。”
我顺手把官网链接发到了聊天框。
“不过,”我补充了一句,“别想一口吃个胖子。你先从一个端开始,比如安卓或者H5,把一个端跑通了,再考虑通过配置驱动的方式来支持多端。”
“行,我先看看教程。”
比技术更重要的,是方向感
聊到这里,他的两个核心问题都有了方向:
- 接口自动化 :先从Postman生成代码入手,理解requests库的基础用法,再逐步掌握接口依赖的处理。
- UI自动化 :先用Airtest跑通单端,再扩展多场景。
但他的状态其实很典型——不是不会学,而是不知道应该先学什么 。
他报了一个测开课程,但又担心自己基础不够,跟不上进度。
“我建议你三件事,”我说。
第一,补代码基础。
Python的变量、函数、条件判断、循环、请求库、JSON解析——这些东西绕不过去。你花两周时间专门补,比边上课边卡壳要高效得多。
第二,带着业务去写代码。
别光学视频里的案例。案例跑通了以后,马上想:这个技术能不能用到我今天的业务上?怎么用?
每天写一行属于自己的代码,比抄一百行示例代码有价值。
第三,先列思路,再动手。
“你看视频觉得思路清晰,是因为视频里的人替你做了分解。你要自己写的时候,先把步骤列在思维导图里——第一步做什么、第二步做什么、期望的返回是什么——列清楚了再开干。”
“不打无准备的仗。”我说。
他接了一句:“对,我之前就是太急着上手,写到一半发现卡住了,然后又倒回去重看视频,就很挫败。”
他最后问了一个问题
快要挂电话的时候,他忽然说:
“我一直在找一个工具,之前上课的时候老师介绍过,可以把业务流程画成那种……每一步请求什么、返回什么,特别清晰的那个……叫什么来着?”
“流程图?时序图?”
“不是不是……一时想不起来了。”
“没关系,”我说,“工具叫什么不重要。重要的是,你脑子里有没有那个结构。画图是为了帮你思考,不是为了画图本身。”
他沉默了一下。
“其实……”他说,“我今天最大的收获不是Postman能生成代码,也不是Airtest怎么用。是我终于知道自己缺什么了——不是缺工具,是缺一个方向。”
“对,你缺的不是工具,是方向感。”
“行,那我从代码基础开始,先从接口入手,一步步来。”
“好,你先跑起来,有问题随时再约。”
“辛苦了老师,拜拜。”
“拜拜。”
写在最后
每一次私教咨询,我都会遇到类似的故事。
测试做了好几年,业务很熟,但代码就是上不去。报过课、看过视频、读过文档,但总觉得差了点什么——差了“这个东西到底该怎么用在实际工作中”的那层窗户纸。
这层窗户纸,很多时候不是靠看更多视频能捅破的。
你需要一个人,帮你把问题拆开,告诉你先走哪一步,再走哪一步 ,在你卡住的时候给你一个具体的出口,在你跑偏的时候拉你回来。
这就是私教存在的意义。
我不是在教他“怎么写代码”,我是在教他“怎么思考一个测试问题 ”。工具会过时,框架会淘汰,但拆解问题的能力、从业务中抽象出接口依赖的能力、用代码表达测试逻辑的能力——这些东西一旦建立,就不会消失。
如果你也正处于这种状态——
不知道学什么,不知道怎么学,学了不知道怎么用,用了不知道怎么优化——
可以来找我聊聊。
我们不卖焦虑,只解决问题。
霍格沃兹测试开发学社,是一个专注软件测试、自动化测试、人工智能测试与测试开发的技术交流社区