Bird
Raised Fist0
PyTesttesting~5 mins

Grouping related tests in PyTest

Choose your learning style10 modes available
Introduction

Grouping related tests helps keep your tests organized and easy to find. It makes running and understanding tests simpler.

When you have many tests for different parts of your app and want to keep them separate.
When you want to run only a specific set of tests related to one feature.
When you want to share setup or cleanup code for a group of tests.
When you want to improve test reports by grouping results logically.
Syntax
PyTest
import pytest

@pytest.mark.group_name
def test_example():
    assert True

# Or use classes to group tests
class TestGroupName:
    def test_one(self):
        assert True
    def test_two(self):
        assert True

You can use @pytest.mark to tag tests with a group name.

Using classes groups tests inside one container without needing extra decorators.

Examples
Here, both tests are marked with 'login' to group them.
PyTest
import pytest

@pytest.mark.login
def test_login_success():
    assert True

@pytest.mark.login
def test_login_failure():
    assert False
Tests inside the class TestMathOperations are grouped together.
PyTest
class TestMathOperations:
    def test_add(self):
        assert 1 + 1 == 2

    def test_subtract(self):
        assert 2 - 1 == 1
Sample Program

This example shows two ways to group tests: using @pytest.mark and using classes.

Tests marked with 'calculator' belong to one group, and string tests are grouped in a class.

PyTest
import pytest

@pytest.mark.calculator
def test_multiply():
    assert 3 * 3 == 9

@pytest.mark.calculator
def test_divide():
    assert 10 / 2 == 5

class TestStringMethods:
    def test_upper(self):
        assert 'hello'.upper() == 'HELLO'

    def test_isupper(self):
        assert 'HELLO'.isupper() is True
OutputSuccess
Important Notes

Use descriptive group names to make tests easy to find.

You can run tests by group using pytest -m group_name.

Classes group tests logically and can share setup code with setup_method.

Summary

Grouping tests keeps your test suite organized and easier to manage.

Use @pytest.mark or classes to group related tests.

Running tests by group helps focus on specific features or fixes.

Practice

(1/5)
1. What is the main benefit of grouping related tests in pytest?
easy
A. It keeps the test suite organized and easier to manage
B. It makes tests run faster automatically
C. It removes the need for assertions in tests
D. It prevents tests from running in parallel

Solution

  1. Step 1: Understand test grouping purpose

    Grouping tests helps organize them logically by feature or behavior.
  2. Step 2: Identify the main benefit

    This organization makes the test suite easier to maintain and understand.
  3. Final Answer:

    It keeps the test suite organized and easier to manage -> Option A
  4. Quick Check:

    Grouping = Organized tests [OK]
Hint: Grouping means organizing tests for easier management [OK]
Common Mistakes:
  • Thinking grouping speeds up tests automatically
  • Believing grouping removes need for assertions
  • Assuming grouping disables parallel runs
2. Which of the following is the correct way to mark a test function with a group name in pytest?
easy
A. @pytest.group('fast')\ndef test_example(): pass
B. @pytest.group_mark('fast')\ndef test_example(): pass
C. @pytest.mark.fast\ndef test_example(): pass
D. @pytest.tag('fast')\ndef test_example(): pass

Solution

  1. Step 1: Recall pytest syntax for marking tests

    pytest uses @pytest.mark.<groupname> to mark tests for grouping.
  2. Step 2: Match correct syntax

    @pytest.mark.fast is the correct decorator to mark a test as 'fast'.
  3. Final Answer:

    @pytest.mark.fast\ndef test_example(): pass -> Option C
  4. Quick Check:

    Use @pytest.mark.groupname for grouping [OK]
Hint: Use @pytest.mark.groupname to mark tests [OK]
Common Mistakes:
  • Using @pytest.group instead of @pytest.mark
  • Using @pytest.tag which does not exist
  • Incorrect decorator names like @pytest.group_mark
3. Given the following pytest code, what tests will run when executing pytest -m "slow"?
import pytest

@pytest.mark.slow
def test_a():
    assert True

@pytest.mark.fast
def test_b():
    assert True

class TestGroup:
    @pytest.mark.slow
    def test_c(self):
        assert True

    def test_d(self):
        assert True
medium
A. test_a and test_c only
B. test_b and test_d only
C. All tests test_a, test_b, test_c, test_d
D. Only test_c

Solution

  1. Step 1: Understand pytest -m option

    The -m option runs tests marked with the given marker, here 'slow'.
  2. Step 2: Identify tests marked 'slow'

    test_a and test_c have @pytest.mark.slow, so they run. test_b and test_d do not.
  3. Final Answer:

    test_a and test_c only -> Option A
  4. Quick Check:

    -m "slow" runs tests marked slow [OK]
Hint: -m runs only tests with the matching mark [OK]
Common Mistakes:
  • Running all tests ignoring marks
  • Including unmarked tests in filtered run
  • Confusing class-level marks with method marks
4. What is wrong with this pytest code if the goal is to group tests inside a class named TestMath?
class TestMath:
    def test_add():
        assert 1 + 1 == 2

    def test_subtract(self):
        assert 2 - 1 == 1
medium
A. test_subtract should not have self parameter
B. Class name should not start with Test
C. Tests inside classes cannot have assertions
D. test_add is missing the self parameter

Solution

  1. Step 1: Check method definitions inside test classes

    Instance methods inside test classes must have self as first parameter.
  2. Step 2: Identify the error

    test_add is missing self, so pytest will error or skip it.
  3. Final Answer:

    test_add is missing the self parameter -> Option D
  4. Quick Check:

    Test methods in classes need self [OK]
Hint: Test methods in classes must include self parameter [OK]
Common Mistakes:
  • Omitting self in test methods
  • Thinking class names cannot start with Test
  • Removing assertions from test methods
5. You want to run only tests related to the login feature in your pytest suite. You have marked tests with @pytest.mark.login and grouped some inside a class TestLogin. Which command will correctly run all login tests, including those inside the class?
hard
A. pytest -k login
B. pytest -m login
C. pytest --group=login
D. pytest --run-login

Solution

  1. Step 1: Understand pytest options for running grouped tests

    pytest uses -m to run tests marked with a specific marker like 'login'.
  2. Step 2: Identify correct command

    pytest -m login runs all tests marked with @pytest.mark.login, including those inside classes.
  3. Final Answer:

    pytest -m login -> Option B
  4. Quick Check:

    -m runs marked tests, -k filters by test name [OK]
Hint: Use -m with marker name to run grouped tests [OK]
Common Mistakes:
  • Using -k which filters by test name, not marker
  • Using nonexistent options like --group or --run-login
  • Assuming class name filters tests automatically
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard