|
软件测试工程师的软件工作,远不止点点鼠标找bug那么简单。测试我见过一个测试团队,工程在电商大促前两周发现购物车并发场景下优惠券叠加逻辑会触发金额计算溢出,师岗直接拦下了一个可能造成数百万损失的位职线上事故。这类问题往往不靠功能点逐个验证,软件而是测试靠对业务逻辑的逆向拆解和数据边界的敏感。测试工程师的工程第一职责,就是师岗替用户和公司提前踩雷。 需求评审阶段就得介入。位职别等开发写完代码才看文档,软件那时候改设计成本已经高了。测试读需求时脑子里要跑场景:用户会怎么用?工程异常路径有哪些?比如一个登录功能,正常输入账号密码只是师岗起点。密码输错三次锁定、位职验证码过期重发、第三方授权回调丢失、token刷新时并发请求——这些都得在评审时提出来。开发可能只想了主流程,测试得把分支和异常补全。这不是挑刺,是让代码在写之前就少留坑。 设计测试用例是核心手艺。等价类、边界值这些方法老生常谈,但真用起来差别很大。比如测一个文件上传功能,不能只试1MB和10MB。0字节文件、文件名含特殊字符、上传中途断网、服务端磁盘满、并发上传同名文件——这些用例写出来,开发看了会皱眉,但上线后用户不会骂娘。我习惯把用例分成冒烟、核心、扩展三层。冒烟用例半小时跑完,核心覆盖主业务流,扩展留给自动化或专项测试。别追求用例数量,一条能暴露设计缺陷的用例,比一百条重复验证的强。 执行测试时得带脑子。发现一个bug,别急着提。先复现三次,确认不是环境问题。然后缩小范围:是前端渲染错还是接口返回错?抓包看请求响应,查日志定位报错堆栈。提交时写清楚复现步骤、预期结果、实际结果、附件截图或录屏。我见过测试提的bug单只写“下单失败”,开发来回问五遍才定位到是库存扣减的分布式锁超时。好的bug单能省下至少半小时沟通成本。 自动化测试不是万能药。UI自动化尤其脆弱,页面改个class就可能全挂。适合自动化的场景:接口回归、数据校验、高频核心流程。我一般用pytest+requests做接口层,selenium只覆盖最关键的几条用户旅程。维护自动化脚本的时间往往比手动执行还长,所以得算账:一个用例每月跑20次,手动每次5分钟,自动化开发2小时,三个月回本。低于这个频率的,手动更划算。 性能测试和安全测试属于专项技能。性能不是跑个JMeter看TPS就完事。得分析瓶颈:是数据库连接池不够,还是GC频繁,还是网络带宽打满。安全测试至少得懂OWASP Top 10,能手动验证SQL注入、XSS、越权访问。我见过测试用sqlmap扫出注入点,开发说“内网系统不用管”,结果上线三个月被拖库。测试的底线是:你提了风险,决策者可以接受,但你不能不知道。 上线后的线上验证同样关键。灰度发布时盯监控:错误率、响应时间、关键业务指标。有一次新版本上线后支付成功率从99.2%掉到97.8%,看日志发现是某个第三方SDK在特定机型上超时。这种问题测试环境很难复现,全靠线上快速回滚和热修复。测试工程师得会看Grafana、Kibana,能写简单的SQL查数据。别把自己框在“找bug”里,保障质量才是目标。 最后说句实在的。测试工程师的价值不在于发现多少bug,而在于让团队对质量有信心。该拦的版本要拦,该签的字要签。沟通时对事不对人,用数据说话。开发改完bug,顺手点个赞。质量是整条链路的事,测试是最后一道闸门,但闸门得知道上游的水有多急。 |