Testing Python teaches you how to use Unit Testing and Test-Driven Development to build clean, flexible Python programs that work in an Enterprise environment. Python's dynamic nature and vast range of external libraries make it a great choice for developers, but they also make it natural fit for Unit Testing and TDD.
Learn about:
* Unit testing and unit test tools
* Testable documentation
* Test-driven development
* Acceptance testing and acceptance testing tools
* Performance testing
* Looking after Lint
* Continuous testing
* Smoke testing
About the Author
David Sale (London, UK) is a software developer working for BSkyB, working predominantly with Python and Ruby. He writes about technology for Nettuts+.
Table of Contents: Introduction
CHAPTER 1 A History of Testing
You Do Test, Don't You?
Fundamentals and Best Practices
Python Installation
Linux
Mac
Windows
Pip
Virtualenv
Source Control (SVN, Git)
Interactive Development Environment (IDE)
Summary
CHAPTER 2 Writing Unit Tests
What Is Unit Testing?
What Should You Test?
Writing Your First Unit Test
Checking Values with the assertEquals Method
Checking Exception Handling with assertRaises
Following the PEP-8 Standard
Unit Test Structure
Additional Unit Test Examples
Getting Clever with assertRaises
Making Your Life Easier with setUp
Useful Methods in Unit Testing
Summary
CHAPTER 3 Utilizing Unit Test Tools
Using Python's Nose
Installing Nose
Using Nose's Best Features
Running Specifi c Test Files
Getting More Detail with Verbose
Debugging Support with PDB
Checking Your Coverage
Coloring your tests with Rednose
PyTest: An Alternative Test Runner
Installing PyTest
PyTest's Best Features
Running Specifi c Tests
Viewing Detail with Verbose and Summary
Debugging with PDB
Checking Your Coverage with PyTest
Choosing Between Nose and PyTest
Mock and Patch Tricky Situations
Installing the Mock Library
Mocking a Class and Method Response
When Mock Won't Do, Patch!
The Requests Library
Patch in Action
Advanced Mocking
Summary
CHAPTER 4 Writing Testable Documentation
Writing Your First Doctest
Th e Python Shell
Adding Doctests to a Method
Running Your Doctests
Handling Error Cases
Advanced Doctest Usage
Improving Doctests with Nose Integration
Summary
Resources
CHAPTER 5 Driving Your Development with Tests
Agile Development
Adopting the Agile Process Now
Ethos of Test Driven Development
Advantages of Test Driven Development
Ping-Pong Programming
Test Driving Your Problem
Writing Your Failing Test
Making Your Test Pass
Driving More Features with Tests
Wrapping Up the Task
Summary
Resources
CHAPTER 6 Writing Acceptance Tests
What Is Acceptance Testing?
Anatomy of an Acceptance Test
Using Gherkin Syntax
Th e Magic Is in the Step File
Goals of Acceptance Testing
Implementing Developer and QA Collaboration
Letting Behavior Drive Your Problem
Writing Your Failing Acceptance Test
Defining Your Steps
Implementing Your Code
Developing More of the Feature
bank_apppy
indexhtml
Delivering the Finished Article
Advanced Acceptance Test Techniques
Scenario Outline
Tables of Data in Scenarios
Summary
Resources
CHAPTER 7 Utilizing Acceptance Test Tools
Cucumber: The Acceptance Test Standard
Lettuce in Detail
Tagging
Fail Fast
Nosetest Integration
Robot: An Alternative Test Framework
Installing Robot
Writing a Test Case
Implementing Keywords
Running Robot Tests
Summary
Resources
CHAPTER 8 Maximizing Your Code's Performance
Understanding the Importance of Performance Testing
JMeter and Python
Installation
Configuring Your Test Plans
Utilizing Your Test Plans Effectively
Code Profiling with cProfile
Run a cProfile Session
Analyzing the cProfile Output
Summary
Resources
CHAPTER 9 Looking After Your Lint
Coming to Grips with Pylint
Installing Pylint
Using Pylint
Understanding the Pylint Report
The Module Block
The Messages by Category Section
The Messages Section
The Code Evaluation Score
The Raw Metrics Section
The Statistics by Type Section
Customizing Pylint's Output
Telling Pylint to Ignore Errors
Covering All Your Code with Unit Tests
Installing Coverage
Using Coverage
Advanced Coverage Options
Producing an HTML/XML Report
Setting a Minimum Coverage Threshold
Restricting Coverage to a Specific Package
Ignoring Coverage
Summary
Resources
CHAPTER 10 Automating Your Processes
Build Paver Tasks
Installing Paver
Creating a Paver Task
Executing Paver Tasks
Defi ning a Default Build
Setting Up Automated Builds
Installing Jenkins
Adding Coverage and PyLint Reports
Generating a PyLint Report
Generating a Coverage Report
Making Your Build Status Highly Visible
Summary
Resources
CHAPTER 11 Deploying Your Application
Deploying Your Application to Production
Creating a Deployable Artifact
Defining the Paver Tasks
Incorporating Packaging into the Build
Enabling Archiving on Jenkins
QA Environment
Implementing Stage and Production Environments
Implementing a Cloud Deployment
Creating a Heroku Account
Creating a Small Application
Setting up Git for Heroku
Deploying the Application to Heroku
Smoke Testing a Deployed Application
Example Application Stack
Smoke Test Scenarios
Implementing Smoke Tests
Summary
Resources
CHAPTER 12 The Future of Testing Python
Stub the Solution
Making Deployment Natural
Automating (Nearly) Everything
Working in Public
Collaborating on Step Definitions
Final Thoughts
Resources
Index