僅僅使用Selenium不能實(shí)現(xiàn)執(zhí)行測(cè)試的前置條件,測(cè)試后置條件,對(duì)比預(yù)期結(jié)果和實(shí)際結(jié)果,檢查程序的狀態(tài),生成測(cè)試報(bào)告,創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)等測(cè)試功能。
Unittest使我們具備創(chuàng)建測(cè)試用例,測(cè)試套件,測(cè)試夾具的能力。
用TestCase類來實(shí)現(xiàn)一個(gè)測(cè)試。提供不同類型的assert斷言方法。為一組測(cè)試創(chuàng)建TestSuite。生成HTML格式的測(cè)試報(bào)告。
Test Fixture(測(cè)試夾具):可以定義在單個(gè)或者多個(gè)測(cè)試執(zhí)行之前的準(zhǔn)備工作和測(cè)試執(zhí)行之后的清理工作。
TestCase(測(cè)試用例)
TestSuite(測(cè)試套件):多個(gè)測(cè)試或者測(cè)試用例的集合。
TestRunner(測(cè)試執(zhí)行器):測(cè)試執(zhí)行并生成結(jié)果。
TestReport(測(cè)試報(bào)告):測(cè)試用例執(zhí)行結(jié)果,整體運(yùn)行狀況和運(yùn)行時(shí)間。
斷言方法: assertEqual()? ? ?assertTrue()? ? assertRaises()
setUp(): 一個(gè)測(cè)試用例是從setUp開始執(zhí)行的,可以在測(cè)試開始前做初始化任務(wù),比如:創(chuàng)建瀏覽器實(shí)例,訪問URL,加載測(cè)試數(shù)據(jù)和打開日志文件等。
沒有參數(shù),沒有返回值。
tearDown() 測(cè)試結(jié)束之后用于清楚測(cè)試數(shù)據(jù)。沒有參數(shù),沒有返回值。
我們要給測(cè)試方法命名為以test開頭。這種命名約定通知 test runner 哪個(gè)方法代表測(cè)試方法。 每次執(zhí)行測(cè)試方法之前都會(huì)先執(zhí)行setUp方法,測(cè)試之后執(zhí)行tearDown。如果想要幾個(gè)測(cè)試方法公用同一個(gè)setUp,可以加上@classmethod標(biāo)識(shí)。
修改上一個(gè)簡(jiǎn)單的登陸腳本
# -*- coding: utf-8 -*-
from seleniumimport webdriver
import os
import unittest
class SearchTest(unittest.TestCase):
@classmethod???
? ? def setUpClass(self):
#得到IE驅(qū)動(dòng)的地址
? ? ? ? self.dir = os.path.dirname(__file__)
# dir得到的是python01.py文件所在的位置
? ? ? ? self.ie_driver_path =self.dir +"\IEDriverServer.exe"
? ? ? ? self.driver = webdriver.Ie(self.ie_driver_path)
self.driver.implicitly_wait(30)
self.driver.maximize_window()
self.driver.get("https://www.baidu.com/")
@classmethod
? ? def tearDownClass(self):
self.driver.quit()
def test_search(self):
self.search_filed =self.driver.find_element_by_name("wd")
self.search_filed.clear()
self.search_filed.send_keys(u"炫彩流螢")
self.search_filed.submit()
self.products =self.driver.find_element_by_xpath("http://h3[@class='t']/a").text
self.assertEqual(16, len(self.products))
print self.products
def test_search_num(self):
self.search_filed =self.driver.find_element_by_name("wd")
self.search_filed.clear()
self.search_filed.send_keys(u"星期天")
self.search_filed.submit()
self.numText =self.driver.find_element_by_class_name("nums_text").text
print self.numText
self.assertEqual(16, len(self.numText))
if __name__ =='__main__':
unittest.main(verbosity=2)
我們將用TestSuite類來定義和執(zhí)行測(cè)試套件。我們可以把多個(gè)測(cè)試加入到一個(gè)測(cè)試套件中去。
除了TestSuite類,我們還可以用TestLoader和TextTestRunner來創(chuàng)建和運(yùn)行測(cè)試套件
search_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTest)
smoke_tests = unittest.TestSuite(search_tests)
如果有多個(gè)測(cè)試集。
smoke_tests = unittest.TestSuite( [search_test1, search_test2] )
unittest.TextTestRunner(verbosity=2).run(smoke_tests)