Installing and managing plugins in PyTest - Automation Script Walkthrough
import subprocess import sys import re import pytest def test_pytest_cov_plugin_installation_and_usage(): # Step 1: Install pytest-cov plugin install_result = subprocess.run([sys.executable, '-m', 'pip', 'install', 'pytest-cov'], capture_output=True, text=True) assert install_result.returncode == 0, f"Failed to install pytest-cov: {install_result.stderr}" # Step 2: Create a simple test file test_code = '''def test_always_passes(): assert True ''' with open('test_sample.py', 'w') as f: f.write(test_code) # Step 3: Run pytest with coverage run_result = subprocess.run([sys.executable, '-m', 'pytest', '--cov=test_sample.py', 'test_sample.py'], capture_output=True, text=True) output = run_result.stdout + run_result.stderr # Step 4: Assertions # Check pytest-cov plugin is mentioned in output assert 'pytest-cov' in output or 'coverage' in output, "pytest-cov plugin output not found" # Check tests passed assert '1 passed' in output, "Test did not pass as expected" # Check coverage report summary presence coverage_pattern = re.compile(r'TOTAL\s+\d+\s+\d+\s+\d+%') assert coverage_pattern.search(output), "Coverage summary not found in output" # Cleanup test file import os os.remove('test_sample.py') if __name__ == '__main__': pytest.main([__file__])
This test script automates the manual test case steps.
First, it installs the pytest-cov plugin using pip via subprocess.run. It asserts the installation succeeded by checking the return code.
Next, it creates a simple test file test_sample.py with one passing test function.
Then, it runs pytest with coverage enabled on that test file, capturing the output.
Assertions check that the plugin output is present, the test passed, and the coverage summary is shown.
Finally, it cleans up the test file to keep the environment clean.
This approach uses subprocess calls to simulate real user commands and verifies outputs, following best practices for plugin management testing.
Now add data-driven testing to verify installation and usage of three different pytest plugins: pytest-cov, pytest-mock, and pytest-html.