廣西中國建設銀行網(wǎng)站首頁百度網(wǎng)站收錄提交
unittest框架
1)測試固件
1)setUp()是用來初始化測試環(huán)境所做的工作
2)tearDown()是用來清理環(huán)境所做的工作
2)測試套件
把不同的測試腳本,不同類中的測試用例給組織起來放到一個測試套中執(zhí)行
3)測試用例的要以test_開頭
4)如何使用unittest框架
只需要在腳本中定義一個類,繼承于unittest.TestCase即可
verbosity是一個選項,表示測試結(jié)果的信息復雜度,有0、1、2 三個值 0 (靜默模式): 你只能獲得總的測試用例數(shù)和總的結(jié)果 比如 總共10個 失敗2 成功8 1 (默認模式): 非常類似靜默模式 只是在每個成功的用例前面有個“.” 每個失敗的用例前面有個 “F” 2 (詳細模式):測試結(jié)果會顯示每個測試用例的所有相關的信息
創(chuàng)建兩個類進行測試:
from selenium import webdriver import unittest import time import os class Baidu1(unittest.TestCase): # 測試固件def setUp(self):print("-----setUp----")self.driver=webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe")self.url="http://www.baidu.com/"self.driver.maximize_window()time.sleep(3)def tearDown(self):print("------tearDown----")self.driver.quit()# 測試用例 忽略測試用例的執(zhí)行# @unittest.skip("skipping")def test_hao(self):driver=self.driverurl=self.urldriver.get(url)driver.find_element_by_link_text("hao123").click()time.sleep(3);def test_hbaidu(self):driver=self.driverurl=self.urldriver.get(url)driver.find_element_by_id("kw").send_keys("突如其來的假期")time.sleep(3)driver.find_element_by_id("su").submit()print(driver.title)self.savescreenAsPhoto(driver,".jpg")time.sleep(5)def savescreenAsPhoto(self,driver,file_name):if not os.path.exists("./image"):os.makedirs("./image")now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time()))driver.get_screenshot_as_file("./image/"+now+"-"+file_name)time.sleep(3)if __name__ == "__main":unittest.main()
# coding = utf8 from selenium import webdriver import unittest import time # 導入By模塊 from selenium.webdriver.common.by import By from selenium.common.exceptions import NoAlertPresentException from selenium.common.exceptions import NoSuchElementException class TestBaiduTwo(unittest.TestCase):def setUp(self):#獲得瀏覽器的驅(qū)動self.driver=webdriver.Chrome()#讓瀏覽器窗口最大化self.driver.implicitly_wait(3)self.base_url="http://www.baidu.com/"self.driver.maximize_window()self.array=[]self.flag = Truedef tearDown(self):self.driver.quit()self.assertEqual([],self.array)def test_hao(self):driver=self.driverdriver.get(self.base_url)driver.find_element_by_link_text("新聞").click()time.sleep(3)def test_baidusearch(self):driver=self.driverdriver.get(self.base_url)driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys("慶余年")driver.find_element_by_id("su").click()#選擇通過什么方式來進行獲取元素,value是什么屬性self.is_element_present(By.ID, "su").click()time.sleep(3)def is_element_present(self,how,what):try:element=self.driver.find_element(by=how,value=what)except NoSuchElementException as e:return elementreturn elementdef is_alert_present(self):try:self.driver.switch_to.alert()except NoAlertPresentException as e:return Falsereturn Truedef close_alert_and_get_its_text(self):try:#獲取到alert彈出框alert=self.driver.switch_to_alert()#獲取到alert彈出框中的文字alert_text=alert.textif self.flag:alert.accept()else:alert.dismiss()return alert_textfinally:self.flag = Trueif __name__ == "__main__":unittest.main(verbosity=2)
1)以test_開頭命名的方法,是測試方法,在運行整個類的時候會默認執(zhí)行。
2)unittest提供了全局的main()方法,使用它可以方便地將一個單元測試模塊變成可以直接運行的測試腳本main()方法搜索所有包含在該模塊中以”test"命名的測試方法,并自動執(zhí)行他們
unittest里面有四個很重要的概念,test fixture,test case,test suite,test runner
Test Fixture
1)對一個測試用例環(huán)境的搭建和銷毀,就是一個fixture,通過覆蓋setUp()和tearDown()方法來實現(xiàn),setUp()方法可以進行測試環(huán)境的搭建,比如獲取待測試瀏覽器的驅(qū)動,或者如果測試中需要訪問數(shù)據(jù)庫,那么可以在setUp()中通過建立數(shù)據(jù)庫連接來進行初始化
2)tearDown()方法進行環(huán)境的銷毀,可以進行關閉瀏覽器,關閉數(shù)據(jù)庫連接,清除數(shù)據(jù)庫中產(chǎn)生的數(shù)據(jù)等操作;
Test Case
一個TestCase的實例就是一個測試用例,測試用例就是一個完整的測試流程,包括測試前準備環(huán)境的搭建(setUp)實現(xiàn)測試過程的代碼,以及測試后環(huán)境的還原(tearDown)單元測試(unit test)的本質(zhì)就在這里一個測試用例,就是一個完整的測試單元,可以對某一個功能進行驗證TestSuite
一個功能的驗證往往需要多個測試用例,可以把多個測試用例集合在一起執(zhí)行,這個就產(chǎn)生了測試套件TestSuite的概念,Test Suit用來將多個測試用例組裝在一起;
test Runner
test Runner測試的執(zhí)行也是非常重要的一個概念,在unittest框架中,通過TextTestRunner類提供的run()方法來執(zhí)行test suite/test case
?
addTest()
1)TestSuite類的addTest()方法可以把不同的測試類中的測試方法組裝到測試套件中,但是addTest()一次
2)只能把一個類里面的一個測試方法組裝到測試套件中?但是上述做法有兩個不方便的地方,阻礙腳本的快速執(zhí)行,必須每次修改testsuite.py:
1)需要導入所有的相關的py文件,比如 import testbaidu1,每新增一個腳本就需要導入一個
2)addTest一次只能增加一個測試方法,如果一個py文件中有10個測試方式,如果都要組裝到測試套件中,就需要增加10次import unittestimport TestBaiduOne import TestBaiduTwodef createsuite():suite = unittest.TestSuite()suite.addTest(TestBaiduOne.Baidu1("test_hao"))suite.addTest(TestBaiduTwo.Baidu2("test_baidusearch"))suite.addTest(TestBaiduTwo.Baidu2("test_hao"))return suite if __name__=="__main__":suite= createsuite()runner=unittest.TextTestRunner(verbosity=2)runner.run(suite)
跑測試套件用例步驟:
1)先進行生成測試套件
2)得到跑測試套件的runner
3)用runner去跑測試套件
?
把一個類中的所有測試用例都添加到一個測試套件里面
1)使用unittest.makeSuite()
def createsuite():suit=unittest.TestSuitesuit.addTest(unittest.makeSuite(TestBaiduOne.Baidu1))suit.addTest(unittest.makeSuite(TestBaiduTwo.Baidu2))return suite if __name__=="__main__":suite= createsuite()runner=unittest.TextTestRunner(verbosity=2)runner.run(suite)
?