Test applications, packages, and libraries large and small with pytest, Python's most powerful testing framework. pytest helps you write tests quickly and keep them readable and maintainable. In this fully revised edition, explore pytest's superpowers - simple asserts, fixtures, parametrization, markers, and plugins - while creating simple tests and test suites against a small database application. Using a robust yet simple fixture model, it's just as easy to write small tests with pytest as it is to scale up to complex functional testing. This book shows you how.
pytest is undeniably the best choice for testing Python projects. It's a full-featured, flexible, and extensible testing framework. pytest's fixture model allows you to share test data and setup procedures across multiple layers of tests. The pytest framework gives you powerful features such as assert rewriting, parametrization, markers, plugins, parallel test execution, and clear test failure reporting - with no boilerplate code.
With simple step-by-step instructions and sample code, this book gets you up to speed quickly on this easy-to-learn yet powerful tool. Write short, maintainable tests that elegantly express what you're testing. Speed up test times by distributing tests across multiple processors and running tests in parallel. Use Python's builtin assert statements instead of awkward assert helper functions to make your tests more readable. Move setup code out of tests and into fixtures to separate setup failures from test failures. Test error conditions and corner cases with expected exception testing, and use one test to run many test cases with parameterized testing. Extend pytest with plugins, connect it to continuous integration systems, and use it in tandem with tox, mock, coverage, and even existing unittest tests.
Write simple, maintainable tests quickly with pytest.
Author(s): Brian Okken
Edition: 2
Publisher: Pragmatic Bookshelf
Year: 2022
Language: English
Commentary: Vector PDF
Pages: 264
City: Raleigh, NC
Tags: Debugging; Python; Application Development; Continuous Integration; PyTest; Testing; Test Automation; Test Coverage; Mock Testing
Cover
Table of Contents
Acknowledgments
Preface
Why pytest?
Learn pytest While Testing a Sample Application
How This Book Is Organized
What You Need to Know
Why a Second Edition?
Example Code and Online Resources
Part I—Primary Power
1. Getting Started with pytest
Installing pytest
Running pytest
Review
Exercises
What’s Next
2. Writing Test Functions
Installing the Sample Application
Writing Knowledge-Building Tests
Using assert Statements
Failing with pytest.fail() and Exceptions
Writing Assertion Helper Functions
Testing for Expected Exceptions
Structuring Test Functions
Grouping Tests with Classes
Running a Subset of Tests
Review
Exercises
What’s Next
3. pytest Fixtures
Getting Started with Fixtures
Using Fixtures for Setup and Teardown
Tracing Fixture Execution with –setup-show
Specifying Fixture Scope
Sharing Fixtures through conftest.py
Finding Where Fixtures Are Defined
Using Multiple Fixture Levels
Using Multiple Fixtures per Test or Fixture
Deciding Fixture Scope Dynamically
Using autouse for Fixtures That Always Get Used
Renaming Fixtures
Review
Exercises
What’s Next
4. Builtin Fixtures
Using tmp_path and tmp_path_factory
Using capsys
Using monkeypatch
Remaining Builtin Fixtures
Review
Exercises
What’s Next
5. Parametrization
Testing Without Parametrize
Parametrizing Functions
Parametrizing Fixtures
Parametrizing with pytest_generate_tests
Using Keywords to Select Test Cases
Review
Exercises
What’s Next
6. Markers
Using Builtin Markers
Skipping Tests with pytest.mark.skip
Skipping Tests Conditionally with pytest.mark.skipif
Expecting Tests to Fail with pytest.mark.xfail
Selecting Tests with Custom Markers
Marking Files, Classes, and Parameters
Using “and,” “or,” “not,” and Parentheses with Markers
Being Strict with Markers
Combining Markers with Fixtures
Listing Markers
Review
Exercises
What’s Next
Part II—Working with Projects
7. Strategy
Determining Test Scope
Considering Software Architecture
Evaluating the Features to Test
Creating Test Cases
Writing a Test Strategy
Review
Exercises
What’s Next
8. Configuration Files
Understanding pytest Configuration Files
Saving Settings and Flags in pytest.ini
Using tox.ini, pyproject.toml, or setup.cfg in place of pytest.ini
Determining a Root Directory and Config File
Sharing Local Fixtures and Hook Functions with conftest.py
Avoiding Test File Name Collision
Review
Exercises
What’s Next
9. Coverage
Using coverage.py with pytest-cov
Generating HTML Reports
Excluding Code from Coverage
Running Coverage on Tests
Running Coverage on a Directory
Running Coverage on a Single File
Review
Exercises
What’s Next
10. Mocking
Isolating the Command-Line Interface
Testing with Typer
Mocking an Attribute
Mocking a Class and Methods
Keeping Mock and Implementation in Sync with Autospec
Making Sure Functions Are Called Correctly
Creating Error Conditions
Testing at Multiple Layers to Avoid Mocking
Using Plugins to Assist Mocking
Review
Exercises
What’s Next
11. tox and Continuous Integration
What Is Continuous Integration?
Introducing tox
Setting Up tox
Running tox
Testing Multiple Python Versions
Running tox Environments in Parallel
Adding a Coverage Report to tox
Specifying a Minimum Coverage Level
Passing pytest Parameters Through tox
Running tox with GitHub Actions
Review
Exercises
What’s Next
12. Testing Scripts and Applications
Testing a Simple Python Script
Testing an Importable Python Script
Separating Code into src and tests Directories
Defining the Python Search Path
Testing requirements.txt-Based Applications
Review
Exercises
What’s Next
13. Debugging Test Failures
Adding a New Feature to the Cards Project
Installing Cards in Editable Mode
Debugging with pytest Flags
Re-Running Failed Tests
Debugging with pdb
Combining pdb and tox
Review
Exercises
What’s Next
Part III—Booster Rockets
14. Third-Party Plugins
Finding Plugins
Installing Plugins
Exploring the Diversity of pytest Plugins
Running Tests in Parallel
Randomizing Test Order
Review
Exercises
What’s Next
15. Building Plugins
Starting with a Cool Idea
Building a Local conftest Plugin
Creating an Installable Plugin
Testing Plugins with pytester
Testing Multiple Python and pytest Versions with tox
Publishing Plugins
Review
Exercises
What’s Next
16. Advanced Parametrization
Using Complex Values
Creating Custom Identifiers
Parametrizing with Dynamic Values
Using Multiple Parameters
Using Indirect Parametrization
Review
Exercises
What’s Next
A1. Virtual Environments
A2. pip
Index
– SYMBOLS –
– A –
– B –
– C –
– D –
– E –
– F –
– G –
– H –
– I –
– L –
– M –
– N –
– O –
– P –
– Q –
– R –
– S –
– T –
– U –
– V –
– W –
– X –
– Y –