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
-------------來自自學的總結,希望對大家有幫助,不會的朋友可以留言,一起進步~~~~~秋天來了,注意季節轉換,容易生病~~~~~~貼秋膘

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM