python+unittest框架第四天unittest之批量執行案例
阿新 • • 發佈:2019-08-25
今天開始批量執行用例~,場景是這樣的:
工作中我們可能有多個模組檔案(.py)這些檔案根據不同的業務型別或功能,測試案例分佈在不同的模組檔案下。前面的小示例中,我們的測試用例都是在一個檔案中,直接執行的測試套件~,開發階段或者除錯階段這樣做是沒毛病的,但是如果是測試執行階段,我們不可能這個模組檔案下的用例執行完畢後,切換另一個模組中的用例繼續執行。所以我們需要用的批量執行多個模組檔案的測試用例。
首先第一個用例模組的案例是這樣的~
1 import unittest #匯入unittest庫 2 from selenium import webdriver #匯入自動化測試selenium中的webdriver 3 4 class baidu_test_1(unittest.TestCase): #寫一個baidu_test_1 類,繼承unittest中的TestCase類 5 6 @classmethod #方便我們直接呼叫,不需要例項化類的物件直接呼叫 7 def setUp(cls): #所有案例執行前,都先執行該方法,初始化 8 cls.driver = webdriver.Chrome() #例項化一個webdriver物件 9 cls.driver.maximize_window() #最大化瀏覽器視窗 10 cls.driver.implicitly_wait(15) #頁面載入慢的情況,我們設定等待時長15秒 11 cls.driver.get(r'http://www.baidu.com') #開啟百度的首頁 12 13 @classmethod 14 def tearDown(cls): #所有案例執行後,執行該方法 15 cls.driver.quit() #關閉瀏覽器 16 17 '''測試用例''' 18 def test_baidu_lianjie(self): #百度連結測試的用例 19 '''百度首頁:測試新聞連結,跳轉後的連結地址是否正確''' 20 self.driver.find_element_by_link_text('新聞').click() #點選新聞連結後,獲取新聞連結:self.driver.current_url 21 self.assertEqual(self.driver.current_url,'http://news.baidu.com/') #用獲取到的連結,和實際連結做對比,看是不是相等 22 23 '''if __name__ == '__main__'的意思是:當.py檔案被直接執行時,if __name__ == '__main__'之下的程式碼塊將被執行; 24 當.py檔案以模組形式被匯入時,if __name__ == '__main__'之下的程式碼塊不被執行。''' 25 if __name__ == '__main__': 26 unittest.main(verbosity=2)
接下來是第二個用例模組的程式碼:
1 import unittest 2 from selenium import webdriver 3 4 class baidu_test_2(unittest.TestCase): 5 @classmethod 6 def setUp(cls): 7 cls.driver=webdriver.Chrome() 8 cls.driver.maximize_window() 9 cls.driver.implicitly_wait(15) 10 cls.driver.get(r'http://www.baidu.com') 11 12 @classmethod 13 def tearDown(cls): 14 cls.driver.quit() 15 16 def test_baidu_enabled(self): 17 so=self.driver.find_element_by_id('kw') #檢查元素是否可編輯用is_enabled(),可以編輯返回的是True 18 self.assertTrue(so.is_enabled()) #如果返回的是True,那麼就是真真為真~通過 19 20 def test_baidu_sousuo(self): 21 so = self.driver.find_element_by_id('kw') 22 so.send_keys('你好中國') #上面的程式碼選擇了輸入框,這是輸入:send_keys() 23 self.driver.find_element_by_id('su').click() #該方法是模擬點選操作click() 24 print(so.get_attribute('value')) #根據屬性獲取表單中的值get_attribute('value') 25 self.assertEqual(so.get_attribute('value'),'你好中國') #我們用獲取到的值,和我們預期的值做對比,看是否相等 26 27 if __name__ == '__main__': 28 unittest.main(verbosity=2)
注意:測試模組的名稱,前面需要統一,看圖:兩個測試用例模組檔案的名字前面都是test_ 開頭
接下來就是最後一個模組檔案的程式碼,批量執行用例模組中的程式碼:
1 import unittest #匯入unittest 2 import os #匯入前面學習的os庫,方便獲取檔案路徑 3 4 def allTests(): 5 suite=unittest.TestLoader().discover( #例項化測試套件 6 start_dir=os.path.dirname(__file__), #start_dir=該引數是discover()方法中的,後面的引數是需要批量執行的用例模組路徑 7 pattern='test_*.py', #pattern=該引數是discover()方法中的,後面的引數是所有需要執行的用例前面是test_,後半部分用*號代替的.py檔案 8 top_level_dir=None) #top_level_dir=該引數是discover()方法中的,固定格式:top_level_dir=None 9 return suite #記住返回測試套件 10 11 def run(): #執行 12 unittest.TextTestRunner(verbosity=2).run(allTests()) #測試報告 13 14 if __name__ == '__main__': 15 run()
批量執行就是這樣的~~~~
總結:
1、 #檢查元素是否可編輯用is_enabled(),可以編輯返回的是True,否則是Flasestart_dir :要測試的模組名或測試用例目錄。 pattern='test*.py' :表示用例檔名的匹配原則。星號“*”表示任意多個字元。(test*.py是以test開頭) top_level_dir=None:測試模組的頂層目錄。如果沒頂層目錄(也就是說測試用例不是放在多級目錄中),預設為 None。
2、在編輯框中輸入內容用:send_keys()
3、點選按鈕的操作可以用:click()
4、根據屬性獲取表單中的值get_attribute('value') 比如搜尋中的內容
5、獲取當前頁面的url連結地址: driver.current_url 來判斷我們跳轉的頁面是否正確
6、批量執行用例用到的unitest庫中的TestLoader()類,該類中的discover(start_dir, pattern=’test*.py’, top_level_dir=None)方法
discover中可以看出有三個引數:以下是百度給大家的輪子~~~自行學習
原文連結:https://blog.csdn.net/weixin_40569991/article/details/81155145
-------------來自自學的總結,希望對大家有幫助,不會的朋友可以留言,一起進步~~~~~秋天來了,注意季節轉換,容易生病~~~~~~貼秋膘
&n