allure-framework / allure-framework/allure-python

Allure step placeholder fails when accessing dataclass attribute `data.name`

Đang mở
#896 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
814
Fork
260
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

With the usage provided in [step_placeholder.rst](https://github.com/allure-framework/allure-python/blob/master/allure-pytest/examples/step/step_placeholder.rst), I used Allure step placeholders to reference a property on a Python `dataclass` passed as a function argument. Using `data.name` in the step title raises an `AttributeError` during step rendering.

#### Expected behavior

Allure should resolve `data.name` and display the value of the `name` attribute in the step title like Create opportunity: Auto QA Example

#### Actual behavior

Allure raises an exception before the step executes: `AttributeError: 'str' object has no attribute 'get('name)'`

MWE of dataclass used

```python

@dataclass
class OpportunityData:
"""Data class for opportunity test data."""

name: str
expected_revenue: str
email: Optional[str] = None
phone: Optional[str] = None
state: Optional[str] = None
street: Optional[str] = None
zip_code: Optional[str] = None
```

Factory function for Opportunity creation
```python
def create_opportunity_data() -> OpportunityData:
"""Factory function to create OpportunityData for tests."""


data = OpportunityData(
name=f"Auto QA {fake.company()}",
expected_revenue=_generate_expected_revenue(),
email = fake.email()
phone = fake.phone_number()
street = fake.street_address()
zip_code = fake.zipcode()
state=fake.random_element(STATE_OPTIONS),
)

return data
```
Test Opportunity file
```python
@allure.title("Test opportunity creation with all main fields")
@allure.testcase("CRM-002")
@pytest.mark.regression
def test_opportunity_creation_full(opportunity_page: OpportunityPage, app_instance: App) -> None:

# ARRANGE
data = create_opportunity_data(full=True, opportunity_type="CRM Multi-Year")

# ACT
opportunity_page.create_opportunity(data)

# ASSERT
opportunity_page.verify_opportunity_saved(data.name)

```
Opportunity Page class
```python
@allure.step("Create opportunity: {data.name}")
def create_opportunity(self, data: "OpportunityData", base_url: str) -> Self:
"""High-level method to create an opportunity with provided data."""


# Fill main form fields
self.fill_opportunity_name(data.name)
self.fill_expected_revenue(data.expected_revenue)

```

Call stack

```
app_instance =

@allure.title("Test opportunity creation with minimal fields")
@allure.testcase("CRM-001")
@pytest.mark.smoke
def test_opportunity_creation_flow(opportunity_page: OpportunityPage, app_instance: App) -> None:

# ARRANGE
data = create_opportunity_data(opportunity_type="Monitoring")

# ACT
> opportunity_page.create_opportunity(data, app_instance.base_url)
E AttributeError: 'str' object has no attribute 'get('name)'
```

#### Notes

* `data` is a dataclass instance, not a dict.
* Attribute access works inside the function body.
* The error occurs during Allure step title formatting.

#### Environment

* Python 3.12
* allure-pytest==2.15.2
* pytest==8.4.2
* pytest-playwright==0.7.2
* mypy==1.19.0
* mypy-extensions==1.1.0

Does allure step placeholders accept only strings?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với cách sử dụng trong step_placeholder.rst và tái hiện lỗi bằng ví dụ dataclass với Python 3.12 và allure-pytest 2.15.2. Truy vết quá trình render step-title placeholder và bổ sung coverage cho việc truy cập thuộc tính dataclass; hoàn thành khi step hiển thị tên đã được resolve mà không phát sinh AttributeError.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
testing
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.