Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

KeyError when using Rule keyword with step data tables or DocStrings

Ouverte
#886 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
50/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
python
Domaine
testing

Piste de recherche

Commencez dans allure_behave/listener.py, autour des lignes 144-147, puis reproduisez le problème avec test/features/simple/tutorial.feature et test/steps/steps_tutorial.py. Exécutez la commande fournie de Behave Allure formatter et vérifiez que les étapes avec des tables et des DocStrings sous une Rule se terminent correctement sans générer de KeyError et produisent leurs pièces jointes.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Bug Report:

Environment

  • OS: Windows
  • Python version: 3.12.10
  • behave version: 1.3.1
  • allure-behave version: 2.15.2
  • allure-commons version: (auto-installed with allure-behave)
  • allure commandline version: 2.35.1

Description

When using the Rule keyword (introduced in Behave 1.2.6) in feature files, allure-behave formatter throws a KeyError: None exception when processing steps that contain:

  1. Data tables (tables attached to steps)
  2. DocStrings (multi-line text enclosed in triple quotes """)

Expected Behavior

The Allure formatter should successfully process scenarios under a Rule that contain steps with data tables or DocStrings, just as it does for scenarios without the Rule keyword.

Actual Behavior

The formatter crashes with a KeyError: None traceback when attempting to attach step data (tables or text) to the Allure report.

Steps to Reproduce

1. Create a feature file with Rule and data table

File: test/features/simple/tutorial.feature

Feature: showing off behave

	Rule: Basic arithmetic operations

		Scenario: Passing a table as a data through step
			Given we have behave installed
			When we pass a table as a data through step
				| number1 | number2 | result |
				| 2       | 3       | 5      |
				| 4       | 5       | 9      |
			Then behave should be able to read the table
2. Create step definitions

File: test/steps/steps_tutorial.py

from behave import given, when, then

@given('we have behave installed')
def step_impl(context):
    pass

@when('we pass a table as a data through step')
def step_impl(context):
    assert context.table

@then('behave should be able to read the table')
def step_impl(context):
    pass
3. Run with Allure formatter
behave -f allure_behave.formatter:AllureFormatter -o allure_result_folder
4. Observe the error
Exception KeyError: None
Traceback (most recent call last):
  ...
  File "allure_behave/listener.py", line 147, in start_behave_step
    self.logger.attach_data(uuid4(), step_table(step), name='.table', attachment_type=AttachmentType.CSV)
  File "allure_commons/reporter.py", line 163, in attach_data
    file_name = self._attach(uuid, name=name, attachment_type=attachment_type,
  File "allure_commons/reporter.py", line 153, in _attach
    self._items[last_uuid].attachments.append(attachment)
  File "allure_commons/reporter.py", line 33, in __getitem__
    return self.thread_context.__getitem__(item)
KeyError: None

Additional Testing

Works ✅
  • Simple scenarios under Rule (no tables/DocStrings)
  • Scenario Outlines with Examples tables under Rule
  • All scenario types WITHOUT Rule keyword
Fails ❌
  • Steps with data tables under Rule
  • Steps with DocStrings under Rule
Test Results Matrix
Scenario Type Without Rule With Rule
Simple scenario ✅ Works ✅ Works
Scenario Outline with Examples ✅ Works ✅ Works
Step with data table ✅ Works ❌ Fails
Step with DocString ✅ Works ❌ Fails

Root Cause Analysis

The issue appears to be in allure_behave/listener.py at line 147 (data tables) and line 144 (DocStrings). When processing scenarios under a Rule, the last_uuid is None, causing the attachment operation to fail when trying to access self._items[last_uuid].

The Rule hierarchy creates a different context structure that the formatter doesn't handle correctly when attaching step data.

Suggested Fix

The start_behave_step method in allure_behave/listener.py needs to properly handle the context hierarchy when scenarios are nested under a Rule. The last_uuid should be correctly resolved even when scenarios are children of a Rule element.

Additional Context

  • The Rule keyword is a valid Gherkin construct for organizing scenarios
  • Behave 1.2.6+ fully supports the Rule keyword
  • This issue prevents using Allure reporting with modern Gherkin best practices

References

Langage dominant
Python
Étoiles
817
Forks
262
Merge moyen
3 h 20 min
PR mergées (30 j)
3

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de allure-framework/allure-python

Toutes les issues de allure-framework/allure-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.