偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用Selnium和Python構(gòu)建自動(dòng)化Web測(cè)試框架

譯文
開發(fā) 前端 自動(dòng)化
本文和您探討了Selenium WebDriver架構(gòu)的基本概念,四大Python自動(dòng)化測(cè)試框架,以及如何使用Selenium與Python,來(lái)構(gòu)建自動(dòng)化的Web測(cè)試框架。

[[417910]]

【51CTO.com快譯】如今,在不犧牲產(chǎn)品質(zhì)量的情況下,頻繁地部署大型軟件的新版本,已經(jīng)成為了主流趨勢(shì)。通常,在每次引入新的功能、觸發(fā)新的部署時(shí),各種針對(duì)缺陷的修復(fù)都需要進(jìn)行深入的、端到端的測(cè)試,以確保部署的成功率。雖然對(duì)于小型產(chǎn)品或項(xiàng)目而言,我們可以通過手動(dòng)測(cè)試來(lái)保證覆蓋率;但是對(duì)于那些功能數(shù)量龐大的產(chǎn)品或應(yīng)用來(lái)說,我們肯定需要通過自動(dòng)化測(cè)試,在最短的時(shí)間內(nèi)提供最大的測(cè)試覆蓋率。此時(shí),我們往往需要通過將Selenium與某種編程語(yǔ)言結(jié)合使用,來(lái)實(shí)現(xiàn)該目的。在本文中,我將和您探討如何使用Selenium與Python,來(lái)構(gòu)建自動(dòng)化的Web測(cè)試框架。

Selenium WebDriver架構(gòu)速覽

通常,Selenium Web自動(dòng)化測(cè)試框架可結(jié)合使用諸如:Java、Python、JavaScript、Ruby、C#等不同的編程語(yǔ)言。其中,根據(jù)GitHub的一項(xiàng)調(diào)查(https://pypl.github.io/PYPL.html)顯示,Python是開發(fā)人員最常用的編程語(yǔ)言。它具有流暢的學(xué)習(xí)曲線、簡(jiǎn)單的語(yǔ)法、以及簡(jiǎn)潔的代碼。因此,Selenium可以輕松地與Python相集成,以自動(dòng)化Web測(cè)試的過程。

而作為一種Web框架,Selenium WebDriver能夠在各種受支持的瀏覽器(如:Chrome、Firefox、Safari等)上,自動(dòng)化各種基于Web的應(yīng)用程序。因此,Selenium自動(dòng)化測(cè)試框架能夠讓用戶自定義與Web應(yīng)用的逐步交互,并通過添加斷言,來(lái)發(fā)現(xiàn)各種錯(cuò)誤。

Selenium WebDriver并非一個(gè)獨(dú)立的測(cè)試工具,它通過各種組件來(lái)滿足Web自動(dòng)化測(cè)試的需要。簡(jiǎn)單而言,Selenium WebDriver的后端組件包括:

  • Selenium WebDriver客戶端庫(kù)/語(yǔ)言綁定:如上所述,由于Selenium可以與任何語(yǔ)言集成,因此其下載頁(yè)面提供了Selenium客戶端與WebDriver語(yǔ)言的綁定。用戶可以在任何首選語(yǔ)言中創(chuàng)建能與Selenium服務(wù)器交互的語(yǔ)言腳本。
  • JSON Wire協(xié)議:作為Selenium的核心,JSON Wire協(xié)議通過提供能與REST API進(jìn)行數(shù)據(jù)傳輸?shù)拿浇?,以促進(jìn)客戶端代碼和瀏覽器之間的通信。也就是說,它能夠在瀏覽器的二進(jìn)制文件和客戶端庫(kù)之間建立連接。
  • 瀏覽器驅(qū)動(dòng)程序:每個(gè)瀏覽器都會(huì)通過本瀏覽器的驅(qū)動(dòng)程序,來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸。這些驅(qū)動(dòng)可以從已編寫的、基于Selenium的腳本處接收命令,在相應(yīng)的瀏覽器上執(zhí)行之,并以HTTP響應(yīng)的形式返回結(jié)果。當(dāng)然,這些都需要在JSON Wire協(xié)議的幫助下方可實(shí)現(xiàn)。
  • 瀏覽器:確保每個(gè)自動(dòng)化測(cè)試都能夠被安裝在本地或遠(yuǎn)程機(jī)器上,并能夠在其支持的瀏覽器中(如:Firefox、Chrome、Microsoft Edge、Safari等)被執(zhí)行。

