测试做了好几年,代码还是不行,怎么办?

0 阅读9分钟

深夜的咨询

凌晨一点多,手机屏幕亮了一下。

我点开消息,是一位学员发来的私教预约。备注栏只写了一句话:

“想咨询跨系统的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怎么用。是我终于知道自己缺什么了——不是缺工具,是缺一个方向。”

“对,你缺的不是工具,是方向感。”

“行,那我从代码基础开始,先从接口入手,一步步来。”

“好,你先跑起来,有问题随时再约。”

“辛苦了老师,拜拜。”

“拜拜。”

写在最后

每一次私教咨询,我都会遇到类似的故事。

测试做了好几年,业务很熟,但代码就是上不去。报过课、看过视频、读过文档,但总觉得差了点什么——差了“这个东西到底该怎么用在实际工作中”的那层窗户纸。

这层窗户纸,很多时候不是靠看更多视频能捅破的。

你需要一个人,帮你把问题拆开,告诉你先走哪一步,再走哪一步 ,在你卡住的时候给你一个具体的出口,在你跑偏的时候拉你回来。

这就是私教存在的意义。

我不是在教他“怎么写代码”,我是在教他“怎么思考一个测试问题 ”。工具会过时,框架会淘汰,但拆解问题的能力、从业务中抽象出接口依赖的能力、用代码表达测试逻辑的能力——这些东西一旦建立,就不会消失。

如果你也正处于这种状态——

不知道学什么,不知道怎么学,学了不知道怎么用,用了不知道怎么优化——

可以来找我聊聊。

我们不卖焦虑,只解决问题。

霍格沃兹测试开发学社,是一个专注软件测试、自动化测试、人工智能测试与测试开发的技术交流社区