1. Testing in Python
    1. The software testing equasion
    2. The software testing equasion (fixed)
    3. Manual testing
    4. Traditional Organizations
    5. Quality Assurance
    6. Web age Organizations
    7. TDD vs Testing as an Afterthought
    8. Why test?
    9. Testing Modes
    10. Testing Applications
    11. Testing What to test?
    12. Testing in Python
    13. Testing Environment
    14. Testing Setup - Fixture
    15. Testing Resources
    16. The plan of this course
    17. The pieces of your software?
    18. Continuous Integration (CI)
    19. pre-commit
  2. AUT - Application Under Test
    1. mymath module
    2. Fibonacci module
    3. Use the mymath module
    4. Manually test the mymath module
    5. Use the Fibonacci module
  3. Testing with doctest
    1. Doctest for good module
    2. Doctest for bad module
    3. Doctest for bad module with failure
  4. Testing with unittest
    1. Test the mymath module
    2. Each test case in its own method
    3. Test the Fibonacci
    4. Test the Fibonacci failure
    5. Test the Fibonacci separated
    6. Test the Fibonacci failure separated
    7. TODO Testing - skeleton
    8. TODO Testing
    9. TODO Test examples
  5. Testing with PyTest
    1. Pytest features
    2. Pytest setup
    3. Testing good module with functions
    4. Testing good module with class and methods
    5. Pytest - passing test for the Fibonacci function
    6. Pytest - failing test for the Fibonacci in one function
    7. Pytest - failing test separated
    8. Pytest run all the good test files
    9. Pytest run all the bad test files
    10. Exercise: test simple module (math)
    11. Solution: test simple module (math)
  6. Pytest basic command line options
    1. Getting help for pytest
    2. Verbose mode
    3. Quiet mode
    4. Print STDOUT and STDERR using -s
    5. Pytest: show extra test summmary info with -r
  7. Pytest expected exception
    1. Pytest a nice Fibonacci example
    2. Pytest testing Fibonacci
    3. Using Fibonacci
    4. Pytest expected exception
    5. Pytest testing expected exception
    6. Pytest Change the text of the exception
    7. Pytest Missing exception
    8. Pytest Other exception is raised
    9. Pytest No exception is raised
    10. Exercise: test more exceptions
    11. Solution: test more exceptions
    12. Another Solution: test more exceptions
    13. Exercise: test exeptions in the math functions
    14. Solution: test exeptions in the math functions
  8. Handling failing tests (bugs)
    1. Anagram
    2. Pytest simple tests - success
    3. Pytest simple tests - success output
    4. Pytest simple tests - failure
    5. Pytest simple tests - failure output
    6. Pytest: expect a test to fail (xfail or TODO tests)
    7. Pytest: expect a test to fail (xfail or TODO tests)
    8. PyTest: show xfailed tests with -rx
    9. Fixed Anagram
  9. Multiple test functions - selection
    1. PyTest: Multiple Failures
    2. PyTest: Multiple Failures output
    3. PyTest: stop on first failure
    4. PyTest Selective running of test functions
  10. Pytest: skipping tests
    1. Pytest: Operating System specific test
    2. Pytest: show skipped tests with -rs
    3. Pytest: skipping tests output in verbose mode
  11. Parametrize tests
    1. Parametrize PyTest with pytest.mark.parametrize (len)
    2. Test len without parametrization
    3. Test len with 1 parameter
    4. Test len with 2 parameters
    5. mymath
    6. One test function
    7. Separate test functions
    8. Test cases of mymath
    9. Pytest parameters
    10. Pytest parameters variable
    11. Pytest parameters external data file
    12. Pramatrization matrix
    13. Testing the isalnum method
    14. Parametrize PyTest with multiple parameters
    15. Exercise: parametrize the tests of the math functions
    16. Solution: parametrize the tests of the math functions
  12. Pytest assert
    1. PyTest: failure reports
    2. PyTest: compare numbers
    3. PyTest: compare numbers relatively
    4. PyTest: compare strings
    5. PyTest: compare long strings
    6. PyTest: is one string in another strings?
    7. PyTest: test any expression
    8. PyTest: element in list
    9. PyTest: compare short lists
    10. PyTest: compare short lists - verbose output
    11. PyTest: compare lists
    12. PyTest: compare dictionaries - different values
    13. PyTest: compare dictionaries - missing-keys
  13. PyTest Fixtures
    1. PyTest: What are Fixtures?
    2. Fixtures in Pytest
    3. PyTest: test with functions
    4. PyTest: test with functions outpus
    5. PyTest Fixture setup and teardown xUnit style
    6. PyTest Fixture setup and teardown output
    7. PyTest: Fixture Class setup and teardown
    8. PyTest: Fixture Class setup and teardown output
    9. What is Dependency injection?
    10. Pytest fixture - tmpdir
    11. Pytest and tempdir
    12. Pytest CLI key-value store
    13. Pytest testing key-value store - environment variable
    14. Pytest testing key-value store - environment variable (outside)
    15. Application that prints to STDOUT and STDERR
    16. Pytest capture STDOUT and STDERR with capsys
    17. PyTest - write your own fixture
    18. Pytest Fixture - autouse fixtures
    19. Share fixtures among test files: conftest.py
    20. Manual fixtures (using dependency injection)
    21. Pytest Fixture providing value
    22. Pytest Fixture providing value with teardown
    23. Pytest create fixture with file(s) - app and test
    24. Pytest create fixture with file(s) - helper function
    25. Pytest create fixture with file(s) - fixture
    26. Pytest fixture inject data
    27. Pytest fixture for MongoDB
    28. Pytest parametrized fixture
    29. Pytest parametrized fixture with dependency injection
    30. Pytest parametrized fixture to use Docker
  14. Pytest Mocking
    1. Pytest: Mocking - why?
    2. Pytest: Mocking - what?
    3. Pytest: What is Mocking? - Test Doubles
    4. Pytest: Monkey Patching
  15. Pytest Mocking Hard-coded path
    1. Pytest: Hard-coded path - testing
    2. Pytest: Hard-coded path - manually replace attribute
    3. Pytest: Hard-coded path - monkeypatch attribute
    4. Pytest: Hard-coded path - monkeypatch attribute - tempdir
  16. Pytest: Mocking external API call
    1. Pytest: Mocking external API call - manually replace function
    2. Pytest: Mocking external API call - monkeypatch
    3. Pytest: Mocking broken external API response
  17. Pytest: Mocking STDIN
    1. Pytest: Mocking STDIN manually mocking
    2. Pytest: Mocking STDIN - monkeypatch
  18. Pytest: Mocking random numbes - the application
    1. Pytest: Mocking random numbes
    2. Pytest: Mocking multiple random numbers
  19. Pytest: Mocking time
    1. Pytest: Mocking time (test expiration)
    2. Pytest: mocking specific timestamp with datetime
    3. Pytest: mocking specific timestamp with datetime
    4. Pytest: mocking datetime.date.today
    5. Pytest: mocking datetime date
  20. Pytest: Mocking environment variables
    1. Pytest: Mocking The PATH environment variable
  21. Pytest: One dimensional spacefight
    1. Pytest: Mocking input and output in the game
    2. Pytest: Mocking input and output in the game - no tools
    3. Pytest: Mocking random in the game
    4. Pytest: Mocking random in the game - no tools
  22. Pytest: Mocking - collecting stats example
  23. Flask
    1. Pytest: Flask echo GET
    2. Pytest: testing Flask echo GET
    3. Pytest: Flask echo POST
    4. Pytest: testing Flask echo POST
    5. Pytest: Flask app sending mail
    6. Pytest: Mocking Flask app sending mail
  24. Testing Flask in Docker
    1. Pytest with Docker - application
    2. Pytest with Docker - test internally
    3. Docker to run the Flask app
    4. Pytest with Docker - test
    5. Pytest with Docker - improved
  25. Pytest command line options
    1. PyTest: Run tests in parallel with xdist
    2. PyTest: Order of tests
    3. PyTest: Randomize Order of tests
    4. PyTest: Force default order
    5. PyTest test discovery
    6. Pytest dry-run --collect-only
    7. PyTest test discovery - ignore some tests
    8. PyTest select tests by name
    9. Pytest use markers and select tests using -m
    10. No test selected
    11. Pytest reporting in JUnit, XML, or JSON format
    12. Pytest reporting in JUnit XML format
    13. Pytest reporting in JSON format
    14. Pytest JSON report
    15. Add extra command line parameters to Pytest - conftest - getoption
    16. Add extra command line parameters to Pytest - as a fixture
    17. Add extra command line parameters to Pytest - used in the autouse fixtures
    18. PyTest: Test Coverage
    19. Test coverage with uv
  26. Static Analyzers (Linters)
    1. Pytest and flake8
    2. Pytest and pylint
    3. Pytest and ruff
    4. Pytest and mypy
    5. Black code formatter
  27. Pytest - other
    1. Testing Master Mind
    2. Module Fibonacci
    3. PyTest - assertion
    4. PyTest - failure
    5. PyTest - list
    6. Pytest: monkeypatching time
    7. PyTest: no random order
  28. Another exception example: bank deposit
    1. PyTest expected exceptions (bank deposit)
    2. PyTest expected exceptions (bank deposit) - no exception happens
    3. PyTest expected exceptions (bank deposit) - different exception is raised
    4. PyTest expected exceptions - divide
    5. PyTest expected exceptions output
    6. PyTest expected exceptions (text changed)
    7. PyTest expected exceptions (text changed) output
    8. PyTest expected exceptions (other exception)
    9. PyTest expected exceptions (other exception) output
    10. PyTest expected exceptions (no exception)
    11. PyTest expected exceptions (no exception) output
  29. Other
    1. Exercise: test this app
    2. Exercise: test the csv module
    3. Solution: Pytest test this app
    4. Solution: test the csv module
    5. PyTest using classes
    6. Exercise: module
    7. Exercise: Open Source
    8. Pytest and forking
    9. Exercise: Write tests for script combining files
    10. Solution: Write tests for script combining files
    11. Pytest resources
    12. PyTest compare short lists - output
    13. Anagram on the command line
    14. PyTest testing CLI
  30. Old pages
    1. How to use the module?
    2. Pytest - simple passing test
    3. Pytest failing test in one function - old
    4. Pytest failing test separated - old