Bird
Raised Fist0
PyTesttesting~15 mins

pytest-cov setup - Build an Automation Script

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Setup pytest-cov to measure test coverage
Preconditions (3)
Step 1: Install pytest-cov using pip
Step 2: Create a simple Python function in a file named calculator.py
Step 3: Write a pytest test function in test_calculator.py to test the calculator function
Step 4: Run pytest with the --cov option to measure coverage on calculator.py
Step 5: Verify that the coverage report is displayed in the console
✅ Expected Result: pytest runs the tests and shows a coverage report indicating which lines of calculator.py were executed
Automation Requirements - pytest
Assertions Needed:
Test function asserts expected output from calculator function
Coverage report includes calculator.py with coverage percentage
Best Practices:
Use pytest fixtures if needed
Keep tests isolated and independent
Use clear and descriptive test function names
Run coverage only on the target module, not tests
Automated Solution
PyTest
import subprocess
import sys
import os

# Step 1: Install pytest-cov
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'pytest-cov'])

# Step 2: Create calculator.py
calculator_code = '''
def add(a, b):
    return a + b
'''
with open('calculator.py', 'w') as f:
    f.write(calculator_code)

# Step 3: Create test_calculator.py
test_code = '''
import calculator

def test_add():
    assert calculator.add(2, 3) == 5
'''
with open('test_calculator.py', 'w') as f:
    f.write(test_code)

# Step 4: Run pytest with coverage
result = subprocess.run([
    sys.executable, '-m', 'pytest', '--cov=calculator', '--cov-report=term', 'test_calculator.py'
], capture_output=True, text=True)

# Step 5: Print output
print(result.stdout)

# Assert coverage report presence
assert 'coverage' in result.stdout.lower() or '100%' in result.stdout, 'Coverage report not found in output'

# Assert test passed
assert '1 passed' in result.stdout, 'Test did not pass as expected'

# Cleanup created files
os.remove('calculator.py')
os.remove('test_calculator.py')

This script automates the setup and verification of pytest-cov coverage reporting.

First, it installs pytest-cov using pip to ensure coverage measurement is available.

Then, it creates a simple Python module calculator.py with an add function.

Next, it writes a test file test_calculator.py that tests the add function using pytest.

It runs pytest with the --cov=calculator option to measure coverage only on the calculator module and requests a terminal coverage report.

The script captures and prints the test run output, then asserts that the coverage report and test pass message appear in the output.

Finally, it cleans up the created files to keep the environment tidy.

This approach ensures the coverage tool is correctly installed, the test runs successfully, and coverage is reported as expected.

Common Mistakes - 4 Pitfalls
Not installing pytest-cov before running coverage
Running coverage on test files instead of source files
Not asserting coverage report presence in automated tests
Hardcoding file paths without cleanup
Bonus Challenge

Now add data-driven testing with 3 different input pairs for the add function

Show Hint

Practice

(1/5)
1. What is the main purpose of using pytest-cov in testing?
easy
A. To speed up test execution time
B. To measure how much of your code is tested by your tests
C. To automatically fix failing tests
D. To generate test data automatically

Solution

  1. Step 1: Recall pytest-cov's core function

    pytest-cov is a plugin that tracks which parts of your code are executed during tests.
  2. Step 2: Eliminate incorrect options

    Only To measure how much of your code is tested by your tests correctly describes coverage measurement, others describe unrelated features.
  3. Final Answer:

    To measure how much of your code is tested by your tests -> Option B
  4. Quick Check:

    pytest-cov measures coverage = A [OK]
Hint: Remember: cov means coverage, it shows tested code parts [OK]
Common Mistakes:
  • Confusing coverage with test speed
  • Thinking pytest-cov fixes tests
  • Assuming it generates test data
2. Which command correctly installs the pytest-cov plugin?
easy
A. pip install pytest-cov
B. pip install pytest_cov
C. pip install pytestcov
D. pip install pytest coverage

Solution

  1. Step 1: Recall the exact package name

    The official package name is 'pytest-cov' with a hyphen.
  2. Step 2: Compare options with correct spelling

    Only pip install pytest-cov matches the correct package name and syntax.
  3. Final Answer:

    pip install pytest-cov -> Option A
  4. Quick Check:

    Correct package name = B [OK]
Hint: Use hyphen, not underscore or spaces in package name [OK]
Common Mistakes:
  • Using underscore instead of hyphen
  • Adding spaces in package name
  • Misspelling the package name
3. What will be the output when running pytest --cov=my_module if all code in my_module is covered by tests?
medium
A. Tests will fail automatically
B. An error saying coverage data not found
C. No coverage report is shown
D. A coverage report showing 100% coverage for my_module

Solution

  1. Step 1: Analyze the pytest --cov command

    The command runs tests and measures coverage for 'my_module'.
  2. Step 2: Determine output for 100% coverage

    If all code is tested, coverage report shows 100% coverage.
  3. Final Answer:

    A coverage report showing 100% coverage for my_module -> Option D
  4. Quick Check:

    Full coverage means 100% report = A [OK]
Hint: Full coverage means report shows 100% coverage [OK]
Common Mistakes:
  • Expecting errors when coverage is full
  • Thinking coverage report is hidden by default
  • Assuming tests fail if coverage is 100%
4. You run pytest --cov=my_module --cov-report=html but no HTML report is generated. What is the most likely cause?
medium
A. You forgot to install pytest-cov plugin
B. You did not specify the module name correctly
C. The HTML report is generated in a different folder
D. The tests did not run at all

Solution

  1. Step 1: Check common reasons for missing HTML report

    pytest-cov generates HTML reports in a folder named 'htmlcov' by default.
  2. Step 2: Understand report location

    The report is generated but may be in a folder you did not check.
  3. Final Answer:

    The HTML report is generated in a different folder -> Option C
  4. Quick Check:

    HTML report folder = C [OK]
Hint: Check 'htmlcov' folder for HTML report after running tests [OK]
Common Mistakes:
  • Assuming plugin is not installed without checking
  • Thinking report is shown in terminal only
  • Believing tests must fail to generate report
5. You want to measure coverage for multiple modules mod1 and mod2 and generate both terminal and HTML reports. Which command is correct?
hard
A. pytest --cov=mod1,mod2 --cov-report=term --cov-report=html
B. pytest --cov=mod1 --cov-report=term --cov=mod2 --cov-report=term
C. pytest --cov=mod1 mod2 --cov-report=term,html
D. pytest --cov=mod1 --cov=mod2 --cov-report=term --cov-report=term

Solution

  1. Step 1: Understand multiple module coverage syntax

    pytest-cov accepts multiple modules separated by commas in a single --cov option.
  2. Step 2: Understand multiple report formats syntax

    Multiple reports are specified by repeating the --cov-report flag, e.g., --cov-report=term --cov-report=html.
  3. Final Answer:

    pytest --cov=mod1,mod2 --cov-report=term --cov-report=html -> Option A
  4. Quick Check:

    Comma for modules, repeat --cov-report = D [OK]
Hint: Use commas to list modules in one --cov option [OK]
Common Mistakes:
  • Using multiple --cov options instead of comma separation
  • Combining modules without commas
  • Incorrectly combining report types in one option