搭自动化测试框架,自动最怕一上来就画大饼。化测我见过一个团队,试框花了两个月设计“万能测试平台”,架搭建结果连登录用例都没跑通。自动框架不是化测设计出来的,是试框长出来的——先让一条用例跑起来,再考虑怎么让它跑得稳、架搭建跑得多。自动
起步阶段,化测选语言比选框架重要。试框Python 配 pytest 是架搭建当前最省心的组合。pytest 的自动 fixture 机制能干净地管理测试前置和后置,比如启动浏览器、化测准备测试数据、试框清理环境。别用 unittest,那套 setUp/tearDown 写多了会疯。Java 团队用 TestNG 也行,但 Python 的生态在测试领域更轻快。
目录结构别照搬网上的模板。我习惯这样分:tests/ 放用例,pages/ 放页面对象,utils/ 放工具函数,data/ 放测试数据,reports/ 放报告。页面对象模式(PO)不是必须,但一旦用例超过 20 条,不抽页面对象就是自找麻烦。每个页面一个类,元素定位和操作封装成方法,用例里只调方法,不写选择器。
元素定位是坑最多的地方。XPath 写绝对路径,页面一改全废。优先用 data-testid 属性,让开发在代码里加上,这是最稳的。没有的话用 CSS 选择器,再不行才用 XPath 的相对路径。别用 text 定位,文案一改就挂。我见过一个项目用按钮文字定位,产品改了个“提交”为“确认提交”,三百条用例全红。
测试数据管理要提前想。小项目用 JSON 或 YAML 文件,按用例名组织。数据量大了上数据库,但别在测试代码里写 SQL 硬编码。用工厂模式生成数据,比如 UserFactory.create() 返回一个随机用户。测试数据要能重复使用,每次跑完清理掉,否则第二次跑就冲突。
报告和日志别将就。pytest 配 pytest-html 生成 HTML 报告,再配 allure 更好,但 allure 要装 Java 环境,团队嫌麻烦就用 HTML。日志用 Python 的 logging 模块,每个用例开始和结束打一行,失败时把截图嵌进报告。截图文件名带时间戳和用例名,别用 screenshot.png,不然覆盖了都不知道哪张是哪张。
持续集成是框架的放大器。GitHub Actions 或 Jenkins 都行,配一个定时任务,每天凌晨跑一遍。失败时发邮件或钉钉通知。别一上来就搞并行,先串行跑稳了再说。并行会带来数据竞争和端口冲突,调试成本翻倍。
最后说个真实教训。有个团队把框架搭得特别“优雅”,用了各种设计模式,结果新来的测试工程师三天没看懂怎么加一条用例。框架的第一服务对象是人,不是机器。能让一个不熟悉代码的测试人员半小时内写出第一条用例,比什么架构都强。