1. 程式人生 > >python+unittest框架第四天unittest之批量執行案例

python+unittest框架第四天unittest之批量執行案例

  今天開始批量執行用例~,場景是這樣的:

工作中我們可能有多個模組檔案(.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,否則是Flase
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中可以看出有三個引數:以下是百度給大家的輪子~~~自行學習

start_dir :要測試的模組名或測試用例目錄。 pattern='test*.py' :表示用例檔名的匹配原則。星號“*”表示任意多個字元。(test*.py是以test開頭) top_level_dir=None:測試模組的頂層目錄。如果沒頂層目錄(也就是說測試用例不是放在多級目錄中),預設為 None。
原文連結:https://blog.csdn.net/weixin_40569991/article/details/81155145
-------------來自自學的總結,希望對大家有幫助,不會的朋友可以留言,一起進步~~~~~秋天來了,注意季節轉換,容易生病~~~~~~貼秋膘

&n