allure-framework / allure-framework/allure-python

Step tree seems not correct in multithreaded testing

Aperta
#872 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

theme:pytest
Lingua principale
Python
Stelle
815
Fork
260
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

I'm submitting a ...
  • 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
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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo la riproduzione test_multithreaded fornita con Python, pytest 7.4.4 e allure-pytest 2.13.5, concentrandoti su allure.step e sulle chiamate annidate a ThreadPoolExecutor. Confronta l’albero degli step generato con la struttura attesa Entrance → node → session; il lavoro è completato quando tutti gli step node e session generati sono raggruppati sotto il rispettivo parent di origine.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
testing
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.