フレームワーク構築(4):UnitTestテストフレームワークに基づいて、テスト用例を作成する


次に、テスト例を正式に作成します.まず、UnitTestテスト例に基づく構造を見てみましょう.
import unittest
class TestViewPage(unittest.TestCase):
    def setUp(self):
        # 

    def test_xx(self):
        # 

    def tearDown(self):
        # , 

分析:
Webテストを実行するときは、ブラウザを使用してurlを開く必要があります.ログインする必要がある場合は、対応するロールのユーザーにログインしてから、正常にテストを開始する必要があります.したがって、setUpセクションでは、ブラウザを開き、指定したurlを開き、ユーザー名のパスワードをログインする必要があります.一方、tearDownセクションでは、ブラウザを閉じる操作が一般的です.
では、前節で書いたロゴに基づいてpage.py setupを書きます.pyは、urlを開くとログイン操作がsetupに統合されます.pyで.
//src/common/setup.py

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import sys
sys.path.append("../..")
from src.pages.login_page import LoginPage
from config.globalparameter import web_url
from time import sleep

def login(username, password):
    driver = webdriver.Firefox()
    url = web_url
    login_page = LoginPage(driver, url)
    try:
        login_page.open_page()
    except:
        raise e
        
    if EC.title_contains("Sign in")(driver):
        print "Now start to login the web."
  
    login_page.input_username(username)
    login_page.input_password(password)
    login_page.click_login()
    
    ret = login_page.check_username_shown_correct(username)
    if ret == True:
        log.info("Login successfully!")   
    else:
        raise Exception("Failed to login.")
    return driver

if __name__ == '__main__':
    driver = login("username_wang", "passwd_wang") 
    # open the url defined in config/globalparameter.py and use the given username and passwd to login

 
これでsetupをpyのloginメソッドはテスト例に適用されます.次に、クリックメニュー(テスト管理-)を書いてテストレポートを参照し、対応するページのテスト例を開く必要があるとします.まず、srcpagesmenuを作成します.pyを使用して、すべてのページ要素とページ操作を定義します.
//src/pages/menu.py

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
import sys
sys.path.append("../..")
from src.common.BasePage import BasePage

class Menu(BasePage):
    #locator
    # The first level menu TestManagement
    menu_Test_Management_loc = (By.XPATH, '/html/body/div[1]/div/div[2]/ul/li[1]/a')

    # The second level menu View Report
    menu_View_Report_loc = (By.LINK_TEXT, 'View Report')  

    # The ul tag is used to confirm if the report tree is loaded
    ul_report_tree_loc = (By.XPATH, '//ul[@id="report_tree"]')

    # The header text is used to confirm if the report tree is loaded correctly
    header_test_report_loc = (By.XPATH, '/html/body/div[2]/div[1]/div[1]')
    
    def __init__(self, selenium_driver):
        self.driver = selenium_driver

    def move_on_menu_Test_Management(self):
        '''
        move the mouse on menu
        '''
        element = self.find_element(*self.menu_Test_Management_loc)
        ActionChains(self.driver).move_to_element(element).perform()

    def click_menu_View_Report(self):
        self.find_element(*self.menu_View_Report_loc).click()


    def check_report_page_loaded(self, text):
        """
        check if the View Report page is loaded.
        if the given text is included in the given area, return True, otherwise return False
        """
        self.find_element(*self.ul_report_tree_loc)
        return self.check_page_loaded_correct(text, *self.header_test_report_loc)


次に、テスト例/src/test_を作成します.case/test_viewpage.py
//src/test_case/test_viewpage.py

import unittest
from selenium import webdriver
import sys
sys.path.append("../..")
from src.pages.menu import Menu
from src.common.setup import login
from time import sleep


class TestViewPage(unittest.TestCase):
    def setUp(self):
        self.driver = login("username","passwd")        

    def test_viewpage_report(self):
        '''View Page test: View Report'''
        self.menu = Menu(self.driver)
        menu = self.menu
        menu.move_on_menu_Test_Management()
        Print "Click Menu: View Report."
        menu.click_menu_View_Report()
        
        print "Check if the test report page is loaded correctly."
        ret = menu.check_report_page_loaded("Test Report")
        self.assertTrue(ret, msg="Failed to load TestReport page")


    def tearDown(self):
        self.driver.close()

if __name__ == '__main__':
    unittest.main()

試験用例を作成した後、上記のコードに示すようにunittestを通過する試験用例の実行を開始する.main()で現在のテストケースを起動し、直接F 5でテストケースを実行すればよい
if __name__ == '__main__':
    unittest.main()