ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

公司只有你一个测试?四招实战教你成为质量Owner

公司只有你一个测试?四招实战教你成为质量Owner 公司就你一个测试先别慌这活儿真能干。很多测试同行一听说公司就你一个测试第一反应是完了要背锅、要累死、要背全团队的KPI。我做过几年测试也在创业公司当过唯一的QA说实话这个处境确实不轻松——需求评审你要参加、用例你要写、功能你要测、回归你要盯、上线你要守偶尔服务器日志还得自己上去翻。但换个角度想单测不是一个人在战斗反而是一个人可以彻底定义测试体系的机会。没人管你怎么安排优先级没人规定你必须用哪套流程你可以按自己的节奏把测试这件事从背锅位变成质量Owner。这篇文章就是写给所有测试独苗的。我会从项目管理的角度、技术落地的角度、向上沟通的角度拆出四招实战打法——每一招都是我自己踩过坑之后验证过有用的不是那种要加油要努力的空话。1. 第一招先盘家底把不可能测完变成优先级清单一个人面对整个公司的测试需求第一感觉永远是根本干不完。这时候最忌讳的就是谁催得急就测谁最后每个项目都测了一半上线全是隐患。正确的开局动作不是打开IDE写用例而是花半天到一天时间把公司的产品线、技术架构、迭代节奏、历史故障全部盘一遍然后产出一份属于自己的测试优先级地图。1.1 摸清三个核心问题产品是什么、改什么、炸了会怎样第一个问题产品是什么形态。是Web端、App端、小程序还是有多端混合核心业务链路是哪几条比如电商类产品注册登录、商品浏览、下单支付、订单查询就是核心链路如果是内容类产品那么登录、发布、审核、推荐展示就是命脉。先把这些链路写下来排序这就是你以后所有测试安排的骨架。第二个问题技术架构怎么改。这个不是说你要看懂每一行代码而是要知道每次发版涉及哪些模块、哪些接口、哪些数据库表。你可以直接找开发要一份近期的代码变更清单或者看看CI的构建记录。搞清楚这次改了什么你才能判断这次要重点测什么。我见过很多单测同行每天都在做全量回归累得半死但漏测率一点没降原因就是没去追踪变更点。第三个问题出了问题的影响面有多大。金融类产品扣错钱是事故内容社区删错帖子可能也是事故内部工具页面打不开可能大家忍一忍就过去了。把功能重要度和故障影响面两个维度结合起来给你的测试对象分一下级——P0级别是核心交易链路P1是主流程辅助功能P2是边缘功能。分级之后你会发现真正需要你投入80%精力的其实就那么几个模块。1.2 定测试策略哪些该人肉、哪些该自动化、哪些直接不测盘完家底之后你对自己的工作量就有了一个相对客观的判断。这时候要做第二个决策什么该测、什么不该测、什么值得投入自动化。我的个人经验是一个三层测试策略第一层核心链路和本次变更点必须人工测试为主自动化辅助回归第二层稳定模块和基础接口用自动化脚本去覆盖人不用天天盯着第三层完全不影响核心链路、历史从未出过问题的冷门功能可以只在发版前做冒烟检查甚至可以一期不做深度测试。很多测试新人在单测环境下最大的心理负担是觉得漏测了就是我的错。但你得想明白一件事测试的投入产出比是有极限的一个人永远不可能测出所有问题。你真正要做的是把有限精力放在出问题代价最高的地方剩下的风险通过流程和管理去兜底。这个思路想通了你就迈过了单测心里最难的那道坎。2. 第二招自动化不是炫技是帮你续命的杠杆公司就你一个测试你最缺的是什么时间。最怕的是什么重复劳动。每次发版前都要把主流程从头点一遍一年下来同样的登录、同样的下单、同样的支付路径你点了上百遍——点到最后眼睛都花了反而最容易漏。这种场景就是自动化测试真正该上场的地方。但我得先说一句大实话不要搞那种为了自动化而自动化的宏大工程。一个人维护一套巨复杂的自动化框架比手动测试还累最后大概率是弃坑。正确的做法是小而美挑最痛的点先自动化。2.1 接口自动化打底性价比最高的第一站如果你只能选一种自动化我强烈推荐接口自动化。原因很简单接口层逻辑相对稳定用例维护成本低接口跑得飞快几百条用例几分钟就跑完了大部分核心业务的问题在接口层面就能暴露一大半就算你公司没有完善的测试环境只要有一份接口文档或者一个测试环境地址你就能开始干活。工具选型上我推荐用Python pytest requests这套组合。pytest的断言和fixture机制对测试非常友好requests库又是Python生态里最成熟的HTTP客户端搭起来非常快。下面是一个最简的接口测试用例示例import requests import pytest BASE_URL https://api.example.com def test_login_success(): resp requests.post( f{BASE_URL}/login, json{username: testuser, password: pass123} ) assert resp.status_code 200 assert resp.json()[code] 0 assert resp.json()[data][token] ! 这个用例看起来简单但你已经把登录成功这个场景固化下来了。你可以用pytest的参数化功能把更多异常场景塞进去import pytest import requests pytest.mark.parametrize(username,password,expected_msg, [ (, pass123, 用户名不能为空), (testuser, , 密码不能为空), (testuser, wrong, 用户名或密码错误), (admin OR 11, pass123, 用户名或密码错误), ]) def test_login_invalid_parameters(username, password, expected_msg): resp requests.post( https://api.example.com/login, json{username: username, password: password} ) assert resp.json()[code] ! 0 assert expected_msg in resp.json()[message]注意最后那组admin OR 11——这一条其实是在做简单的SQL注入探测。作为测试工程师你不需要是安全专家但至少要知道这种最常见的注入payload。在你只有一个人的情况下能顺手发现一个高危安全漏洞那价值比测通一百个普通功能都高。2.2 Web UI自动化从冒烟测试开始不要一上来就全量覆盖UI自动化是个坑很多的方向单测人员尤其容易掉进去。最常见的翻车方式是领导让你搞UI自动化你就把所有页面都写一遍脚本结果页面一改版脚本全废每天都在修定位符比手动测试还惨。我的建议是UI自动化只用来做两件事一是冒烟测试二是核心主流程的回归。比如登录→首页→列表→详情→下单→支付这条链路你可以用Selenium或者Playwright把主流程走一遍。注意脚本里定位元素一定要用稳定的属性比如id或者data-testid不要用那些自动生成的动态class否则前端一重构你的脚本必死。我个人更推荐Playwright因为它自带等待机制、自动截图、录制脚本对单测工程师来说上手成本比Selenium低很多。一个简单的冒烟脚本长这样from playwright.sync_api import sync_playwright def test_core_checkout_flow(): with sync_playwright() as p: browser p.chromium.launch(headlessTrue) page browser.new_page() page.goto(https://example.com) page.click(text登录) page.fill(#username, testuser) page.fill(#password, pass123) page.click(button[typesubmit]) assert page.locator(.user-info).is_visible() page.click(text立即购买) page.click(text提交订单) page.click(text确认支付) assert page.locator(.order-success).is_visible() browser.close()这脚本跑通之后每次发版前你点一下主流程通不通立刻知道。你省下来的时间可以去测那些真正需要人脑判断的复杂场景。2.3 移动端测试能用真机云测就别自己养一堆手机如果公司产品有App端单测最头疼的就是设备兼容性。自己买测试机公司可能不给这个预算。在办公室堆一堆旧手机光是系统版本、屏幕分辨率就够你维护的。我的做法是优先用真机云测平台。你把App上传上去选几款主流机型跑一遍核心用例兼容性问题基本能覆盖个七七八八。如果你要自己在本地跑自动化那Appium依然是跨平台最稳的选择但需要一定的环境搭建成本——Java、Android SDK、Appium Server、Desired Capabilities配置一环不对就起不来。Appium的一个最简配置示例from appium import webdriver desired_caps { platformName: Android, platformVersion: 13.0, deviceName: emulator-5554, appPackage: com.example.app, appActivity: .MainActivity, automationName: UiAutomator2 } driver webdriver.Remote(http://localhost:4723/wd/hub, desired_caps) driver.find_element(id, com.example.app:id/login_btn).click() driver.quit()但说实话如果公司就你一个测试我不建议你在移动端自动化上投入太多精力。原因很直接App自动化踩坑成本太高环境问题、版本兼容、设备连接每一项都可能耗掉你半天时间。除非你的App迭代极其频繁、核心链路非常重要否则移动端的重点应该放在手工功能测试线上监控上。2.4 CI/CD集成让自动化在没人盯着的时候自己跑单测最理想的状态是什么是你在睡觉的时候自动化用例替你在跑。这就需要把测试脚本接入CI/CD流水线——每次开发提交代码、构建成功之后自动触发接口测试和UI冒烟测试结果推到群里或者邮件里。常见的做法是在Jenkins、GitLab CI或者阿里云效之类的平台里配一个流水线任务。以GitLab CI为例你只需要在项目根目录放一个.gitlab-ci.yml文件stages: - test test: stage: test script: - pip install -r requirements.txt - pytest -v --tbshort artifacts: when: always reports: junit: report.xml这样每次代码合并到主干自动测试就会在云端跑起来。你甚至可以让开发自己看测试结果——这很重要后面第三招会详细讲。至少从此刻起回归测试这件事不再百分百占用你的手动时间了。3. 第三招把测试责任分摊出去让开发自测成为你的外挂很多单测工程师有一个执念测试是测试的事开发写完代码丢过来测不测得出来是我的本事。这个想法在自己扛全部压力的时候会非常痛苦。你以为你是质量的最后一关实际上你应该做的是让每个人都对质量负责。怎么让开发愿意自测不是靠吼不是靠邮件而是靠流程和工具。说白了你要设计一套机制让不遵守规则的人比遵守规则的人更难受。3.1 用测试准入卡住流程提测不达标打回去我最常用的一个手段是提测准入检查。简单说开发提测之前必须满足几个基础条件——冒烟用例通过、接口自测通过、没有已知的阻塞级bug。你可以在提测模板里加上这几项勾选甚至可以立一个测试准入checklist本次变更涉及哪些模块影响范围是否已评估单元测试是否已补充关键分支是否已覆盖自测冒烟用例是否已跑通有哪些已知问题依赖的第三方服务或老接口是否有变更是否已联调如果开发提测时这几项填得含糊其辞你可以直接把单子打回去。这样做不是故意刁难而是倒逼开发在把代码交给你之前自己先走一遍主流程。实测下来这一招能让提测质量提升非常明显因为大部分人都不想被退回丢面子。3.2 联调规范让前后端自己先吵清楚别让你当裁判在单测环境里你可能会经常遇到一个场景前端说接口通了后端说前端参数传错了两个人在群里吵最后拉你进会让你测一下看到底是谁的问题。这种事情最消耗时间而且往往没有结论。我的解法是牵头出一份《测试联调规范》白纸黑字写清楚接口文档必须先行字段变更必须同步更新文档后端必须先自测接口再通知前端联调联调环境统一使用测试环境不允许各自本地起服务联调过程中发现的问题由提出方在缺陷平台登记指给对应负责人联调完成的标准是冒烟用例通过而不是差不多能跑了。这个规范不复杂但它能帮你把扯皮类问题消灭在萌芽状态。你作为测试的定位从裁判变成规则制定者反而更轻松。联调这件事本来就是开发自己的分内事你只需要保证他们按规矩办事。3.3 用数据运营质量让bug趋势图说话还有一件事单测工程师一定要做就是记录缺陷数据。不需要搞多复杂一个Excel表或者简单的缺陷管理平台就够了。要记录的核心字段是发现时间、模块、缺陷等级、原因分类前端/后端/需求/环境、发现阶段。积累一段时间之后你会得到几个非常关键的指标哪个模块bug最多、哪类原因占比最高、哪个开发提测质量最差。这些数据不是用来搞内部斗争的而是帮你和上级沟通资源、推动改进的时候有据可依。比如你发现支付模块的bug占了总量的40%那么下次排期的时候你就有理由申请更多测试时间或者说服领导优先重构支付模块。另外bug趋势图还有一个作用如果线上的故障数和修复周期在持续下降你可以直观地向老板证明测试工作产生了实际价值。这个在绩效季的时候比你说一百句我测了很多功能都有用。4. 第四招向上管理与借力让没人管测试变成大家围着测试转前两招解决的是怎么干的问题这一招解决的是怎么让别人配合你、支持你的问题。单测最缺的不是技术而是话语权。如果你只是默默测功能、默默提bug、默默被开发怼那你永远是团队里最累最不被重视的角色。你必须学会用一套方法把测试的诉求变成团队和领导的事。4.1 建立测试计划与风险同步机制不搞突然袭击一个人测多个项目最怕的是什么是快上线了你突然说这功能来不及测。开发会觉得你早干嘛去了产品会觉得你拖后腿领导会觉得你能力不行。正确的做法是提前同步在需求评审阶段就介入评估测试工作量排好测试计划。然后在每次版本开发过程中至少进行两次风险同步——开发中期一次、提测前一次。同步的时候不要只讲我要测什么要讲如果我测不了上线可能出什么事故影响是什么。举个例子你可以这么说这个版本涉及支付流程改造全量回归大概需要两天。如果周五必须上线那我只能保证核心链路优惠券、退款这些场景我这期覆盖不到建议这批功能延到下一版本上线。你看这不是你撂挑子而是你在帮团队做风险管理。领导者最吃这一套——因为你在替他想上线出事的后果。4.2 拉上产品和开发一起验收测试结果共享单测还有一个隐藏的尴尬你测完了说功能没问题产品和开发不一定信。因为他们觉得你可能漏测了。反过来你发现了一堆bug开发也可能觉得是你在吹毛求疵。解决办法很简单把验收变成集体活动。重要功能上线之前拉上产品经理、开发、你一起过一遍核心场景。你负责操作产品负责确认需求符合度开发负责随时看日志和修小问题。这样做的第一个好处是三方信息同步需求理解偏差当场发现第二个好处是责任分散产品确认过的功能如果上线出问题不再是测试一个人的锅。另外你的测试报告不要只丢到群里就完事。整理成简洁的表格写清楚测试范围、覆盖场景、遗留问题、上线建议。让团队知道测试做了什么、什么还没测、可不可以上。这种专业感积累起来之后开发会越来越愿意主动找你确认测试方案产品也会把你当成需求的可行性顾问。4.3 借力外部资源社区、开源工具与外包/众测的取舍单测没有人可以求助怎么办其实现在外部资源比过去丰富太多了。测试社区里各种自动化框架、测试平台、用例库基本都是开源的。遇到不会的问题search一下pytestrequests接口自动化实战Appium踩坑记录很快能找到答案。我自己的很多测试经验也是从社区的高质量分享里学的比啃文档效率高得多。如果碰到短期内无法自己完成的大规模测试需求比如老系统全面回归、兼容性矩阵测试可以考虑众测平台或者短期外包测试人力。挑那种按bug计费或按项目计费的团队把测试用例和重点场景写清楚让外部人员帮你执行你负责审核结果。唯一的坑是外部人员对业务理解不深可能给你报一堆无效bug所以用例要写得足够细验收标准要明确。4.4 安全测试与性能测试不用全懂但要懂怎么入门公司就你一个测试领导却突然甩给你一个安全测试任务或者让你看看系统能扛多少并发——这种场景我遇到过很多次。先别慌这两块虽然听起来很高级但作为单测工程师你不需要成为专家你只需要知道怎么用工具先跑一轮发现明显问题把报告甩给开发就够了。安全测试入门可以先用自动化扫描工具把常见漏洞过一遍。比如用专门的安全扫描器扫一下Web应用的SQL注入、XSS、CSRF等OWASP Top 10常见问题。如果公司要做渗透测试而且你手头有授权、在合规前提下可以学习用一些开源的渗透测试框架比如专门用于Web安全测试的工具集但一定要记住只在你自己公司的测试环境、有授权的情况下做不要把任何扫描手段用到不属于你的系统上这是底线。性能测试入门推荐用JMeter。它的思路不算复杂你录制一个业务脚本设置线程数、循环次数、压测时长然后让它跑最后看TPS、响应时间、错误率这三个核心指标。一个最简单的不需要GUI的JMeter压测脚本参数化并发用户数和循环数大致思路是第一步把被测HTTP请求的接口路径、请求方式、参数写好第二步在线程组里设置用户数比如50个并发、Ramp-Up时间比如5秒内全部启动和循环次数第三步添加聚合报告监听器查看结果树跑完之后重点看Average响应时间、Throughput吞吐量、Error%错误率。举个例子如果你用JMeter压一个登录接口50个并发、循环10次聚合报告显示平均响应时间800ms、吞吐量120/sec、错误率0%那说明单接口性能勉强可接受如果平均响应时间超过2000ms甚至超时那就需要开发排查慢查询或者接口逻辑了。压测结果记得截图保存写进你的测试报告里这是很有说服力的质量证据。5. 常见问题与排查技巧实录单测工程师在实战中遇到的问题很多时候不是因为技术多难而是因为没人交流、没人指点自己绕了很多弯。我把这几年最常遇到的坑整理成了一份速查表希望能帮你少踩几个雷。5.1 测试环境不稳定怎么办一个人管测试最大的噩梦就是测试环境动不动就挂。前端连不上后端、后端连不上数据库、缓存没清干净、数据被其他人改了……每一个都能耗掉你半天时间。我的经验是先把环境固化下来写一份《测试环境部署手册》把环境地址、账号、数据库连接方式、数据初始化脚本全部记录下来争取让开发人员帮你维护一套独立的测试环境或者在CI里配置自动化部署每次发版自动更新到测试环境环境出问题的时候第一时间找对应模块的开发定位不要自己去翻日志猜原因那是开发的分内事。另外如果你经常遇到脏数据导致测试无法进行一定要提需求让开发做一个测试数据一键重置功能。这个需求看似不起眼但对测试效率的提升是立竿见影的。5.2 开发不配合测试怎么办这个几乎是每个单测同事都会遇到的难题。有些开发觉得测试是来找茬的你提bug他先反驳你一顿有些开发觉得测试优先级低你提的问题他排到下个版本才修。我的处理思路是分三步走第一步把bug写得极其清楚。前置条件、复现步骤、实际结果、预期结果、截图或录屏、日志信息全部给齐让开发无法用我复现不了来搪塞。第二步把严重级别和上线风险绑定。你不需要和开发吵架只需要把这个bug如果不修上线后会怎样写清楚抄送产品经理和leader。如果开发还是不处理那至少责任不在你。第三步建立定期bug评审机制。每周或者每迭代结束拉一个15分钟的会议把遗留bug过一遍当面确认哪些修、哪些延。让开发自己表态比你私下催一百遍都有效。5.3 领导不重视测试、不给资源怎么办领导觉得测试没技术含量、人多人少都一样——这个认知在很多公司都存在。你要做的不是抱怨而是用结果证明测试的价值。方法上最有效的就是事故预防记录你测出来的每一个线上会爆的严重bug都记录下来标注如果遗漏会造成的损失用户投诉、资损、功能瘫痪等。拿这些记录和数据去和领导沟通不是在邀功而是在说明测试不是成本中心是风险控制部门。有了几个差点酿成事故但被测试拦住的案例领导对测试的看法会明显改观。如果你的公司是互联网公司还有一招比较实用测试数据驱动质量改进。把bug按模块和原因分类统计定期输出版本质量报告指出哪个模块开发自测质量最差、哪个环节最容易引入缺陷。领导可能不关心你的测试用例写得有多漂亮但他一定关心研发效率和线上稳定性。这些数据恰好能精准命中他的关切点。5.4 如何用最轻量的方式管理测试用例单测往往没有专门的管理平台很多人就建一堆Excel表格时间一长根本不知道每个功能覆盖了哪些用例。我推荐一个非常轻量的方案用Markdown文件管理用例按模块拆分成多个文件放在Git仓库里维护。这样既能看到历史变更又不需要额外的平台成本。比如一个cases/user_login.md的用例文件可以长这样# 用户登录模块测试用例 ## 正常场景 - [ ] 正确用户名密码登录成功返回token - [ ] 登录成功跳转首页展示用户昵称 ## 异常场景 - [ ] 空用户名提交提示请输入用户名 - [ ] 空密码提交提示请输入密码 - [ ] 用户名不存在提示用户不存在 - [ ] 密码错误提示用户名或密码错误 ## 安全场景 - [ ] 连续输错5次密码账号锁定 - [ ] 登录接口存在SQL注入防护每次发版前你打开对应的Markdown文件一个一个勾选过去。勾选的过程看起来很原始但它的核心价值是让你不会因为忙乱而漏掉关键的测试点。当你新接手一个项目的时候翻一翻历史用例文件也比问前同事你们之前怎么测的要靠谱得多。5.5 多项目并行时间冲突时怎么排优先级单测最常见的崩溃场景是三个项目同时要上线产品催你开发催你领导也觉得你应该都能搞定。这时候如果没有一套清晰的优先级决策机制最后就是每个项目都测出点问题哪个都没测透。我个人的排序策略是三步走第一步先看收益。凡是牵扯到用户核心链路、直接关系收入或者合规的改动优先排第二步再看风险。历史bug最多的模块或者技术架构重构的功能优先排第三步剩下的看时间窗口。哪个先上线就先测哪个但要在测试计划里明确标注测试覆盖率可能不足的风险。关键是当冲突确实无法调和的时候一定要把选择权交还给领导。你可以给领导发一条消息这周A和B两个版本同时要上按当前人力我只能完整测一个。您看哪个必须保证质量哪个可以接受冒烟测试后上线这一句话既是专业的表现也是自我保护。你提前说了真出问题就不是你一个人的责任。6. 最后再聊几句心里话公司就你一个测试听起来像是困难模式但做久了你会发现这段经历对你的成长速度是普通大厂螺丝钉根本比不了的。你被迫学会了项目管理、接口自动化、联调协调、向上沟通、质量复盘这些技能放在市场上比单纯的会点点点值钱太多。我个人实际工作里的一个体会是一定要养成写测试总结的习惯。每完成一个版本花10分钟记录一下这个版本踩了什么坑、哪个环节最耗时、下次怎么改进。这些记录积累到年底就是你的述职报告素材更是你提炼测试方法论的第一手材料。很多人在小公司干了两三年面试时却说不出自己做过什么就是因为没有沉淀。如果你现在正处于一个人扛所有质量压力的阶段先深呼吸别慌。按这篇文章的思路走盘清楚家底、设计好策略、让自动化帮你跑腿、让团队共同背质量责任、用数据向上争取资源。测试不是一个人能做完的事但绝对是一个人能撑起来的事。你的价值不是保证零bug而是让团队知道风险在哪里、该怎么选。想明白这一点你在这个位置上会走得比想象中从容很多。最后再分享一个小技巧如果公司允许每周主动去参加一下开发的代码评审。你不一定要看懂每一行代码但你能听到他们聊这里改动会影响什么那里有一个历史坑这些信息比任何测试用例都更能帮你提前预判风险。测试的最高境界不是等bug冒出来再去抓而是从源头就知道哪里会出问题。单测虽然孤独但这个提前洞察的能力恰恰是你一个人时最能练出来的杀手锏。
返回列表