Selenium is a browser interaction testing tool. It has very nice methods and built in functionality to test user interaction on the web. But it also has it’s limitations. We can’t test pre-conditions and post-conditions, check that expected and actual output comes same, check the state of application and report results. For doing so, we need to use the unit testing framework, along with Selenium.
Python provides us an inbuilt unit testing library that we can use to test using Selenium webdriver. This unit testing library is the unittest
library provided by Python.
UNITTEST FRAMEWORK
The unittest
framework in Python , originally named PyUnit, is based on the JUnit unit testing framework in Java. If you want to know about the unit testing frameworks, and how it all started, you can go to this link. Kent Beck, was the first person who designed the first unit testing framework for Smalltalk language.
The unittest
module can be used within the Python script to test various standard library modules, including the unittest
module itself.
unittest
lets us create and arrange our tests, by helping us breaking down the Python program/script in smaller, distinct and manageable blocks of code, or in simple words, it breaks down the program/script in to smaller components, which makes it better to understand and manage. The components are :
- Test Fixture :
- Test Case :
- Test Suite :
- Test Runner :
- Test Report
A unit testing framework like Python’s unittest
framework, is based on principle of three A’s-
- Arrange : Setting up the pre-requisites for the test
- Act : Exercise the main functionality of test
- Assert : Checks whether the outcome is expected or not.
Using the TestCase
Class to Design A Test Case
Using Python’s unit test framework, unittest
, we can create a test, or a group of tests, by inheriting the TestCase
class. We can then add each test as a method of that class.
Basically , what we want to do in the test is this
- Add a test fixture– that is the
setUp( )
andtearDown( )
methods to handle the creation and destroying any objects or conditions created for use in the test. - Adding an Assert to check the out come : In between the test fixtures, we need to add any one of the variations of the Assert method, to check the outcome of the test. This may include using
assertEqual( )
to check for a condition,assertTrue( )
to verify a condition orassertRaises( )
to verify that an exception gets raised in case a test fails.
Let us see a simple example of a simple python script using the unittest
framework.