How to skip the rest of tests in the class if one has failed?

前端 未结 9 2298
梦毁少年i
梦毁少年i 2020-11-28 06:45

I\'m creating the test cases for web-tests using Jenkins, Python, Selenium2(webdriver) and Py.test frameworks.

So far I\'m organizing my tests in the following str

9条回答
  •  余生分开走
    2020-11-28 07:15

    To complement hpk42's answer, you can also use pytest-steps to perform incremental testing, this can help you in particular if you wish to share some kind of incremental state/intermediate results between the steps.

    With this package you do not need to put all the steps in a class (you can, but it is not required), simply decorate your "test suite" function with @test_steps:

    from pytest_steps import test_steps
    
    def step_a():
        # perform this step ...
        print("step a")
        assert not False  # replace with your logic
    
    def step_b():
        # perform this step
        print("step b")
        assert not False  # replace with your logic
    
    @test_steps(step_a, step_b)
    def test_suite_no_shared_results(test_step):
        # Execute the step
        test_step()
    

    You can add a steps_data parameter to your test function if you wish to share a StepsDataHolder object between your steps.

    import pytest
    from pytest_steps import test_steps, StepsDataHolder
    
    def step_a(steps_data):
        # perform this step ...
        print("step a")
        assert not False  # replace with your logic
    
        # intermediate results can be stored in steps_data
        steps_data.intermediate_a = 'some intermediate result created in step a'
    
    def step_b(steps_data):
        # perform this step, leveraging the previous step's results
        print("step b")
    
        # you can leverage the results from previous steps... 
        # ... or pytest.skip if not relevant
        if len(steps_data.intermediate_a) < 5:
            pytest.skip("Step b should only be executed if the text is long enough")
    
        new_text = steps_data.intermediate_a + " ... augmented"  
        print(new_text)
        assert len(new_text) == 56
    
    @test_steps(step_a, step_b)
    def test_suite_with_shared_results(test_step, steps_data: StepsDataHolder):
    
        # Execute the step with access to the steps_data holder
        test_step(steps_data)
    

    Finally, you can automatically skip or fail a step if another has failed using @depends_on, check in the documentation for details.

    (I'm the author of this package by the way ;) )

提交回复
热议问题