From 6ad9c8f84ea50a7d8a701ef40265e1aac5af9b99 Mon Sep 17 00:00:00 2001 From: jola_1999 Date: Mon, 6 Oct 2025 14:32:37 +0200 Subject: [PATCH 1/4] change history_id --- ...33-3813-4e84-9a92-cdb4fb2ba872-result.json | 1 + ...2b-22e2-4445-8514-1bece861a366-result.json | 1 + ...94-2823-4e5e-ad52-e2a567d5fd89-result.json | 1 + jola_testenvironment/behave.ini | 9 ++++++ jola_testenvironment/changes.py | 27 +++++++++++++++++ jola_testenvironment/features/environment.py | 30 +++++++++++++++++++ .../features/scenarios/create_tests.feature | 5 ++++ jola_testenvironment/features/steps/helper.py | 14 +++++++++ 8 files changed, 88 insertions(+) create mode 100644 jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json create mode 100644 jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json create mode 100644 jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json create mode 100644 jola_testenvironment/behave.ini create mode 100644 jola_testenvironment/changes.py create mode 100644 jola_testenvironment/features/environment.py create mode 100644 jola_testenvironment/features/scenarios/create_tests.feature create mode 100644 jola_testenvironment/features/steps/helper.py diff --git a/jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json b/jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json new file mode 100644 index 00000000..b0bcec4f --- /dev/null +++ b/jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json @@ -0,0 +1 @@ +{"name": "Tests shoud work", "status": "passed", "steps": [{"name": "Given start test", "status": "passed", "start": 1759410889128, "stop": 1759410889129}, {"name": "When we do something", "status": "passed", "start": 1759410889129, "stop": 1759410889129}, {"name": "Then compare the change", "status": "passed", "start": 1759410889129, "stop": 1759410889129}], "start": 1759410889127, "stop": 1759410889130, "uuid": "b38efcd4-cf08-4544-b5f6-91cb1746b75b", "historyId": "63243c8bf50b6a9471755d9c19f6cf03", "fullName": "Test Simple Test: Tests shoud work", "labels": [{"name": "severity", "value": "normal"}, {"name": "feature", "value": "Test Simple Test"}, {"name": "framework", "value": "behave"}, {"name": "language", "value": "cpython3"}], "titlePath": ["features", "scenarios", "Test Simple Test"]} \ No newline at end of file diff --git a/jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json b/jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json new file mode 100644 index 00000000..117ffc6e --- /dev/null +++ b/jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json @@ -0,0 +1 @@ +{"name": "Tests shoud work", "status": "passed", "steps": [{"name": "Given start test", "status": "passed", "start": 1759411049581, "stop": 1759411049581}, {"name": "When we do something", "status": "passed", "start": 1759411049581, "stop": 1759411049581}, {"name": "Then compare the change", "status": "passed", "start": 1759411049582, "stop": 1759411049582}], "start": 1759411049580, "stop": 1759411049582, "uuid": "6cb2c368-1a4a-42cd-95f1-a27f21715705", "historyId": "dd7d87ca9065638fdc5f8c802ad03d02", "fullName": "Test Simple Test: Tests shoud work", "labels": [{"name": "severity", "value": "normal"}, {"name": "feature", "value": "Test Simple Test"}, {"name": "framework", "value": "behave"}, {"name": "language", "value": "cpython3"}], "titlePath": ["features", "scenarios", "Test Simple Test"]} \ No newline at end of file diff --git a/jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json b/jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json new file mode 100644 index 00000000..2523ee24 --- /dev/null +++ b/jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json @@ -0,0 +1 @@ +{"name": "Tests shoud work", "status": "passed", "steps": [{"name": "Given start test", "status": "passed", "start": 1759411141236, "stop": 1759411141237}, {"name": "When we do something", "status": "passed", "start": 1759411141238, "stop": 1759411141238}, {"name": "Then compare the change", "status": "passed", "start": 1759411141238, "stop": 1759411141239}], "start": 1759411141236, "stop": 1759411141239, "uuid": "2d14c15e-9012-4baa-8984-c100e0303e45", "historyId": "dd7d87ca9065638fdc5f8c802ad03d02", "fullName": "Test Simple Test: Tests shoud work", "labels": [{"name": "severity", "value": "normal"}, {"name": "feature", "value": "Test Simple Test"}, {"name": "framework", "value": "behave"}, {"name": "language", "value": "cpython3"}], "titlePath": ["features", "scenarios", "Test Simple Test"]} \ No newline at end of file diff --git a/jola_testenvironment/behave.ini b/jola_testenvironment/behave.ini new file mode 100644 index 00000000..fad9c456 --- /dev/null +++ b/jola_testenvironment/behave.ini @@ -0,0 +1,9 @@ +# -- FILE: behave.ini +[behave.formatters] +html-pretty = behave_html_pretty_formatter:PrettyHTMLFormatter +html = behave_html_formatter:HTMLFormatter +allure=allure_behave.formatter:AllureFormatter + +[behave] +format=allure_behave.formatter:AllureFormatter +outfiles=allure-results diff --git a/jola_testenvironment/changes.py b/jola_testenvironment/changes.py new file mode 100644 index 00000000..4e99855e --- /dev/null +++ b/jola_testenvironment/changes.py @@ -0,0 +1,27 @@ +import hashlib +import os + +# jola_testenvironment\.venv\Lib\site-packages\allure_behave\utils.py + +def scenario_history_id(scenario, extra: str = None) -> str: + """ + Erzeugt eine History-ID für ein Scenario. + - Immer basierend auf Feature-Name, Scenario-Name und evtl. Tabellenzeilen. + - Zusätzlich kann ein optionaler Faktor (extra) angegeben werden, + der in die Berechnung mit einfließt. + """ + parts = [scenario.feature.name, scenario.name] + + # Falls Scenario aus einer Tabelle (Outline) stammt + if hasattr(scenario, "_row") and scenario._row: + row = scenario._row + parts.extend([f"{name}={value}" for name, value in zip(row.headings, row.cells)]) + + # Optionaler zusätzlicher Faktor (Parameter oder Umgebungsvariable) + extra_factor = extra or os.getenv("TEST_HISTORY_FACTOR") + if extra_factor: + parts.append(f"extra={extra_factor}") + + # Hash erzeugen + text = "|".join(parts).encode("utf-8") + return hashlib.md5(text).hexdigest() \ No newline at end of file diff --git a/jola_testenvironment/features/environment.py b/jola_testenvironment/features/environment.py new file mode 100644 index 00000000..0c85212a --- /dev/null +++ b/jola_testenvironment/features/environment.py @@ -0,0 +1,30 @@ +from enum import Enum +import os + + + +class Option(str, Enum): + OPTION_A = "Option A" + OPTION_B = "Option B" + +def before_all(context): + os.environ["TEST_HISTORY_FACTOR"] = Option.OPTION_A.value + + print(f"INFO: {os.getenv('TEST_HISTORY_FACTOR')}") + pass + +def before_scenario(context, scenario): + pass + +def before_step(context, step): + pass + + +def before_feature(context,feature): + pass + +def before_scenario(context,feature): + pass + +def after_all(context): + pass \ No newline at end of file diff --git a/jola_testenvironment/features/scenarios/create_tests.feature b/jola_testenvironment/features/scenarios/create_tests.feature new file mode 100644 index 00000000..9a0a126f --- /dev/null +++ b/jola_testenvironment/features/scenarios/create_tests.feature @@ -0,0 +1,5 @@ +Feature: Test Simple Test + Scenario: Tests shoud work + Given start test + When we do something + Then compare the change \ No newline at end of file diff --git a/jola_testenvironment/features/steps/helper.py b/jola_testenvironment/features/steps/helper.py new file mode 100644 index 00000000..9ec258ab --- /dev/null +++ b/jola_testenvironment/features/steps/helper.py @@ -0,0 +1,14 @@ +from behave import Given,When,Then +import allure + +@Given("start test") +def step_impl(context, ): + print("Start Test") + +@When("we do something") +def step_impl(context, ): + print("we do something") + +@Then("compare the change") +def step_impl(context, ): + print("compare the change") From 639ee0de1240ca4c847fdeb6e283233cb050bcb8 Mon Sep 17 00:00:00 2001 From: jola_1999 Date: Mon, 6 Oct 2025 14:32:57 +0200 Subject: [PATCH 2/4] add optional historyId as environment variable --- allure-behave/src/utils.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/allure-behave/src/utils.py b/allure-behave/src/utils.py index ce0f2d70..fa70bd8f 100644 --- a/allure-behave/src/utils.py +++ b/allure-behave/src/utils.py @@ -1,5 +1,6 @@ import csv import io +import os from enum import Enum from pathlib import Path from behave.runner_util import make_undefined_step_snippet @@ -26,11 +27,23 @@ def scenario_name(scenario): return scenario.name if scenario.name else scenario.keyword -def scenario_history_id(scenario): +def scenario_history_id(scenario) -> str: + """ + Create a historyId for a scenario. + - Always based on feature name and scenario name + - Optional: can append a value from an environment variable + """ parts = [scenario.feature.name, scenario.name] - if scenario._row: + + if hasattr(scenario, "_row") and scenario._row: row = scenario._row - parts.extend([f'{name}={value}' for name, value in zip(row.headings, row.cells)]) + parts.extend([f"{name}={value}" for name, value in zip(row.headings, row.cells)]) + + # Optional: append environment variable to differentiate runs + history_id = os.getenv("HISTORY_ID") + if history_id: + parts.append(history_id) + return md5(*parts) From 28caf5641a2a2c2cf5aa124ab69b0cf48792b0b4 Mon Sep 17 00:00:00 2001 From: jola_1999 Date: Mon, 6 Oct 2025 14:33:06 +0200 Subject: [PATCH 3/4] Revert "change history_id" This reverts commit a541ec37a30cdbe594112c2cacf3decb48b88e0c. --- ...33-3813-4e84-9a92-cdb4fb2ba872-result.json | 1 - ...2b-22e2-4445-8514-1bece861a366-result.json | 1 - ...94-2823-4e5e-ad52-e2a567d5fd89-result.json | 1 - jola_testenvironment/behave.ini | 9 ------ jola_testenvironment/changes.py | 27 ----------------- jola_testenvironment/features/environment.py | 30 ------------------- .../features/scenarios/create_tests.feature | 5 ---- jola_testenvironment/features/steps/helper.py | 14 --------- 8 files changed, 88 deletions(-) delete mode 100644 jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json delete mode 100644 jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json delete mode 100644 jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json delete mode 100644 jola_testenvironment/behave.ini delete mode 100644 jola_testenvironment/changes.py delete mode 100644 jola_testenvironment/features/environment.py delete mode 100644 jola_testenvironment/features/scenarios/create_tests.feature delete mode 100644 jola_testenvironment/features/steps/helper.py diff --git a/jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json b/jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json deleted file mode 100644 index b0bcec4f..00000000 --- a/jola_testenvironment/allure-results/404a5133-3813-4e84-9a92-cdb4fb2ba872-result.json +++ /dev/null @@ -1 +0,0 @@ -{"name": "Tests shoud work", "status": "passed", "steps": [{"name": "Given start test", "status": "passed", "start": 1759410889128, "stop": 1759410889129}, {"name": "When we do something", "status": "passed", "start": 1759410889129, "stop": 1759410889129}, {"name": "Then compare the change", "status": "passed", "start": 1759410889129, "stop": 1759410889129}], "start": 1759410889127, "stop": 1759410889130, "uuid": "b38efcd4-cf08-4544-b5f6-91cb1746b75b", "historyId": "63243c8bf50b6a9471755d9c19f6cf03", "fullName": "Test Simple Test: Tests shoud work", "labels": [{"name": "severity", "value": "normal"}, {"name": "feature", "value": "Test Simple Test"}, {"name": "framework", "value": "behave"}, {"name": "language", "value": "cpython3"}], "titlePath": ["features", "scenarios", "Test Simple Test"]} \ No newline at end of file diff --git a/jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json b/jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json deleted file mode 100644 index 117ffc6e..00000000 --- a/jola_testenvironment/allure-results/6ac02e2b-22e2-4445-8514-1bece861a366-result.json +++ /dev/null @@ -1 +0,0 @@ -{"name": "Tests shoud work", "status": "passed", "steps": [{"name": "Given start test", "status": "passed", "start": 1759411049581, "stop": 1759411049581}, {"name": "When we do something", "status": "passed", "start": 1759411049581, "stop": 1759411049581}, {"name": "Then compare the change", "status": "passed", "start": 1759411049582, "stop": 1759411049582}], "start": 1759411049580, "stop": 1759411049582, "uuid": "6cb2c368-1a4a-42cd-95f1-a27f21715705", "historyId": "dd7d87ca9065638fdc5f8c802ad03d02", "fullName": "Test Simple Test: Tests shoud work", "labels": [{"name": "severity", "value": "normal"}, {"name": "feature", "value": "Test Simple Test"}, {"name": "framework", "value": "behave"}, {"name": "language", "value": "cpython3"}], "titlePath": ["features", "scenarios", "Test Simple Test"]} \ No newline at end of file diff --git a/jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json b/jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json deleted file mode 100644 index 2523ee24..00000000 --- a/jola_testenvironment/allure-results/a81f7c94-2823-4e5e-ad52-e2a567d5fd89-result.json +++ /dev/null @@ -1 +0,0 @@ -{"name": "Tests shoud work", "status": "passed", "steps": [{"name": "Given start test", "status": "passed", "start": 1759411141236, "stop": 1759411141237}, {"name": "When we do something", "status": "passed", "start": 1759411141238, "stop": 1759411141238}, {"name": "Then compare the change", "status": "passed", "start": 1759411141238, "stop": 1759411141239}], "start": 1759411141236, "stop": 1759411141239, "uuid": "2d14c15e-9012-4baa-8984-c100e0303e45", "historyId": "dd7d87ca9065638fdc5f8c802ad03d02", "fullName": "Test Simple Test: Tests shoud work", "labels": [{"name": "severity", "value": "normal"}, {"name": "feature", "value": "Test Simple Test"}, {"name": "framework", "value": "behave"}, {"name": "language", "value": "cpython3"}], "titlePath": ["features", "scenarios", "Test Simple Test"]} \ No newline at end of file diff --git a/jola_testenvironment/behave.ini b/jola_testenvironment/behave.ini deleted file mode 100644 index fad9c456..00000000 --- a/jola_testenvironment/behave.ini +++ /dev/null @@ -1,9 +0,0 @@ -# -- FILE: behave.ini -[behave.formatters] -html-pretty = behave_html_pretty_formatter:PrettyHTMLFormatter -html = behave_html_formatter:HTMLFormatter -allure=allure_behave.formatter:AllureFormatter - -[behave] -format=allure_behave.formatter:AllureFormatter -outfiles=allure-results diff --git a/jola_testenvironment/changes.py b/jola_testenvironment/changes.py deleted file mode 100644 index 4e99855e..00000000 --- a/jola_testenvironment/changes.py +++ /dev/null @@ -1,27 +0,0 @@ -import hashlib -import os - -# jola_testenvironment\.venv\Lib\site-packages\allure_behave\utils.py - -def scenario_history_id(scenario, extra: str = None) -> str: - """ - Erzeugt eine History-ID für ein Scenario. - - Immer basierend auf Feature-Name, Scenario-Name und evtl. Tabellenzeilen. - - Zusätzlich kann ein optionaler Faktor (extra) angegeben werden, - der in die Berechnung mit einfließt. - """ - parts = [scenario.feature.name, scenario.name] - - # Falls Scenario aus einer Tabelle (Outline) stammt - if hasattr(scenario, "_row") and scenario._row: - row = scenario._row - parts.extend([f"{name}={value}" for name, value in zip(row.headings, row.cells)]) - - # Optionaler zusätzlicher Faktor (Parameter oder Umgebungsvariable) - extra_factor = extra or os.getenv("TEST_HISTORY_FACTOR") - if extra_factor: - parts.append(f"extra={extra_factor}") - - # Hash erzeugen - text = "|".join(parts).encode("utf-8") - return hashlib.md5(text).hexdigest() \ No newline at end of file diff --git a/jola_testenvironment/features/environment.py b/jola_testenvironment/features/environment.py deleted file mode 100644 index 0c85212a..00000000 --- a/jola_testenvironment/features/environment.py +++ /dev/null @@ -1,30 +0,0 @@ -from enum import Enum -import os - - - -class Option(str, Enum): - OPTION_A = "Option A" - OPTION_B = "Option B" - -def before_all(context): - os.environ["TEST_HISTORY_FACTOR"] = Option.OPTION_A.value - - print(f"INFO: {os.getenv('TEST_HISTORY_FACTOR')}") - pass - -def before_scenario(context, scenario): - pass - -def before_step(context, step): - pass - - -def before_feature(context,feature): - pass - -def before_scenario(context,feature): - pass - -def after_all(context): - pass \ No newline at end of file diff --git a/jola_testenvironment/features/scenarios/create_tests.feature b/jola_testenvironment/features/scenarios/create_tests.feature deleted file mode 100644 index 9a0a126f..00000000 --- a/jola_testenvironment/features/scenarios/create_tests.feature +++ /dev/null @@ -1,5 +0,0 @@ -Feature: Test Simple Test - Scenario: Tests shoud work - Given start test - When we do something - Then compare the change \ No newline at end of file diff --git a/jola_testenvironment/features/steps/helper.py b/jola_testenvironment/features/steps/helper.py deleted file mode 100644 index 9ec258ab..00000000 --- a/jola_testenvironment/features/steps/helper.py +++ /dev/null @@ -1,14 +0,0 @@ -from behave import Given,When,Then -import allure - -@Given("start test") -def step_impl(context, ): - print("Start Test") - -@When("we do something") -def step_impl(context, ): - print("we do something") - -@Then("compare the change") -def step_impl(context, ): - print("compare the change") From 200a306bdd8c6df5b8fe2f94c1981577bc3fe11f Mon Sep 17 00:00:00 2001 From: jola_1999 Date: Tue, 28 Oct 2025 14:18:13 +0100 Subject: [PATCH 4/4] change name of environment variable --- allure-behave/src/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/allure-behave/src/utils.py b/allure-behave/src/utils.py index fa70bd8f..84f26979 100644 --- a/allure-behave/src/utils.py +++ b/allure-behave/src/utils.py @@ -40,7 +40,7 @@ def scenario_history_id(scenario) -> str: parts.extend([f"{name}={value}" for name, value in zip(row.headings, row.cells)]) # Optional: append environment variable to differentiate runs - history_id = os.getenv("HISTORY_ID") + history_id = os.getenv("ALLURE_HISTORY_ID") if history_id: parts.append(history_id)