框架构建(4):基于UnitTest测试框架,编写测试用例

下面正式编写测试用例。先看一下基于UnitTest测试用例的结构:

import unittest
class TestViewPage(unittest.TestCase):
    def setUp(self):
        #运行测试用例前的初始化操作

    def test_xx(self):
        #测试用例

    def tearDown(self):
        #测试执行后,清空测试环境

分析:

在执行web测试时,我们都需要使用浏览器打开一个url,如果需要登陆的话,还要登陆相应角色的用户后,才能正常开始执行测试。因此,setUp部分,我们需要填写打开浏览器,打开指定url,以及登陆用户名密码。而tearDown部分一般则是关闭浏览器操作。

那么现在我们可以基于上一节写的login_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方法应用到测试用例中了。现在假设我们需要写一个点击菜单(测试管理-》浏览测试报告)并打开相应页面的测试用例, 首先我们创建一个\src\pages\menu.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()来启动当前测试用例,直接F5运行测试用例即可

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

 

你可能感兴趣的:(Web,UI,Automation,Test)