I’m trying to build a test framework for automated web testing in Selenium and unittest, and I want to structure my tests into distinct scripts.
So I’ve organised it as following:
File base.py – this will contain, for now, the base Selenium test case class for setting up a session.
import unittest from selenium import webdriver # Base Selenium Test class from which all test cases inherit. class BaseSeleniumTest(unittest.TestCase): def setUp(self): self.browser = webdriver.Firefox() def tearDown(self): self.browser.close()
File main.py – I want this to be the overall test suite from which all the individual tests are run.
import unittest import test_example if __name__ == "__main__": SeTestSuite = test_example.TitleSpelling() unittest.TextTestRunner(verbosity=2).run(SeTestSuite)
File test_example.py – an example test case. It might be nice to make these run on their own too.
from base import BaseSeleniumTest # Test the spelling of the title class TitleSpelling(BaseSeleniumTest): def test_a(self): self.assertTrue(False) def test_b(self): self.assertTrue(True)
The problem is that when I run main.py, I get the following error:
Traceback (most recent call last): File "H:Pythontestframeworkmain.py", line 5, in <module> SeTestSuite = test_example.TitleSpelling() File "C:Python27libunittestcase.py", line 191, in __init__ (self.__class__, methodName)) ValueError: no such test method in <class 'test_example.TitleSpelling'>: runTest
I suspect this is due to the very special way in which unittest
runs and I must have missed a trick on how the docs expect me to structure my tests. Any pointers?
Advertisement
Answer
I am not 100% sure, but in main.py
, you might need a:
SeTestSuite = unittest.defaultTestLoader.discover(start_dir='.')
And the runner line should be (maybe):
# If your line didn't work unittest.TextTestRunner(verbosity=2).run(unittest.TestSuite(SeTestSuite))