allure-framework / allure-framework/allure-python

allure-behave: extend scenario_history_id to use optional environment variable

Đang mở
#880 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ả

### Context

# allure-behave: extend scenario_history_id to use optional environment variable

We have a problem where we want to run the same test-suite in different environments. For example:

1. **Execute Test-Suite for Different Browser:** Firefox, Chrome, ... (i.e. 'BROWSER=firefox behave' 'BROWSER=chromium behave' etc.)
2. **Execute Test-Suite for Different Systems:** Linux armx64, Linux amd64, Win amd64, ...

If we collect all JSON allure-results and generate an allure report we only see **one** result for each test-scenario. Other executions are shown only in the "retries" section. We need to change the history ID so that each execution appears as a separate test.

We want to solve this by adding additional information into the historyId. It would have been nice to use additional user-modifiable information from the Scenario object, but this is not possible since scenario_history_id() is called before the before_scenario() hook (environment.py). Therefore not action in the before_scenario hook function (like changing scenario name or adding other information, can impact the historyId.

Thus, we designed a solution that uses an environment variable to pass this information. Our proposal is to the set an environment variable in `environment.py` that is used to influence the `historyId`.

In `allure-python/allure-behave/src/utils.py`:

```python
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 hasattr(scenario, "_row") and scenario._row:
row = scenario._row
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("ALLURE_HISTORY_ID")
if history_id:
parts.append(history_id)

return md5(*parts)
```

To use this feature, add the environment variable in `environment.py`:

```python
from enum import Enum
import os

class Option(str, Enum):
OPTION_A = "Option A"
OPTION_B = "Option B"

def before_all(context):
os.environ["ALLURE_HISTORY_ID"] = Option.OPTION_B.name
```

Pull Request: #879

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

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

Hướng nghiên cứu

Bắt đầu tại allure-behave/src/utils.py, ở scenario_history_id(scenario), sau đó xem lại cách history ID được trả về được sử dụng khi các kết quả Allure được thu thập. Hoàn thành khi một giá trị ALLURE_HISTORY_ID tùy chọn phân biệt các lần thực thi, trong khi các đầu vào feature, scenario và scenario-row hiện có vẫn xác định ID khi biến này không tồn tại.

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-qa
Loại issue
Tính năng
Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
48/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.