一次“假阳性”测试

发布时间:2026/10/11 7:53:08
一次“假阳性”测试 在写 Web 自动化测试框架Selenium Pytest Page Object时我遇到了一次非常有价值的失败。它表面上是一个“断言失败”实际上暴露了两个问题——一个是我数错了范围另一个是我写了一条永远为真的“假阳性”用例。把它记录下来提醒自己测试通过不等于测试有效。问题现场我写了两条搜索相关的用例#搜索小米有结果 def test_search_xiaomi(search_page): search_page.search(小米) #断言判断页面标题是否包含搜索列表 assert 搜索列表 in search_page.driver.title #断言商品数量 gt; 0 goods search_page.driver.find_elements(By.CSS_SELECTOR, a[href*goodsInfo]) assert len(goods) gt; 0 #断言搜索框的值 小米 assert search_page.get_search_input_value() 小米 #搜索不存在的词无结果 def test_search_null(search_page): search_page.search(Vivian) #断言判断页面标题是否包含搜索列表 assert 搜索列表 in search_page.driver.title #断言商品数量 0 goods search_page.driver.find_elements(By.CSS_SELECTOR, a[href*goodsInfo]) count len(goods) assert count 0, f搜不存在的词竟然有 {count} 个结果 #断言搜索框的值 Vivian assert search_page.get_search_input_value() Vivian第一个测试用例测试小米正常运行我并没有发现不对看结果跑绿就过了。第二个测试用例测试空结果结果却是AssertionError: 搜不存在的词竟然有 10 个结果第一反应是是不是测试词打错了。我又换了很多个测试词跑出来都是 10。然后我就进测试页面里查看发现确实是没有结果。发现问题问题一定位器范围写大了我用的选择器是a[href*goodsInfo]意思是“全页所有链接里包含 goodsInfo 的 a 标签”。但我忽略了一件事TPshop 的搜索页不管搜没搜到东西页面顶部永远有一个「推荐热卖」区块里面的商品链接也是 goodsInfo。问题二更要紧一条永远为真的正向用例顺手检查了另一条正向用例def test_search_word(search_page): 搜关键词验证有结果 search_page.search(手机) goods search_page.driver.find_elements(By.CSS_SELECTOR, a[href*goodsInfo]) assert len(goods) 0这条用例永远会通过。因为推荐热卖区永远有 10 条len(goods) 永远大于 0。哪怕搜索功能完全坏了、搜不到任何东西这条用例也是绿的。这是典型的假阳性False Positive——测试看起来通过了其实什么都没测到。比失败更危险。因为失败会报警假阳性会骗人。修复方案1. 把定位器限定到结果区结果区在 .shop-list-splb 这个容器里推荐区在它之前用 CSS 的“后代选择器”限定范围RESULT_LINKS (By.CSS_SELECTOR, .shop-list-splb a[href*goodsInfo])这样只数结果区里的商品链接推荐区被排除在外。2. 用例改成调用页面对象的方法def test_search_null(search_page): 搜不存在的词验证无结果 search_page.search(测试) assert 搜索列表 in search_page.driver.title assert search_page.get_result_count() 0 # 也可以直接断言页面文案 body_text search_page.driver.find_element(By.TAG_NAME, body).text assert 抱歉没找到您要搜索的商品 in body_text def test_search_xiaomi(search_page): 搜小米验证有结果 search_page.search(小米) assert search_page.get_result_count() 0这次踩坑的收获1. 断言之前先搞清楚“数的到底是什么”定位器写 a[href*goodsInfo] 时我以为数的是“搜索结果”其实数的是“全页所有商品链接”。范围错了数字再准也没用。2. 永远为真的用例等于没有用例len(goods) 0 这种断言如果页面永远有商品哪怕是推荐区它就永远通过。这种用例是自欺欺人。怎么发现假阳性 问自己“如果我故意把搜索功能改坏这条用例还会绿吗” 如果答案是“会”那它就有问题。3. 失败是好事假阳性才是灾难失败会告诉你哪里不对。假阳性会让你以为一切正常直到上线才爆雷。宁可失败不要假阳性。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询