allure-framework / allure-framework/allure-python

Step tree seems not correct in multithreaded testing

Open
#872 0 comments 0 reactions 0 assignees View on GitHub
theme:pytest
Dominant language
Python
Stars
814
Forks
260
PR merge metrics
No merged PRs in 30d

Description

[//]: # (
. Note: for support questions, please use Stackoverflow or Gitter**.
. This repository's issues are reserved for feature requests and bug reports.
.
. In case of any problems with Allure Jenkins plugin** please use the following repository
. to create an issue: https://github.com/jenkinsci/allure-plugin/issues
.
. Make sure you have a clear name for your issue. The name should start with a capital
. letter and no dot is required in the end of the sentence. An example of good issue names:
.
. - The report is broken in IE11
. - Add an ability to disable default plugins
. - Support emoji in test descriptions
)

#### I'm submitting a ...
- [x] bug report
- [ ] feature request
- [ ] support request => Please do not submit support request here, see note at the top of this template.

#### What is the current behavior?

When Thead#entrance spawned Thread#node, Thread#node spawned Thread#session, step tree of allure seems incorrect?

Image

#### If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

```python
from concurrent.futures import ThreadPoolExecutor
import allure

def session_on_node(node_id, session):
with allure.step(f"Session#{session} on node {node_id}"):
pass

def parallel_task_for_specific_node(node_id):
with allure.step(f"Parallel task for node {node_id}"):
with ThreadPoolExecutor() as executor:
for session in range(5):
executor.submit(session_on_node, node_id, session)

executor.shutdown(wait=True)

def test_multithreaded():
with allure.step("Entrance"):
with ThreadPoolExecutor() as executor:
for node_id in range(3):
executor.submit(parallel_task_for_specific_node, node_id)

executor.shutdown(wait=True)

```

#### What is the expected behavior?

step tree should be like this?

```
Thread#entrance
- Thread#node
- Thread#session
- Thread#session
- Thread#session
- Thread#node
- Thread#session
- Thread#session
- Thread#session
```

#### What is the motivation / use case for changing the behavior?

There is a service combined of multiple nodes. Every node could handle several sessions from client.
Sometimes, parallel testing is needed: Multi sessions for multi nodes, which means main thread is to spawn threads of different node, thread of a single node is to spawn different threads of multiple session, and finally we collect every step and organize them in a friendly tree.

#### Please tell us about your environment:

- Allure version: 2.32.0
- Test framework: pytest@7.4.4
- Allure adaptor: allure-pytest@2.13.5

#### Other information

[//]: # (
. e.g. detailed explanation, stacktraces, related issues, suggestions
. how to fix, links for us to have more context, eg. Stackoverflow, Gitter etc
)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.