四大Python自動(dòng)化測(cè)試框架

隨著需求的增加,目前市場(chǎng)上出現(xiàn)了各種受歡迎程度不同的Python自動(dòng)化測(cè)試框架。這些框架在管理腳本的執(zhí)行順序、存儲(chǔ)結(jié)果、呈現(xiàn)日志、以及添加斷言等方面,都發(fā)揮著各自的作用。下面,我們將重點(diǎn)討論四個(gè)比較流行的自動(dòng)化測(cè)試框架:

Robot Framework

作為一個(gè)開源的自動(dòng)化測(cè)試框架,Robot Framework主要被用于機(jī)器人過程自動(dòng)化(robotic process automation,RPA)和驗(yàn)收測(cè)試驅(qū)動(dòng)開發(fā)(acceptance test-driven development,ATDD)等方面。它支持Python 2.7.14及其更高版本。

優(yōu)點(diǎn):

  • 它適用于所有類型的應(yīng)用程序,包括:Web應(yīng)用程序、移動(dòng)應(yīng)用程序、以及桌面應(yīng)用程序等。
  • 通過采用關(guān)鍵字驅(qū)動(dòng)方法 (Keyword Driven Approach,KDA),它允許開發(fā)者在無(wú)需編程經(jīng)驗(yàn)的情況下,以人類可讀的關(guān)鍵字創(chuàng)建測(cè)試用例。
  • 它支持源自RF v4.0的原生IF/ELSE語(yǔ)法
  • 它提供了專門的社區(qū)支持和多種資源。

