Pytest编写两个页面测试用例时预期失败用例实际通过的解决方法
pytest测试用例执行结果不符合预期修复
需求说明
本次pytest用例需要满足两条判定规则:
- 页面存在字符串
Right-click in the box below to see one called 'the-internet'时,对应测试用例判定通过 - 同一页面不存在字符串
Alibaba时,对应测试用例判定失败
问题原因
原代码逻辑存在明显缺陷,是导致两个用例全部误判通过的核心原因:
- 断言逻辑被包裹在
if判断分支内,当if条件不成立时,测试函数会正常执行完毕,pytest默认无异常即判定用例通过,根本不会触发失败逻辑 - 第二个用例的逻辑完全写反:只有页面存在
Alibaba时才会走断言分支,页面不存在Alibaba时分支不触发,函数直接结束,自然会被标记为通过,和需求完全相反 - 原代码未定义
driver变量,直接运行会抛出变量未定义的错误
修复后完整代码
import pytest from selenium import webdriver @pytest.fixture(scope="function") def driver(): # 初始化浏览器驱动 driver = webdriver.Chrome() # 替换为你实际要测试的页面地址 driver.get("你的测试页面URL") yield driver # 测试完成后关闭浏览器回收资源 driver.quit() def test_target_hint_text_exist(driver): expected_text = "Right-click in the box below to see one called 'the-internet'" assert expected_text in driver.page_source, f"页面缺失预期提示文本:{expected_text}" def test_alibaba_text_exist(driver): expected_text = "Alibaba" assert expected_text in driver.page_source, f"页面未检测到'Alibaba'文本,用例判定失败"
修复点说明
- 删除了所有多余的
if判断:pytest的assert语句本身就会在条件不满足时抛出异常、标记用例失败,不需要额外加分支判断,从根源上避免分支不触发导致的误判 - 新增
driver固件:统一管理浏览器的启动、页面跳转、关闭逻辑,解决原代码变量未定义的问题 - 对齐需求逻辑:
- 第一个用例直接断言目标提示文本存在,文本存在则用例通过,不存在则自动失败,匹配第一条规则
- 第二个用例直接断言
Alibaba文本存在,只要页面不存在该文本就会触发断言失败,完全匹配第二条“不存在Alibaba则用例失败”的要求
- 给所有断言补充了明确的错误提示,用例失败时可以直接定位问题
内容的提问来源于stack exchange,提问作者Jiana
相关产品推荐
相关产品推荐

