最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

selenium+unittest實現(xiàn)web自動化的示例代碼

 更新時間:2023年03月02日 08:33:05   作者:小胖虎*  
本文主要介紹了selenium+unittest實現(xiàn)web自動化的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前面我們學(xué)習(xí)unittest 的目的是用它編寫 Web 自動化測試用例,所以接下來會將 unittest 與Selenium 結(jié)合起來寫一個 Web 自動化測試的例子。

我們?nèi)砸园俣人阉鳛槔瑒?chuàng)建 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 創(chuàng)建測試類和方法的。方法中的代碼是Selenium 腳本。不過,這里的代碼存在一些問題,我們來一一改進。

首先,觀察代碼可以發(fā)現(xiàn),兩個測試用例中的步驟是一樣的,唯一的區(qū)別是搜索的關(guān)鍵字和斷言的結(jié)果不同。在學(xué)習(xí)過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參數(shù)為搜索關(guān)鍵字,根據(jù)接收的關(guān)鍵字執(zhí)行不同內(nèi)容的搜索。這里的 baidu_search()方法不會被當(dāng)作測試用例執(zhí)行,因為根據(jù) unittest 查找和執(zhí)行測試用例的規(guī)則,它只會把以“test”開頭的方法當(dāng)作測試用例。

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

另外我們還發(fā)現(xiàn)每一條測試用例都要啟動和關(guān)閉一次瀏覽器,這是非常耗時的,那么如何減少瀏覽器的啟動和關(guān)閉次數(shù)呢?利用前面學(xué)過的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

修改前:

修改后:

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

當(dāng)整個測試類中的所有測試用例都運行完成后,會調(diào)用 cls.driver.quit()關(guān)閉瀏覽器。

當(dāng)一個測試類中有多條測試用例時,這種方式將會大大縮短測試用例的執(zhí)行時間。

這樣我們就得到了一個簡單的百度搜索的自動化測試腳本,讀者可以根據(jù)此例試試別的場景。

到此這篇關(guān)于selenium+unittest實現(xiàn)web自動化的示例代碼的文章就介紹到這了,更多相關(guān)selenium unittest web自動化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python函數(shù)參數(shù)的4種方式

    Python函數(shù)參數(shù)的4種方式

    本文主要介紹了Python函數(shù)參數(shù)的4種方式,主要包括必選參數(shù),默認參數(shù),可選參數(shù),關(guān)鍵字參數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Python 機器學(xué)習(xí)之線性回歸詳解分析

    Python 機器學(xué)習(xí)之線性回歸詳解分析

    回歸是監(jiān)督學(xué)習(xí)的一個重要問題,回歸用于預(yù)測輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時,輸出變量的值也隨之發(fā)生變化?;貧w模型正是表示從輸入變量到輸出變量之間映射的函數(shù)
    2021-11-11
  • Python中字符串的格式化方法小結(jié)

    Python中字符串的格式化方法小結(jié)

    這篇文章主要介紹了Python中字符串的格式化方法小結(jié),提到了針對Python2.x與3.x版本相異情況下的不同技巧,需要的朋友可以參考下
    2016-05-05
  • Django日志及中間件模塊應(yīng)用案例

    Django日志及中間件模塊應(yīng)用案例

    這篇文章主要介紹了Django日志及中間件模塊應(yīng)用案例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python第三方庫qrcode或MyQr生成博客地址二維碼

    Python第三方庫qrcode或MyQr生成博客地址二維碼

    使用第三方庫qrcode或者MyQr給自己的博客網(wǎng)址快速生成二維碼,一鍵分享,文中含有詳細示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python實現(xiàn)SSH隧道功能的示例代碼

    Python實現(xiàn)SSH隧道功能的示例代碼

    SSH隧道是利用SSH協(xié)議建立一個加密通道,以保護通過不安全網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),本文將介紹如何使用Python來實現(xiàn)SSH隧道功能,感興趣的可以了解下
    2025-02-02
  • Matplotlib學(xué)習(xí)筆記之plt.xticks()用法

    Matplotlib學(xué)習(xí)筆記之plt.xticks()用法

    在matplotlib中ticks表示的是刻度,而刻度有兩層意思,一個是刻標(biāo)(locs),一個是刻度標(biāo)簽(tick?labels),下面這篇文章主要給大家介紹了關(guān)于Matplotlib學(xué)習(xí)筆記之plt.xticks()用法的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Python實現(xiàn)將MySQL數(shù)據(jù)庫查詢結(jié)果導(dǎo)出到Excel

    Python實現(xiàn)將MySQL數(shù)據(jù)庫查詢結(jié)果導(dǎo)出到Excel

    在實際工作中,我們經(jīng)常需要將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到Excel表格中進行進一步的分析和處理,Python中的pymysql和xlsxwriter庫提供了很好的解決方案,下面我們就來看看具體操作方法吧
    2023-11-11
  • Python+OpenCV實現(xiàn)黑白老照片上色功能

    Python+OpenCV實現(xiàn)黑白老照片上色功能

    我們都知道,有很多經(jīng)典的老照片,受限于那個時代的技術(shù),只能以黑白的形式傳世。盡管黑白照片別有一番風(fēng)味,但是彩色照片有時候能給人更強的代入感。本文就來用Python和OpenCV實現(xiàn)老照片上色功能,需要的可以參考一下
    2023-02-02
  • 使用Ray集群簡單創(chuàng)建Python分布式應(yīng)用程序

    使用Ray集群簡單創(chuàng)建Python分布式應(yīng)用程序

    面對計算密集型的任務(wù),除了多進程,就是分布式計算,如何用 Python 實現(xiàn)分布式計算呢?今天分享一個很簡單的方法,那就是借助于 Ray
    2021-09-09

最新評論

万安县| 九龙坡区| 莱州市| 徐汇区| 石首市| 岐山县| 泸西县| 东乌珠穆沁旗| 吉水县| 嘉峪关市| 余干县| 谢通门县| 称多县| 襄汾县| 大新县| 麦盖提县| 青河县| 喀喇沁旗| 汝州市| 会同县| 方正县| 信阳市| 玉环县| 河东区| 色达县| 玛沁县| 无棣县| 容城县| 武鸣县| 米林县| 伊宁县| 庆城县| 杂多县| 凉山| 中西区| 鄄城县| 晴隆县| 台湾省| 玉门市| 成都市| 罗江县|