Flying Cat Penguin

ゆるゆる仕事、ソフトウェアテスティング関連のことについて綴ります。

「Learning Selenium Testing Tools with Python」(2014年)を読みながら、Seleniumを触る #2 (unittest導入)

テスト自動化ツールを触る機会が巡ってきたので、体系的にやり方を学ぶためにカキカキ…。
ちなみに…、下記のコードサンプルは、windows10の環境でのコードですので、Linux系統は別途カスタマイズしてください。

今回は、unittestを組み込んでみました。
組み込むことで概念として、新たに「TestRunnner」「TestSuite」「TestCase」も三つが出てきます。

f:id:dandan_611:20200525153410p:plain

この概念を利用することにより、テストケースとしての体裁を持ったスクリプトを作成することができました。

f:id:dandan_611:20200525155842p:plain

また、下記のコードでは、別ファイルでテストケースを定義したものを読み込んでいます。
テストタイプやテストケースとスクリプトを実行スクリプトと分離することでテストケースの再利用もやりやすくなって便利になってきました。(テストケースは全く同じですが…)

コードサンプル

[selenium_search_unittest.py]

import unittest
from selenium import webdriver

# import another testcases file
from import_testcase import ImportTests


class SearchTests(unittest.TestCase):
    def setUp(self): 
        # create a new Chrome session
        self.driver = webdriver.Chrome(executable_path=r'C:/tmp/selenium/chromedriver_win32/chromedriver.exe')
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()
        
        # navigate to page
        self.driver.get("https://www.google.co.jp")

    def test_search_by_keyword_selenium(self):
        # get the search textbox
        self.search_field = self.driver.find_element_by_name("q")
        self.search_field.clear()
        
        # enter search keyword and submit
        self.search_field.send_keys("selenium")
        self.search_field.submit()
        
        # get all the anchor elements which have title and URL displayed
        # currently on result page using find_elements_by_xpath method
        self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3')))

    def test_search_by_keyword_odan(self):
        # get the search textbox
        self.search_field = self.driver.find_element_by_name("q")
        self.search_field.clear()
        
        # enter search keyword and submit
        self.search_field.send_keys("odan")
        self.search_field.submit()
        
        # get all the anchor elements which have title and URL displayed
        # currently on result page using find_elements_by_xpath method
        self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3')))


    def tearDown(self):
        # close the browser window
        self.driver.quit()

def SearchTestsuite():
    # select testcases for SearchTestSuite
    suite = unittest.TestSuite()
    suite.addTest(SearchTests('test_search_by_keyword_selenium'))  
    suite.addTest(SearchTests('test_search_by_keyword_odan'))
    suite.addTest(ImportTests('test_search_by_keyword_selenium'))  
    suite.addTest(ImportTests('test_search_by_keyword_odan'))    
    return suite

if __name__ == '__main__':
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(SearchTestsuite())

    # To run all module tests from command line
    # unittest.main(verbosity=2)

[import_testcase.py]

import unittest
from selenium import webdriver

class ImportTests(unittest.TestCase):
    def setUp(self): 
        # create a new Chrome session
        self.driver = webdriver.Chrome(executable_path=r'C:/tmp/selenium/chromedriver_win32/chromedriver.exe')
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()
        
        # navigate to page
        self.driver.get("https://www.google.co.jp")

    def test_search_by_keyword_selenium(self):
        # get the search textbox
        self.search_field = self.driver.find_element_by_name("q")
        self.search_field.clear()
        
        # enter search keyword and submit
        self.search_field.send_keys("selenium")
        self.search_field.submit()
        
        # get all the anchor elements which have title and URL displayed
        # currently on result page using find_elements_by_xpath method
        self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3')))

    def test_search_by_keyword_odan(self):
        # get the search textbox
        self.search_field = self.driver.find_element_by_name("q")
        self.search_field.clear()
        
        # enter search keyword and submit
        self.search_field.send_keys("odan")
        self.search_field.submit()
        
        # get all the anchor elements which have title and URL displayed
        # currently on result page using find_elements_by_xpath method
        self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3')))


    def tearDown(self):
        # close the browser window
        self.driver.quit()

ちなみに動かすとこんな感じ。

$ python search_unittest.py
test_search_by_keyword_selenium (__main__.SearchTests) ... ok
test_search_by_keyword_odan (__main__.SearchTests) ... ok
test_search_by_keyword_selenium (import_testcase.ImportTests) ... ok
test_search_by_keyword_odan (import_testcase.ImportTests) ... ok

----------------------------------------------------------------------
Ran 4 tests in 61.839s

OK