自动化测试
2026/8/21大约 3 分钟
自动化测试
什么是 PO(Page Object)模式?有什么好处?
- 将页面元素定位与操作封装成 Page 类,测试用例只调用页面方法,不直接接触元素。
- 好处:减少用例与页面结构耦合、元素变更只改一处、提高复用性与可维护性、用例可读性好。
Selenium 定位元素的方式有哪些?优先级?
- id、name、class name、tag name、link text、partial link text、css selector、xpath。
- 优先级建议:id > name > css selector > xpath(xpath 尽量用相对路径,避免使用绝对路径与动态属性)。
Selenium 与 Playwright/Cypress 的区别?
- Selenium:生态成熟、多语言、兼容性好,但依赖 WebDriver、执行慢、等待机制需手动处理。
- Playwright:内置自动等待、多浏览器、支持多标签页/多上下文、录制脚本、网络拦截、并发性能好。
- Cypress:开发者友好、内置断言与调试,但仅支持 JS、不支持多标签页。
如何处理自动化中的动态元素 / 元素等待?
- 动态属性:用相对 XPath、CSS 的
contains、通过文本/层级关系定位。 - 等待:显式等待(
WebDriverWait + expected_conditions,推荐)、隐式等待(全局兜底)、强制 sleep(尽量少用)。 - 断言等待:轮询直到条件满足或超时。
UI 自动化用例不稳定(flaky)怎么排查?
- 检查是否有隐性依赖(用例顺序)、等待是否足够、定位是否唯一、数据是否被污染、环境是否隔离。
- 对策:用例独立可重复执行、统一数据清理、显式等待、失败重试、截图与录屏定位失败原因、接入 Allure 报告分析。
如何做自动化测试的数据管理?
- 数据与脚本分离(yaml/json/excel/数据库);用例前置造数与后置清理;使用独立测试库;复杂场景用接口造数而非 UI 造数;敏感数据脱敏。
pytest 的 fixture 是什么?作用域有哪些?
- fixture 是 pytest 的依赖注入机制,用于准备/清理测试环境。
- 作用域:
function(默认)、class、module、session(包级别)。通过yield实现 setup/teardown,conftest.py共享 fixture。
pytest 常用功能?
- 参数化
@pytest.mark.parametrize、分组@pytest.mark.xxx、跳过@pytest.mark.skip/skipif、conftest.py、断言pytest.raises、fixture、插件(allure-pytest、pytest-html、pytest-xdist 并行、pytest-rerunfailures 重试)。
如何保证自动化测试用例的质量?
- 先人工用例稳定,再自动化;用例独立、无顺序依赖;可重复执行;执行结果稳定(重试机制);覆盖率评估;失败自动定位(日志/截图/录屏);定期清理失效用例。
关键字驱动和数据驱动的区别?
- 数据驱动:同一套脚本,用不同测试数据批量执行(参数化)。
- 关键字驱动:将操作抽象为关键字(如点击、输入、断言),用例由关键字序列组成,实现脚本与数据完全分离,非开发也能编写用例。Robot Framework 是典型代表。
移动端自动化怎么做?
- 原生:Appium(iOS/Android,基于 WebDriver 协议)、XCUITest/UIAutomator。
- 混合:Appium + WebView 调试。
- 关注点:设备管理、用例稳定性(等待、坐标 vs 元素)、真机/模拟器云测平台、性能(启动耗时、CPU/内存)专项。