Python unittest裝飾器實現原理及代碼
更新時間:2020年09月08日 10:09:57 作者:多測師_鄭sir
這篇文章主要介紹了Python unittest裝飾器實現原理及代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
1、前言
前面講到unittest里面setUp可以在每次執(zhí)行用例前執(zhí)行,這樣有效的減少了代碼量,但是有個弊端,比如打開瀏覽器操作,每次執(zhí)行用例時候都會重新打開,這樣就會浪費很多時間。
于是就想是不是可以只打開一次瀏覽器,執(zhí)行完用例再關閉呢?這就需要用到裝飾器(@classmethod)來解決了。
2、@classmethod 裝飾器中的 setUpClass() 和 tearDownClass() 與 setUp() 和 tearDown() 的區(qū)別
- setUp():每個測試 case 運行之前運行
- tearDown():每個測試 case 運行完之后執(zhí)行
- setUpClass():必須使用 @classmethod 裝飾器, 所有 case 運行之前只運行一次
- @是修飾符,classmethod 是 python 里的類方法
- tearDownClass():必須使用 @classmethod 裝飾器, 所有 case 運行完之后只運行一次
import unittest class Test(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("-----開始執(zhí)行用例-----") def setUp(self) -> None: print("執(zhí)行用例準備動作...") def test01(self): print("第一條用例正在執(zhí)行...") def test02(self): print("第二條用例正在執(zhí)行...") def tearDown(self) -> None: print("用例執(zhí)行完結動作...") @classmethod def tearDownClass(cls) -> None: print("-----用例執(zhí)行結束-----") if __name__ == '__main__': unittest.main() #執(zhí)行結果如下: """ -----開始執(zhí)行用例----- 執(zhí)行用例準備動作... 第一條用例正在執(zhí)行... 用例執(zhí)行完結動作... 執(zhí)行用例準備動作... 第二條用例正在執(zhí)行... 用例執(zhí)行完結動作... -----用例執(zhí)行結束----- """
from selenium import webdriver import unittest from time import sleep class DymLogin(unittest.TestCase): @classmethod def setUpClass(cls) -> None: """ 所有的用例只需要執(zhí)行一次打開瀏覽器操作 """ print("Test start...") cls.dr = webdriver.Chrome() cls.dr.get("http://www.duoyoumi.com/") cls.dr.implicitly_wait(10) cls.dr.maximize_window() cls.dr.find_element_by_class_name("login").click() sleep(1) @classmethod def tearDownClass(cls) -> None: sleep(2) cls.dr.quit() print("Test end...") def test_login01(self): """ 賬號密碼都為空 """ self.dr.find_element_by_name("loginName").clear() self.dr.find_element_by_name("loginPwd").clear() self.dr.find_element_by_xpath('//*[@id="loginForm"]/div/div/div/div[2]/div[1]/div[2]').click() #登錄操作 TipsMsg = self.dr.find_element_by_class_name("promptLogin").text self.assertEqual(TipsMsg,"-請輸入登錄賬號!",msg="Test_login01 login exception") def test_login02(self): """ 賬號正確,密碼為空 """ self.dr.find_element_by_name("loginName").clear() self.dr.find_element_by_name("loginPwd").clear() self.dr.find_element_by_name("loginName").send_keys("17779828887") self.dr.find_element_by_xpath('//*[@id="loginForm"]/div/div/div/div[2]/div[1]/div[2]').click() # 登錄操作 TipsMsg = self.dr.find_element_by_class_name("promptLogin").text self.assertEqual(TipsMsg, "-請輸入密碼!", msg="Test_login02 login exception") def test_login03(self): """ 賬號密碼都正確 """ self.dr.find_element_by_name("loginName").clear() self.dr.find_element_by_name("loginPwd").clear() self.dr.find_element_by_name("loginName").send_keys("17779828887") self.dr.find_element_by_name("loginPwd").send_keys("zy295240???") self.dr.find_element_by_xpath('//*[@id="loginForm"]/div/div/div/div[2]/div[1]/div[2]').click() #登錄操作 sleep(2) TipsMsg = self.dr.find_element_by_css_selector("#w_nav_temp_1000 > div.fr.dl > a:nth-child(4)").text self.assertEqual(TipsMsg,"[退出]",msg="Test_login03 login exception") if __name__ == '__main__': unittest.main() #執(zhí)行結果如下 """ Test start... ... Test end... ---------------------------------------------------------------------- Ran 3 tests in 25.253s OK """
3、通過裝飾器跳過某條用例
添加裝飾器(@unittest.skip(""))
import unittest class Test(unittest.TestCase): def setUp(self) -> None: print("---start---") def tearDown(self) -> None: print("---end---") def testbbb(self): print("case testbbb") @unittest.skip("testaaa 被跳過") def testaaa(self): print("case testaaa") if __name__ == '__main__': unittest.main() # 結果如下 s. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK (skipped=1) ---start--- case testbbb ---end---
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
python操作excel的方法(xlsxwriter包的使用)
這篇文章主要為大家詳細介紹了python操作excel的方法,xlsxwriter包的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06Python?3.11.0下載安裝并使用help查看模塊信息的方法
本文給大家介紹Python?3.11.0下載安裝并使用help查看模塊信息的相關知識,首先給大家講解了Python?3.11.0下載及安裝緊接著介紹了在命令行使用help查看模塊信息的方法,感興趣的朋友跟隨小編一起看看吧2022-11-11