Unittest学習(五)------テストキット

3177 ワード

unittestのTestSuitesプロパティを適用すると、異なるテストを論理グループに構成し、統一されたテストキットを設定し、コマンドでテストを実行できます.これは、TestSuites、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クラスは、テストスイートを呼び出すことで、ファイル内のすべてのテストを実行します.