You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:18:17