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

Attribute error in @allure.title when using @pytest.fixture(params=[...]

Ouverte
#873 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
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
testing

Piste de recherche

Commencez par le chemin de formatage de @allure.title et par allure_commons.utils.SafeFormatter.get_field affichés dans la trace d’exécution ; comparez-les au comportement décrit dans #670. Reproduisez les cas de skip et d’erreur d’une fixture paramétrée, puis vérifiez que le skip pytest d’origine ou ValueError est signalé à la place d’un AttributeError.

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

Description

theme:pytest

@allure.title decorator doesn't correctly formats a title string when using a parametrized fixture and having that fixture skip a test or raise an error:

import pytest
import allure


class TestClass:
    @pytest.fixture(params=[1, 2])  # <-- causes AttributeError: 'int' object has no attribute 'one'
    # @pytest.fixture()
    def params(self):
        # will cause AttributeError in allure.title
        # if this fixture is skipping tests
        pytest.skip('skip')
        
        # or raising an error
        raise ValueError('aa')

        class _Params:
            """some params every test needs"""
            one = 1
            two = 2

        # but no error if it returns a value
        return _Params()

    @allure.title('should display "1" {params.one}')
    def test_func(self, params):  # <-- causes AttributeError: 'int' object has no attribute 'one'
        assert params.one == 1
self = <allure_commons.utils.SafeFormatter object at 0x7f1851ab19d0>, field_name = 'params.one', args = (), kwargs = {'param_id': '2', 'params': 2}

    def get_field(self, field_name, args, kwargs):
        first, rest = _string.formatter_field_name_split(field_name)
    
        obj = self.get_value(first, args, kwargs)
    
        # loop through the rest of the field_name, doing
        #  getattr or getitem as needed
        for is_attr, i in rest:
            if is_attr:
>               obj = getattr(obj, i)
                      ^^^^^^^^^^^^^^^
E               AttributeError: 'int' object has no attribute 'one'

/usr/lib64/python3.12/string.py:305: AttributeError
=================================================================== short test summary info ====================================================================
ERROR p.py::TestClass::test_func[1] - AttributeError: 'int' object has no attribute 'one'
ERROR p.py::TestClass::test_func[2] - AttributeError: 'int' object has no attribute 'one'
====================================================================== 2 errors in 0.14s =======================================================================

This is shadowing the real error or skip in the fixture and is similar to #670

allure-pytest==2.15.0
pytest==8.4.1
Langage dominant
Python
Étoiles
819
Forks
261
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.