今天開始批量執行用例~,場景是這樣的: 工作中我們可能有多個模塊文件(.py)這些文件根據不同的業務類型或功能,測試案例分佈在不同的模塊文件下。前面的小示例中,我們的測試用例都是在一個文件中,直接運行的測試套件~,開發階段或者調試階段這樣做是沒毛病的,但是如果是測試運行階段,我們不可能這個模塊文件下 ...
今天開始批量執行用例~,場景是這樣的:
工作中我們可能有多個模塊文件(.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
-------------來自自學的總結,希望對大家有幫助,不會的朋友可以留言,一起進步~~~~~秋天來了,註意季節轉換,容易生病~~~~~~貼秋膘