Unittest学習(五)------テストキット
3177 ワード
unittestのTestSuitesプロパティを適用すると、異なるテストを論理グループに構成し、統一されたテストキットを設定し、コマンドでテストを実行できます.これは、TestSuites、TestLoader、TestRunnerクラスによって実現されます.
TestSuitesの詳細を理解する前に、ホームページを検証するための新しいテストを例プログラムに追加しました.新しく追加したテストと前のテストをテストコンポーネントに入れます.詳細は次のコードを参照してください.
TestSuiteクラスを使用してテストキットを定義および実行します.複数のテストを1つのテストキットに追加することができます.TestSuiteクラスに加えて、TestLoaderとTextTestRunnerを使用してテストキットを作成および実行できます.たとえば、次のようになります.
TestLoaderクラスを使用すると、指定したテストファイル内のすべてのテストメソッドが得られ、テストスイートを作成できます.TestRunnerクラスは、テストスイートを呼び出すことで、ファイル内のすべてのテストを実行します.
TestSuitesの詳細を理解する前に、ホームページを検証するための新しいテストを例プログラムに追加しました.新しく追加したテストと前のテストをテストコンポーネントに入れます.詳細は次のコードを参照してください.
import unittest
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from __builtin__ import classmethod
class HomePageTest(unittest.TestCase):
@classmethod
def setUp(cls):
# create a new Firefox session """
cls.driver = webdriver.Firefox()
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
# navigate to the application home page """
cls.driver.get("http://demo.magentocommerce.com/")
def test_search_field(self):
# check search field exists on Home page
self.assertTrue(self.is_element_present(By.NAME,"q"))
def test_language_option(self):
# check language options dropdown on Home page
self.assertTrue(self.is_element_present
(By.ID,"select-language"))
def test_shopping_cart_empty_message(self):
# check content of My Shopping Cart block on Home page
shopping_cart_icon = \
self.driver.find_element_by_css_selector
("div.header-minicart span.icon")
shopping_cart_icon.click()
shopping_cart_status = \
self.driver.find_element_by_css_selector
("p.empty").text
self.assertEqual("You have no items in your shopping cart.", shopping_cart_status)
close_button = self.driver.find_element_by_css_selector
("div.minicart-wrapper a.close")
close_button.click()
@classmethod
def tearDown(cls):
# close the browser window
cls.driver.quit()
def is_element_present(self, how, what):
"""
Utility method to check presence of an element on page
:params how: By locator type
:params what: locator value
"""
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
if __name__ == '__main__':
unittest.main(verbosity=2)
TestSuiteクラスを使用してテストキットを定義および実行します.複数のテストを1つのテストキットに追加することができます.TestSuiteクラスに加えて、TestLoaderとTextTestRunnerを使用してテストキットを作成および実行できます.たとえば、次のようになります.
import unittest
from searchtests import SearchTests
from homepagetests import HomePageTest
# get all tests from SearchProductTest and HomePageTest class
search_tests = unittest.TestLoader().loadTestsFromTestCase
(SearchTests)
home_page_tests = unittest.TestLoader().loadTestsFromTestCase
(HomePageTest)
# create a test suite combining search_test and home_page_test
smoke_tests = unittest.TestSuite([home_page_tests, search_tests])
# run the suite
unittest.TextTestRunner(verbosity=2).run(smoke_tests)
TestLoaderクラスを使用すると、指定したテストファイル内のすべてのテストメソッドが得られ、テストスイートを作成できます.TestRunnerクラスは、テストスイートを呼び出すことで、ファイル内のすべてのテストを実行します.