Skip to content

Commit 3a59d6e

Browse files
committed
fix(behave): add proper cleanup
1 parent 4422ef8 commit 3a59d6e

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

allure-behave/src/formatter.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ def __init__(self, stream_opener, config):
1212
super(AllureFormatter, self).__init__(stream_opener, config)
1313

1414
self.listener = AllureListener(config)
15-
file_logger = AllureFileLogger(self.stream_opener.name)
15+
self.file_logger = AllureFileLogger(self.stream_opener.name)
1616

1717
allure_commons.plugin_manager.register(self.listener)
18-
allure_commons.plugin_manager.register(file_logger)
18+
allure_commons.plugin_manager.register(self.file_logger)
1919

2020
self.testplan = get_testplan()
2121

@@ -45,5 +45,14 @@ def result(self, result):
4545
def eof(self):
4646
self.listener.stop_feature()
4747

48+
def close(self):
49+
try:
50+
super().close()
51+
finally:
52+
for plugin in [self.file_logger, self.listener]:
53+
name = allure_commons.plugin_manager.get_name(plugin)
54+
if allure_commons.plugin_manager.has_plugin(name):
55+
allure_commons.plugin_manager.unregister(name=name)
56+
4857
def close_stream(self):
4958
self.listener.stop_session()

allure-behave/src/hooks.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from behave.configuration import Configuration
77

88
HOOKS = [
9+
"after_all",
910
"before_feature",
1011
"after_feature",
1112
"before_scenario",
@@ -42,12 +43,22 @@ def allure_report(result_dir="allure_results"):
4243
class AllureHooks:
4344
def __init__(self, result_dir):
4445
self.listener = AllureListener(Configuration())
46+
self.plugins = []
4547

4648
if not hasattr(_storage, 'file_logger'):
47-
_storage.file_logger = AllureFileLogger(result_dir)
48-
allure_commons.plugin_manager.register(_storage.file_logger)
49+
logger = AllureFileLogger(result_dir)
50+
_storage.file_logger = logger
51+
allure_commons.plugin_manager.register(logger)
52+
self.plugins.append(logger)
4953

5054
allure_commons.plugin_manager.register(self.listener)
55+
self.plugins.append(self.listener)
56+
57+
def after_all(self, context):
58+
for plugin in self.plugins:
59+
name = allure_commons.plugin_manager.get_name(plugin)
60+
if allure_commons.plugin_manager.has_plugin(name):
61+
allure_commons.plugin_manager.unregister(name=name)
5162

5263
def before_feature(self, context, feature):
5364
self.listener.start_file()

0 commit comments

Comments
 (0)