亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用selenium+unittest實現web自動化

發布時間:2023-03-02 10:14:47 來源:億速云 閱讀:101 作者:iii 欄目:開發技術

今天小編給大家分享一下怎么使用selenium+unittest實現web自動化的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

創建 test_baidu.py 文件

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2023/2/25
"""
 
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
 
 
class TestBaidu(unittest.TestCase):
 
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.baidu_url = 'https://www.baidu.com'
 
    def test_search_key_unittest(self):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys('unittest')
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)
        title = self.driver.title
        self.assertEqual(title, 'unittest_百度搜索')
 
    def test_search_key_selenium(self):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys('selenium')
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)
        title = self.driver.title
        self.assertEqual(title, 'selenium_百度搜索')
 
    def tearDown(self):
        self.driver.close()
 
 
if __name__ == '__main__':
    unittest.main

對上面的代碼不做過多介紹,都是以 unittest 創建測試類和方法的。方法中的代碼是Selenium 腳本。不過,這里的代碼存在一些問題,我們來一一改進。

首先,觀察代碼可以發現,兩個測試用例中的步驟是一樣的,唯一的區別是搜索的關鍵字和斷言的結果不同。在學習過python模塊化,所以這里把操作步驟封裝成一個方法。

代碼如下:

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2023/2/25
"""
 
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
 
 
class TestBaidu(unittest.TestCase):
 
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.baidu_url = 'https://www.baidu.com'
    
    # 將百度首頁的訪問和搜索過程封裝成一個baidu_search()方法
    def baidu_search(self, search_key):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys(search_key)
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)
 
    def test_search_key_unittest(self):
        search_key = 'unittest'
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + '百度搜索')
 
    def test_search_key_selenium(self):
        search_key = "selenium"
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + "百度搜索")
    
    def tearDown(self):
        self.driver.close()
 
if __name__ == '__main__':
    unittest.main

這里將百度首頁的訪問和搜索過程封裝成一個 baidu_search()方法,并定義 search_key參數為搜索關鍵字,根據接收的關鍵字執行不同內容的搜索。這里的 baidu_search()方法不會被當作測試用例執行,因為根據 unittest 查找和執行測試用例的規則,它只會把以“test”開頭的方法當作測試用例。

另一個值得討論的問題是,測試用例的斷言要不要寫在封裝的方法中?從前面的代碼可以看出,測試的斷言點是一樣的。這里更傾向于把斷言寫在每一條測試用例里面。因為很多時候就算操作步驟是一樣的,斷言點也不完全一樣。從設計的角度來看,斷言寫在每一個測試用例中也會更加清晰。

另外我們還發現每一條測試用例都要啟動和關閉一次瀏覽器,這是非常耗時的,那么如何減少瀏覽器的啟動和關閉次數呢?利用前面學過的setUpClass/tearDownClass可以解決這個問題。

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2023/2/25
"""
 
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
 
 
class TestBaidu(unittest.TestCase):
 
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()
        cls.baidu_url = 'https://www.baidu.com'
 
    def baidu_search(self, search_key):
        self.driver.get(self.baidu_url)
        self.driver.find_element(By.ID, 'kw').send_keys(search_key)
        self.driver.find_element(By.ID, 'su').click()
        sleep(2)
 
    def test_search_key_unittest(self):
        search_key = 'unittest'
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + '_百度搜索')
 
    def test_search_key_selenium(self):
        search_key = 'selenium'
        self.baidu_search(search_key)
        self.assertEqual(self.driver.title, search_key + '_百度搜索')
 
    @classmethod
    def tearDownClass(cls):
        cls.driver.close()
 
 
if __name__ == '__main__':
    unittest.main

修改前:

怎么使用selenium+unittest實現web自動化

修改后:

怎么使用selenium+unittest實現web自動化

可以看到修改后省去16秒之多,這里雖然我們將 driver 驅動定義為 cls.driver,但是在每個測試用例中使用時依然為self.driver。

當整個測試類中的所有測試用例都運行完成后,會調用 cls.driver.quit()關閉瀏覽器。當一個測試類中有多條測試用例時,這種方式將會大大縮短測試用例的執行時間。

以上就是“怎么使用selenium+unittest實現web自動化”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱阳市| 平定县| 治多县| 留坝县| 巴东县| 和林格尔县| 安徽省| 石棉县| 苍溪县| 衡阳市| 林芝县| 天津市| 汾阳市| 龙海市| 日照市| 眉山市| 石渠县| 越西县| 榕江县| 云安县| 佛山市| 大余县| 天台县| 玛纳斯县| 黎平县| 巴中市| 登封市| 吉林省| 广河县| 新蔡县| 阜新| 景洪市| 平顶山市| 慈利县| 安达市| 安丘市| 左云县| 上虞市| 平罗县| 木里| 九台市|