使用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
解决建议
版本兼容性检查
确认behave与allure-behave的版本是否匹配。部分版本组合存在线程上下文管理的bug,建议尝试使用behave 1.2.6搭配allure-behave 2.13.2(社区验证过的稳定组合)。钩子函数排查
检查environment.py中的before_scenario/after_scenario钩子,确认是否有修改Allure上下文或线程变量的操作,这类操作可能导致场景结束时UUID丢失,引发KeyError。临时规避方案
在environment.py中添加异常捕获,避免脚本中断:def after_scenario(context, scenario): try: if hasattr(context, '_allure_listener'): context._allure_listener.stop_scenario(scenario) except KeyError: pass官方bug确认
查看allure-behave的官方issue列表,确认该问题是否为已知bug,是否有官方修复补丁或后续版本的修复计划。
内容的提问来源于stack exchange,提问作者Nirmal Kamishetty
相关产品推荐
相关产品推荐

