Python Testing

  1. The pytest Framework
    1. Introduction to pytest
      1. Overview and Philosophy
        1. Advantages over unittest
          1. Simpler Syntax
            1. Rich Plugin Ecosystem
              1. Powerful Fixtures
                1. Better Error Reporting
                2. Installation and Setup
                  1. Installing via pip
                    1. Verifying Installation
                      1. Configuration Files
                    2. Writing Basic Tests
                      1. Test Discovery Conventions
                        1. File and Function Naming
                          1. Directory Structure
                            1. Test Collection Rules
                            2. Simple assert Statements
                              1. Using Python's Built-in assert
                                1. Enhanced Failure Reporting
                                  1. Assertion Introspection
                                  2. Test Function Structure
                                    1. Function-Based Tests
                                      1. Test Documentation
                                    2. pytest Fixtures
                                      1. Purpose of Fixtures
                                        1. Managing Test State
                                          1. Sharing Setup Across Tests
                                            1. Dependency Injection
                                            2. Creating and Using Fixtures
                                              1. The @pytest.fixture Decorator
                                                1. Injecting Fixtures into Tests
                                                  1. Fixture Return Values
                                                  2. Fixture Scope
                                                    1. function Scope
                                                      1. class Scope
                                                        1. module Scope
                                                          1. session Scope
                                                            1. Scope Selection Guidelines
                                                            2. Fixture Dependencies
                                                              1. Fixture Composition
                                                                1. Nested Fixtures
                                                                  1. Fixture Ordering
                                                                  2. Built-in Fixtures
                                                                    1. tmp_path
                                                                      1. Temporary File and Directory Management
                                                                        1. Path Object Usage
                                                                        2. tmp_path_factory
                                                                          1. Session-Scoped Temporary Paths
                                                                          2. capsys
                                                                            1. Capturing Standard Output and Error
                                                                              1. Reading Captured Output
                                                                              2. capfd
                                                                                1. File Descriptor Capture
                                                                                2. monkeypatch
                                                                                  1. Modifying Environment and Attributes
                                                                                    1. Patching Functions and Classes
                                                                                    2. request
                                                                                      1. Accessing Test Request Information
                                                                                        1. Fixture Introspection
                                                                                    3. Markers
                                                                                      1. Marking Tests
                                                                                        1. @pytest.mark.skip
                                                                                          1. @pytest.mark.skipif
                                                                                            1. @pytest.mark.xfail
                                                                                              1. Marker Arguments
                                                                                              2. Creating Custom Markers
                                                                                                1. Defining Custom Markers in pytest.ini
                                                                                                  1. Applying Custom Markers
                                                                                                    1. Marker Documentation
                                                                                                    2. Selecting Tests with Markers
                                                                                                      1. Running Subsets of Tests
                                                                                                        1. Using the -m Option
                                                                                                          1. Complex Marker Expressions
                                                                                                        2. Parametrizing Tests
                                                                                                          1. @pytest.mark.parametrize
                                                                                                            1. Writing Parameterized Test Functions
                                                                                                              1. Multiple Parameter Sets
                                                                                                                1. Parameter IDs
                                                                                                                2. Parametrizing Fixtures
                                                                                                                  1. Using params in Fixtures
                                                                                                                    1. Sharing Parameterized Fixtures
                                                                                                                      1. Indirect Parametrization
                                                                                                                      2. Dynamic Parametrization
                                                                                                                        1. pytest_generate_tests Hook
                                                                                                                          1. Runtime Parameter Generation
                                                                                                                        2. Testing for Expected Exceptions
                                                                                                                          1. pytest.raises
                                                                                                                            1. Using as a Context Manager
                                                                                                                              1. Asserting Exception Messages
                                                                                                                                1. Exception Type Validation
                                                                                                                                2. Exception Information Access
                                                                                                                                  1. ExceptionInfo Objects
                                                                                                                                    1. Exception Attributes
                                                                                                                                  2. pytest Configuration
                                                                                                                                    1. Configuration Files
                                                                                                                                      1. pytest.ini
                                                                                                                                        1. pyproject.toml
                                                                                                                                          1. setup.cfg
                                                                                                                                          2. Command Line Options
                                                                                                                                            1. Common Options
                                                                                                                                              1. Custom Options
                                                                                                                                              2. Environment Variables
                                                                                                                                                1. PYTEST Environment Variables
                                                                                                                                                  1. Custom Environment Configuration
                                                                                                                                                2. pytest Plugins
                                                                                                                                                  1. Finding and Installing Plugins
                                                                                                                                                    1. Searching the Plugin Index
                                                                                                                                                      1. Installing via pip
                                                                                                                                                        1. Plugin Dependencies
                                                                                                                                                        2. Common Plugins
                                                                                                                                                          1. pytest-cov
                                                                                                                                                            1. Measuring Test Coverage
                                                                                                                                                              1. Coverage Configuration
                                                                                                                                                              2. pytest-mock
                                                                                                                                                                1. Simplifying Mocking with Fixtures
                                                                                                                                                                  1. Mock Integration
                                                                                                                                                                  2. pytest-xdist
                                                                                                                                                                    1. Running Tests in Parallel
                                                                                                                                                                      1. Distributed Testing
                                                                                                                                                                      2. pytest-html
                                                                                                                                                                        1. HTML Test Reports
                                                                                                                                                                          1. Report Customization
                                                                                                                                                                        2. Writing Custom Plugins
                                                                                                                                                                          1. Plugin Structure
                                                                                                                                                                            1. Hook Implementation
                                                                                                                                                                              1. Plugin Distribution