allure-framework / allure-python

Allure integrations for Python test frameworks
https://allurereport.org/
Apache License 2.0
718 stars 237 forks source link

bug: When the check is placed in the parent step and the child step asserts, the check becomes invalid. #824

Open Faerie1999 opened 1 month ago

Faerie1999 commented 1 month ago

[//]: # ( . 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 ...

What is the current behavior?

def validate_something(a, b, c, d):
    with check, allure.step(f'some assertions'):
        with allure.step('aa'):
            assert a == 1
        with allure.step('b'):
            assert b == 2
        with allure.step('cccc'):
            assert c == 13
        with allure.step('dddd'):
            assert d == 4

def test_22():
    with check, allure.step("setup step"):
        assert 5 == 5
    validate_something(1,2,3,4)

As above, the test report is:

image

the step dddd won't be executed, the effect of pytest-check is gone

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

copy the code above

PS: if run, the step [some assertions] won't be marked as failed, but pass, and the four sub-steps will be executed, I hope if any sub step is failed, the parent should be failed:

def validate_something(a, b, c, d):
    with allure.step(f'some assertions'):
        with check, allure.step('aa'):
            assert a == 1
        with check, allure.step('b'):
            assert b == 2
        with check, allure.step('cccc'):
            assert c == 13
        with check, allure.step('dddd'):
            assert d == 4

def test_22():
    with check, allure.step("setup step"):
        assert 5 == 5
    validate_something(1,2,3,4)

main.py run pytest (allure) and get the allure report

What is the expected behavior?

step dddd should be executed

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

Please tell us about your environment:

Other information

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

### Tasks