selenium+unittest實(shí)現(xiàn)web自動(dòng)化的示例代碼
前面我們學(xué)習(xí)unittest 的目的是用它編寫(xiě) Web 自動(dòng)化測(cè)試用例,所以接下來(lái)會(huì)將 unittest 與Selenium 結(jié)合起來(lái)寫(xiě)一個(gè) Web 自動(dòng)化測(cè)試的例子。
我們?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對(duì)上面的代碼不做過(guò)多介紹,都是以 unittest 創(chuàng)建測(cè)試類(lèi)和方法的。方法中的代碼是Selenium 腳本。不過(guò),這里的代碼存在一些問(wèn)題,我們來(lái)一一改進(jìn)。
首先,觀察代碼可以發(fā)現(xiàn),兩個(gè)測(cè)試用例中的步驟是一樣的,唯一的區(qū)別是搜索的關(guān)鍵字和斷言的結(jié)果不同。在學(xué)習(xí)過(guò)python模塊化,所以這里把操作步驟封裝成一個(gè)方法。
代碼如下:
# _*_ 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'
# 將百度首頁(yè)的訪問(wèn)和搜索過(guò)程封裝成一個(gè)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這里將百度首頁(yè)的訪問(wèn)和搜索過(guò)程封裝成一個(gè) baidu_search()方法,并定義 search_key參數(shù)為搜索關(guān)鍵字,根據(jù)接收的關(guān)鍵字執(zhí)行不同內(nèi)容的搜索。這里的 baidu_search()方法不會(huì)被當(dāng)作測(cè)試用例執(zhí)行,因?yàn)楦鶕?jù) unittest 查找和執(zhí)行測(cè)試用例的規(guī)則,它只會(huì)把以“test”開(kāi)頭的方法當(dāng)作測(cè)試用例。
另一個(gè)值得討論的問(wèn)題是,測(cè)試用例的斷言要不要寫(xiě)在封裝的方法中?從前面的代碼可以看出,測(cè)試的斷言點(diǎn)是一樣的。這里更傾向于把斷言寫(xiě)在每一條測(cè)試用例里面。因?yàn)楹芏鄷r(shí)候就算操作步驟是一樣的,斷言點(diǎn)也不完全一樣。從設(shè)計(jì)的角度來(lái)看,斷言寫(xiě)在每一個(gè)測(cè)試用例中也會(huì)更加清晰。
另外我們還發(fā)現(xiàn)每一條測(cè)試用例都要啟動(dòng)和關(guān)閉一次瀏覽器,這是非常耗時(shí)的,那么如何減少瀏覽器的啟動(dòng)和關(guān)閉次數(shù)呢?利用前面學(xué)過(guò)的setUpClass/tearDownClass可以解決這個(gè)問(wèn)題。
# _*_ 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ū)動(dòng)定義為 cls.driver,但是在每個(gè)測(cè)試用例中使用時(shí)依然為self.driver。
當(dāng)整個(gè)測(cè)試類(lèi)中的所有測(cè)試用例都運(yùn)行完成后,會(huì)調(diào)用 cls.driver.quit()關(guān)閉瀏覽器。
當(dāng)一個(gè)測(cè)試類(lèi)中有多條測(cè)試用例時(shí),這種方式將會(huì)大大縮短測(cè)試用例的執(zhí)行時(shí)間。
這樣我們就得到了一個(gè)簡(jiǎn)單的百度搜索的自動(dòng)化測(cè)試腳本,讀者可以根據(jù)此例試試別的場(chǎng)景。
到此這篇關(guān)于selenium+unittest實(shí)現(xiàn)web自動(dòng)化的示例代碼的文章就介紹到這了,更多相關(guān)selenium unittest web自動(dòng)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- selenium+python自動(dòng)化測(cè)試之使用webdriver操作瀏覽器的方法
- python基于Selenium的web自動(dòng)化框架
- Python結(jié)合Selenium簡(jiǎn)單實(shí)現(xiàn)Web自動(dòng)化測(cè)試
- docker利用selenium+testng實(shí)現(xiàn)web自動(dòng)化的方法
- python+selenium的web自動(dòng)化上傳操作的實(shí)現(xiàn)
- 關(guān)于Python?Selenium自動(dòng)化導(dǎo)出新版WOS(web?of?science)檢索結(jié)果的問(wèn)題
- Web自動(dòng)化之Selenium常用操作方法大全
相關(guān)文章
Python 機(jī)器學(xué)習(xí)之線性回歸詳解分析
回歸是監(jiān)督學(xué)習(xí)的一個(gè)重要問(wèn)題,回歸用于預(yù)測(cè)輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時(shí),輸出變量的值也隨之發(fā)生變化。回歸模型正是表示從輸入變量到輸出變量之間映射的函數(shù)2021-11-11
Python第三方庫(kù)qrcode或MyQr生成博客地址二維碼
使用第三方庫(kù)qrcode或者M(jìn)yQr給自己的博客網(wǎng)址快速生成二維碼,一鍵分享,文中含有詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Python實(shí)現(xiàn)SSH隧道功能的示例代碼
SSH隧道是利用SSH協(xié)議建立一個(gè)加密通道,以保護(hù)通過(guò)不安全網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),本文將介紹如何使用Python來(lái)實(shí)現(xiàn)SSH隧道功能,感興趣的可以了解下2025-02-02
Matplotlib學(xué)習(xí)筆記之plt.xticks()用法
在matplotlib中ticks表示的是刻度,而刻度有兩層意思,一個(gè)是刻標(biāo)(locs),一個(gè)是刻度標(biāo)簽(tick?labels),下面這篇文章主要給大家介紹了關(guān)于Matplotlib學(xué)習(xí)筆記之plt.xticks()用法的相關(guān)資料,需要的朋友可以參考下2022-09-09
Python實(shí)現(xiàn)將MySQL數(shù)據(jù)庫(kù)查詢(xún)結(jié)果導(dǎo)出到Excel
在實(shí)際工作中,我們經(jīng)常需要將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到Excel表格中進(jìn)行進(jìn)一步的分析和處理,Python中的pymysql和xlsxwriter庫(kù)提供了很好的解決方案,下面我們就來(lái)看看具體操作方法吧2023-11-11
Python+OpenCV實(shí)現(xiàn)黑白老照片上色功能
我們都知道,有很多經(jīng)典的老照片,受限于那個(gè)時(shí)代的技術(shù),只能以黑白的形式傳世。盡管黑白照片別有一番風(fēng)味,但是彩色照片有時(shí)候能給人更強(qiáng)的代入感。本文就來(lái)用Python和OpenCV實(shí)現(xiàn)老照片上色功能,需要的可以參考一下2023-02-02
使用Ray集群簡(jiǎn)單創(chuàng)建Python分布式應(yīng)用程序
面對(duì)計(jì)算密集型的任務(wù),除了多進(jìn)程,就是分布式計(jì)算,如何用 Python 實(shí)現(xiàn)分布式計(jì)算呢?今天分享一個(gè)很簡(jiǎn)單的方法,那就是借助于 Ray2021-09-09

