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

使用Allure Behave生成测试报告时出现KeyError问题求助

Behave + Allure-Behave 启用报告时抛出KeyError问题

问题详情

  • 运行环境:使用behave执行自动化测试脚本,集成allure-behave生成测试报告
  • 异常表现:不启用Allure报告时脚本运行完全正常;启用后,feature文件中第一个场景执行完毕时抛出KeyError,且生成的报告里该测试用例显示为通过状态
  • 已尝试操作:更换多个allure-behave版本,问题未解决

报错栈

Exception KeyError: 
Traceback (most recent call last):
  File "/home/administrator/.local/bin/behave", line 8, in <module>
    sys.exit(main())
  File "/home/administrator/.local/lib/python3.10/site-packages/behave/__main__.py", line 183, in main
    return run_behave(config)
  File "/home/administrator/.local/lib/python3.10/site-packages/behave/__main__.py", line 127, in run_behave
    failed = runner.run()
  File "/home/administrator/.local/lib/python3.10/site-packages/behave/runner.py", line 804, in run
    return self.run_with_paths()
  File "/home/administrator/.local/lib/python3.10/site-packages/behave/runner.py", line 824, in run_with_paths
    return self.run_model()
  File "/home/administrator/.local/lib/python3.10/site-packages/behave/runner.py", line 626, in run_model
    failed = feature.run(self)
  File "/home/administrator/.local/lib/python3.10/site-packages/behave/model.py", line 321, in run
    failed = scenario.run(runner)
  File "/home/administrator/.local/lib/python3.10/site-packages/allure_commons/_allure.py", line 236, in __call__
    with self:
  File "/home/administrator/.local/lib/python3.10/site-packages/allure_commons/_allure.py", line 247, in __exit__
    plugin_manager.hook.stop_test(parent_uuid=None,
  File "/home/administrator/.local/lib/python3.10/site-packages/pluggy/_hooks.py", line 513, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
  File "/home/administrator/.local/lib/python3.10/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/home/administrator/.local/lib/python3.10/site-packages/pluggy/_callers.py", line 139, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "/home/administrator/.local/lib/python3.10/site-packages/pluggy/_callers.py", line 103, in _multicall
    res = hook_impl.function(*args)
  File "/home/administrator/.local/lib/python3.10/site-packages/allure_behave/listener.py", line 99, in stop_test
    self.stop_scenario(context['scenario'])
  File "/home/administrator/.local/lib/python3.10/site-packages/allure_behave/listener.py", line 118, in stop_scenario
    self.logger.close_test(self.current_scenario_uuid)
  File "/home/administrator/.local/lib/python3.10/site-packages/allure_commons/reporter.py", line 120, in close_test
    test_case = self._items.pop(uuid)
  File "/home/administrator/.local/lib/python3.10/site-packages/allure_commons/reporter.py", line 45, in pop
    return self.thread_context.pop(key)
KeyError

解决建议

  1. 版本兼容性检查
    确认behave与allure-behave的版本是否匹配。部分版本组合存在线程上下文管理的bug,建议尝试使用behave 1.2.6搭配allure-behave 2.13.2(社区验证过的稳定组合)。

  2. 钩子函数排查
    检查environment.py中的before_scenario/after_scenario钩子,确认是否有修改Allure上下文或线程变量的操作,这类操作可能导致场景结束时UUID丢失,引发KeyError。

  3. 临时规避方案
    在environment.py中添加异常捕获,避免脚本中断:

    def after_scenario(context, scenario):
        try:
            if hasattr(context, '_allure_listener'):
                context._allure_listener.stop_scenario(scenario)
        except KeyError:
            pass
    
  4. 官方bug确认
    查看allure-behave的官方issue列表,确认该问题是否为已知bug,是否有官方修复补丁或后续版本的修复计划。

内容的提问来源于stack exchange,提问作者Nirmal Kamishetty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:15:18