缺點(diǎn):

  • 報(bào)告的定制過程較為復(fù)雜。
  • 雖然該框架的并行測(cè)試范圍比較有限,但是可以通過Pabot(一種機(jī)器人框架的并行執(zhí)行器,https://pabot.org/)來(lái)實(shí)現(xiàn)。

Pytest

作為最常用的Python自動(dòng)化測(cè)試框架之一,Pytest主要被用于單元、功能、以及API等方面的測(cè)試。它支持Python 3.5及其更高版本。

優(yōu)點(diǎn):

  • 通過提供fixtures,來(lái)覆蓋所有的參數(shù)組合,而無(wú)需重新編寫代碼。
  • 支持包括:pytest-randomly、pytest-cov、pytest-django、以及pytest-bdd在內(nèi)的多種插件。
  • 支持pytest html插件。開發(fā)人員只需一個(gè)命令,即可針對(duì)自動(dòng)化測(cè)試套件生成html類型的報(bào)告。
  • 支持使用pytest-xdist插件并行執(zhí)行各種測(cè)試用例。

缺點(diǎn):

  • 由于pytest擁有一個(gè)單獨(dú)編寫測(cè)試用例的例程,因此它與其他測(cè)試框架的兼容性較差。

PyUnit

作為由Python附帶的默認(rèn)測(cè)試框架,PyUnit受到了許多開發(fā)人員的青睞。同時(shí),作為一個(gè)單元測(cè)試的框架,它主要借鑒了流行的Java測(cè)試框架--JUnit。

優(yōu)點(diǎn):

  • 由于屬于默認(rèn)的Python包,因此PyUnit無(wú)需額外的安裝與設(shè)置。
  • 能夠快速地生成XML和unittest-sml-reporting兩種測(cè)試報(bào)告。

缺點(diǎn):

  • 有時(shí)會(huì)涉及到大量的樣板代碼(boilerplate code)。
  • 由于它是基于JUnit的,因此使用了camelCase命名方式,而非Python snake_case的命名約定。

Behave

作為最流行的Python行為驅(qū)動(dòng)開發(fā)(behavior-driven development,BDD)自動(dòng)化測(cè)試框架之一,Behave在功能上與Cucumber框架非常相似。

優(yōu)點(diǎn):

  • 它既可以完全支持Gherkin語(yǔ)言,又能夠以可讀性的語(yǔ)言去編寫測(cè)試用例,以便于非技術(shù)團(tuán)隊(duì)的參與。
  • 它具有針對(duì)Django和Flask的集成。

缺點(diǎn):

  • 它僅適用于黑盒測(cè)試。
  • 它不支持并行測(cè)試。

使用Selenium和Pytest框架來(lái)設(shè)置Python

有了前面Selenium WebDriver架構(gòu)和四大Python測(cè)試框架的基礎(chǔ),下面讓我們開始在Windows上安裝,并運(yùn)行基于Selenium的自動(dòng)化測(cè)試。

第 1 步: 下載并安裝適用于Windows的Python。當(dāng)然,如果您的計(jì)算機(jī)上已安裝了Python,則完全可以跳過此步。

第 2 步: 為了在Python中安裝和管理代碼包,您必須使用Python在本地主機(jī)上提前安裝PIP(可以從Python官網(wǎng)處,下載包管理系統(tǒng))。在完成下載后,您可以使用如下命令進(jìn)行安裝:

  1. python get-pip.py 

并使用如下命令,來(lái)確認(rèn)PIP是否已被正確安裝:

  1. pip –version 

第 3 步: 為了構(gòu)建自動(dòng)化測(cè)試套件,我們需要通過執(zhí)行如下命令,來(lái)安裝Pytest庫(kù)Pytest:

  1. pip install -U pytest 

并使用如下命令,來(lái)確認(rèn)Pytest是否已被正確安裝: 

  1. pytest –version 

第 4 步: 使用PIP的如下命令,來(lái)安裝Selenium框架:

  1. pip install -U selenium 

并使用如下命令,來(lái)確認(rèn)被安裝的selenium的版本:

  1. python -c “import selenium; print(selenium.__version__)” 

第 5 步: 為了保持瀏覽器的獨(dú)立性,我們無(wú)需專門下載針對(duì)某種瀏覽器的驅(qū)動(dòng)程序。相反,我們會(huì)使用如下命令來(lái)安裝開源庫(kù):WebDriver-Manager,以自動(dòng)管理不同的瀏覽器驅(qū)動(dòng):

  1. pip install webdriver-manager 

并使用如下命令,來(lái)確認(rèn)Selenium和Webdriver-manager是否已被正確安裝:

  1. pip list 

至此,我們已經(jīng)滿足了使用Python去運(yùn)行基于Selenium的自動(dòng)化測(cè)試的先決條件。下面,讓我們通過編寫腳本,快速地創(chuàng)建如下簡(jiǎn)單的測(cè)試場(chǎng)景:

1. 直接訪問pCloudy主頁(yè)

2. 點(diǎn)擊登錄

3. 獲取頁(yè)面標(biāo)題

4. 斷言登錄頁(yè)面的標(biāo)題

在此,我們使用pytest框架的selenium-python腳本:

  1. import pytest 
  2. from selenium 
  3. import webdriver 
  4. from webdriver_manager.chrome 
  5. import ChromeDriverManager 
  6. import sys 
  7. from selenium.webdriver.chrome.options 
  8. import Options 
  9. from selenium.webdriver.common.keys 
  10. import Keys 
  11. from time 
  12. import sleep  
  13. def pcloudy_sample_test():     driver = webdriver.Chrome(ChromeDriverManager().install())  
  14. driver.get('https://www.pcloudy.com/') driver.maximize_window()  
  15. driver.find_element(By.XPATH, '//*[text()="Login"]').click() sleep(2)  
  16. title = "" Remote Mobile Web & Application Testing on Real Android Devices - pCloudy "" 
  17. assert title == driver.title  
  18. driver.close() 

正如上述代碼所示,我們最初導(dǎo)入了那些自動(dòng)化測(cè)試所需的代碼庫(kù)。為了創(chuàng)建函數(shù),我們首先使用WebDriverManager來(lái)調(diào)用Chrome瀏覽器。WebDriverManager會(huì)去檢查最新版本的WebDriver的二進(jìn)制文件,如果不在目標(biāo)系統(tǒng)上,則需額外下載。接著,我們會(huì)導(dǎo)出Selenium所需的WebDriver環(huán)境變量。在啟動(dòng)瀏覽器后,我們將pCloudy主頁(yè)的URL傳遞給瀏覽器,并將瀏覽器最大化,以獲得更好的分辨率。

在使用XPATH定位器加載了pCloudy主頁(yè)之后,我們會(huì)通過登錄按鈕,定向到登錄頁(yè)面上。最后,我們使用主頁(yè)的預(yù)期檢索標(biāo)題,去斷言實(shí)際的標(biāo)題。如果斷言通過,那么測(cè)試用例會(huì)被標(biāo)記為已通過,否則會(huì)被標(biāo)記為失敗。最終,在執(zhí)行完畢時(shí),程序會(huì)關(guān)閉正在運(yùn)行的會(huì)話。

在pCloudy Browser Cloud上運(yùn)行Pytest框架的跨瀏覽器測(cè)試

作為一種可持續(xù)測(cè)試的云服務(wù),pCloudy提供了跨瀏覽器測(cè)試(無(wú)論是Windows平臺(tái)還是Mac平臺(tái))的功能。其中,Browser Cloud平臺(tái)允許用戶訪問那些被托管在云端的遠(yuǎn)程主機(jī),并且能夠在Selenium自動(dòng)化框架中,使用RemoteWebDriver。因此,我們可以在云端,模擬不同的環(huán)境(例如:不同的瀏覽器、某個(gè)瀏覽器的多個(gè)版本、以及不同操作系統(tǒng)),并開展各種自動(dòng)化測(cè)試。

同時(shí),Browser Cloud自動(dòng)化測(cè)試平臺(tái),可以在各種云托管的主機(jī)上,對(duì)Web應(yīng)用程序開展手動(dòng)測(cè)試。如果您的自動(dòng)化測(cè)試在某個(gè)特定環(huán)境中出現(xiàn)了失敗,那么您只需從UI中選擇相同的環(huán)境,就可以在pCloudy的相同環(huán)境中,手動(dòng)運(yùn)行該測(cè)試。

下面是基于Pytest框架的Selenium腳本。它將在pCloudy的Browser Cloud上執(zhí)行跨瀏覽器的測(cè)試:

  1. import pytest 
  2. from os 
  3. import environ  
  4. from selenium 
  5. import webdriver 
  6. from selenium.common.exceptions 
  7. import WebDriverException 
  8. from selenium.webdriver.remote.remote_connection 
  9. import RemoteConnection  
  10. @pytest.fixture(scope = 'function'
  11. def driver(): 
  12.     desired_caps = {}  
  13. browser = {    "pCloudy_Username""ramit.dhamija@gmail.com",    "apiKey""5TfF4UcNRbN3JhucQ",    "clientName""ramit.dhamija@gmail.com",    "email""ramit.dhamija@gmail.com",    "os""Mac",    "osVersion""Catalina",    "browserName""safari",    "browserVersions""14",    "pCloudy_EnableVideo""true",    "pCloudy_EnablePerformanceData""true",    "pCloudy_EnableDeviceLogs""true" 
  14. }  
  15. desired_caps.update(browser)  
  16. selenium_endpoint = "https://prod-browsercloud-in.pcloudy.com/seleniumcloud/wd/hub" 
  17.  executor = RemoteConnection(selenium_endpoint, resolve_ip = False) browser = webdriver.Remote(    command_executor = executor,    desired_capabilities = desired_caps ) 
  18. yield browser 

sample_login_test.py的代碼內(nèi)容為:

  1. import pytest 
  2. import sys  
  3. @pytest.mark.usefixtures('driver'
  4. class TestLink:     def test_title(self, driver):    "" 
  5. " Verify click and title of login page: return :None "" " 
  6. driver.get('https://www.pcloudy.com/') driver.maximize_window()  
  7. driver.find_element(By.XPATH, '//*[text()="Login"]').click() sleep(2)  
  8. title = "" 
  9. Remote Mobile Web & Application Testing on Real Android Devices - pCloudy "" 
  10. assert title == driver.title driver.quit() 

您可以執(zhí)行如下pytest測(cè)試腳本的命令:

  1. pytest -n=2 tests\sample_login_test.py 

其中,-n用于指定并行測(cè)試執(zhí)行的次數(shù)。

正如上述代碼所示,在我們的第一個(gè)腳本中,我們用到了pytest的fixtures。它們會(huì)在每個(gè)對(duì)應(yīng)的測(cè)試函數(shù)之前,事先被運(yùn)行。在fixtures中定義的范圍——'function'是fixture的默認(rèn)值,它表示fixture將在每個(gè)測(cè)試會(huì)話中執(zhí)行一次。

為了能夠在pCloudy瀏覽器的云中運(yùn)行測(cè)試,我們定義了“用戶名+API密鑰”方式的pCloudy身份驗(yàn)證等函數(shù)。此外,在必需的功能中,我們定義了各種運(yùn)行所需的環(huán)境,其中包括Mac操作系統(tǒng)的Catalina版本和Safari-14瀏覽器。

當(dāng)然,在pCloudy中,被用來(lái)捕獲測(cè)試視頻記錄、性能數(shù)據(jù)、以及日志的內(nèi)置功能,其實(shí)并不多。為了能夠在pCloudy Selenium網(wǎng)格上運(yùn)行測(cè)試,我們將Selenium網(wǎng)格的URL定義為selenium_endpoint。被連接的節(jié)點(diǎn)主機(jī)將會(huì)根據(jù)所用到的測(cè)試環(huán)境,進(jìn)行自動(dòng)分配。此外,在第一個(gè)腳本的末尾,我們會(huì)生成一個(gè)瀏覽器,用于存儲(chǔ)和更新自動(dòng)化測(cè)試所需的各項(xiàng)功能。

而在下一個(gè)腳本中,我們用到了與之前在pCloudy登錄頁(yè)面處斷言標(biāo)題是否相同的Selenium腳本。該自動(dòng)化測(cè)試會(huì)在pCloudy Browser Cloud中模擬Mac-Catalina、Safari-14等環(huán)境運(yùn)行。

pCloudy的輸出:

  • 若要查看測(cè)試的當(dāng)前運(yùn)行狀態(tài),請(qǐng)重定向到pCloudy設(shè)備頁(yè)面,依次點(diǎn)擊“報(bào)告”->“我的活動(dòng)會(huì)話”。
  • 若要查看目前已執(zhí)行的所有測(cè)試,請(qǐng)直接跳轉(zhuǎn)到pCloudy設(shè)備頁(yè)面,依次單擊“報(bào)告”->“所有報(bào)告”。
  • 若要查看特定測(cè)試的日志和快照,請(qǐng)直接跳轉(zhuǎn)到pCloudy設(shè)備頁(yè)面,依次單擊“報(bào)告”->“所有報(bào)告”,并對(duì)需要日志和截屏的特定會(huì)話名稱執(zhí)行相關(guān)的操作。

原文標(biāo)題:Setting up Modern Web Test Automation Framework with Selenium and Python,作者:Ramit Dhamija

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2011-06-03 17:06:09

自動(dòng)化測(cè)試

2023-09-13 11:40:12

2011-01-20 10:17:25

ibmdwWeb

2012-03-29 10:57:12

Web自動(dòng)化測(cè)試

2017-01-06 10:54:03

AndroidiOSJenkins

2009-08-19 09:00:48

單元測(cè)試框架自動(dòng)化測(cè)試

2021-06-26 07:40:21

前端自動(dòng)化測(cè)試Jest

2019-04-22 09:00:00

Python框架自動(dòng)化測(cè)試

2020-08-03 15:40:57

Web自動(dòng)化工具測(cè)試

2017-12-24 21:00:10

自動(dòng)化測(cè)試測(cè)試框架敏捷

2012-12-24 22:54:31

2023-05-18 14:01:00

前端自動(dòng)化測(cè)試

2012-09-04 10:20:31

IBMdw

2020-04-28 09:00:00

測(cè)試測(cè)試自動(dòng)化

2020-09-14 07:00:00

測(cè)試自動(dòng)化框架

2023-10-12 07:40:54

Minium自動(dòng)化框架

2019-04-18 09:00:00

Java自動(dòng)化測(cè)試框架

2018-05-11 08:29:10

Python自動(dòng)化測(cè)試數(shù)據(jù)驅(qū)動(dòng)

2019-02-20 11:19:52

Python 開發(fā)編程語(yǔ)言

2018-05-11 13:39:05

PythonCSV接口測(cè)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)