手把手搭建Python+Pytest+Selenium自動(dòng)化環(huán)境,從零開始一點(diǎn)都不難!
今天給大家?guī)?lái)一篇純干貨教程,保證小白也能看懂學(xué)會(huì)!
最近很多朋友在問(wèn):“二黑,我想學(xué)自動(dòng)化測(cè)試,但環(huán)境都搭不起來(lái),老是報(bào)錯(cuò)怎么辦?”別擔(dān)心,今天我就手把手教你搭建Python+Pytest+Selenium自動(dòng)化測(cè)試環(huán)境,從安裝到第一個(gè)腳本運(yùn)行,每個(gè)步驟都配了詳細(xì)的截圖,跟著做絕對(duì)沒問(wèn)題!
01 為什么要選這個(gè)技術(shù)棧?
先簡(jiǎn)單說(shuō)說(shuō)為什么推薦這個(gè)組合:
Python:語(yǔ)法簡(jiǎn)單,上手快,社區(qū)資源豐富,絕對(duì)是自動(dòng)化測(cè)試的首選語(yǔ)言
Pytest:比unittest更強(qiáng)大、更靈活的測(cè)試框架,插件多,寫法簡(jiǎn)單
Selenium:Web自動(dòng)化測(cè)試的老大哥,支持多種瀏覽器,功能強(qiáng)大
這三個(gè)加起來(lái),簡(jiǎn)直就是自動(dòng)化測(cè)試的“黃金組合”!
02 環(huán)境搭建詳細(xì)步驟
好了,廢話不多說(shuō),我們直接進(jìn)入正題!
第一步:安裝Python
Python是我們的基礎(chǔ),必須首先安裝。
1. 下載Python
訪問(wèn)Python官網(wǎng):https://www.python.org/downloads/
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png
Python官網(wǎng)下載頁(yè)面
建議下載Python 3.8及以上版本,我這里以Python 3.9為例。記得要勾選"Add Python to PATH"!
2. 驗(yàn)證安裝
安裝完成后,打開命令行(Win+R,輸入cmd),輸入:
python --version
如果顯示Python版本號(hào),說(shuō)明安裝成功!
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png
驗(yàn)證Python安裝
遇到問(wèn)題怎么辦?
如果提示"python不是內(nèi)部或外部命令",說(shuō)明環(huán)境變量沒配置好。手動(dòng)添加一下:
-
右鍵"此電腦"→"屬性"→"高級(jí)系統(tǒng)設(shè)置"→"環(huán)境變量"
-
在系統(tǒng)變量中找到Path,雙擊編輯
-
添加Python的安裝路徑和Scripts路徑,比如:
C:\Python39\C:\Python39\Scripts\
第二步:安裝Pytest
Pytest是我們的測(cè)試框架,安裝超簡(jiǎn)單。
1. 使用pip安裝
在命令行中輸入:
pip install pytest
2. 驗(yàn)證安裝
安裝完成后,輸入:
pytest --version
會(huì)顯示pytest的版本信息,這樣就OK了!
3. 安裝常用插件
為了后面用著更方便,我們可以一次性安裝幾個(gè)常用插件:
pip install pytest-html # 生成HTML報(bào)告pip install pytest-xdist # 分布式測(cè)試pip install pytest-rerunfailures # 失敗重試pip install pytest-ordering # 控制用例執(zhí)行順序
第三步:安裝Selenium
Selenium是重頭戲,用來(lái)控制瀏覽器進(jìn)行自動(dòng)化測(cè)試。
1. 安裝Selenium庫(kù)
在命令行中輸入:
pip install selenium
2. 下載瀏覽器驅(qū)動(dòng)
Selenium需要瀏覽器驅(qū)動(dòng)才能工作,以Chrome為例:
-
查看Chrome版本:在瀏覽器地址欄輸入
chrome://version/ -
訪問(wèn)ChromeDriver官網(wǎng):https://chromedriver.chromium.org/
-
下載對(duì)應(yīng)版本的驅(qū)動(dòng)
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png
ChromeDriver下載頁(yè)面
3. 配置瀏覽器驅(qū)動(dòng)
有三種配置方法,推薦第一種:
方法一:放到Python安裝目錄下
直接把下載的chromedriver.exe放到Python的Scripts目錄下,這樣最簡(jiǎn)單。
方法二:配置環(huán)境變量
把chromedriver所在目錄添加到系統(tǒng)Path環(huán)境變量中。
方法三:代碼中指定路徑
在代碼中指定驅(qū)動(dòng)路徑(后面會(huì)演示)。
03 驗(yàn)證環(huán)境是否成功
環(huán)境裝好了,我們來(lái)寫個(gè)簡(jiǎn)單的測(cè)試腳本驗(yàn)證一下。
創(chuàng)建一個(gè)名為test_demo.py的文件,輸入以下代碼:
import pytestfrom selenium import webdriverfrom selenium.webdriver.common.by import Byimport timeclassTestBaidu:"""百度搜索測(cè)試用例"""defsetup_method(self):"""每個(gè)測(cè)試方法前執(zhí)行"""# 創(chuàng)建瀏覽器驅(qū)動(dòng)self.driver = webdriver.Chrome() # 如果驅(qū)動(dòng)在PATH中,可以直接這樣寫self.driver.implicitly_wait(10) # 隱式等待10秒self.driver.maximize_window() # 最大化窗口defteardown_method(self):"""每個(gè)測(cè)試方法后執(zhí)行"""# 關(guān)閉瀏覽器self.driver.quit()deftest_baidu_search(self):"""測(cè)試百度搜索功能"""# 打開百度self.driver.get("https://www.baidu.com")# 定位搜索框并輸入關(guān)鍵詞search_box = self.driver.find_element(By.ID, "kw")search_box.send_keys("自動(dòng)化測(cè)試")# 定位搜索按鈕并點(diǎn)擊search_btn = self.driver.find_element(By.ID, "su")search_btn.click()# 驗(yàn)證搜索結(jié)果time.sleep(2) # 等待頁(yè)面加載assert"自動(dòng)化測(cè)試"in self.driver.titleprint("測(cè)試通過(guò)!")if __name__ == "__main__":pytest.main(["-v", "test_demo.py"])
保存文件,在命令行中運(yùn)行:
pytest test_demo.py -v
如果看到瀏覽器自動(dòng)打開,完成搜索操作然后關(guān)閉,并且命令行顯示測(cè)試通過(guò),恭喜你,環(huán)境搭建成功!
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png
測(cè)試運(yùn)行結(jié)果
04 常見問(wèn)題及解決方案
大家在搭建環(huán)境時(shí)可能會(huì)遇到一些問(wèn)題,這里整理了幾個(gè)常見的:
問(wèn)題一:瀏覽器驅(qū)動(dòng)版本不匹配
現(xiàn)象:報(bào)錯(cuò)提示"This version of ChromeDriver only supports Chrome version XX"
解決:確保ChromeDriver版本與Chrome瀏覽器版本匹配,最好都使用最新版。
問(wèn)題二:找不到瀏覽器驅(qū)動(dòng)
現(xiàn)象:報(bào)錯(cuò)提示"WebDriver exception: 'chromedriver' executable needs to be in PATH"
解決:
-
檢查chromedriver是否在Python的Scripts目錄下
-
或者在代碼中指定驅(qū)動(dòng)路徑:
from selenium.webdriver.chrome.service import Serviceservice = Service(r"C:\path\to\chromedriver.exe")driver = webdriver.Chrome(service=service)
問(wèn)題三:瀏覽器被安全策略阻止
現(xiàn)象:瀏覽器啟動(dòng)時(shí)提示"受到自動(dòng)化軟件控制"
解決:添加選項(xiàng)繞過(guò)這個(gè)提示:
from selenium.webdriver.chrome.options import Optionsoptions = Options()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=options)
05 進(jìn)階配置:讓框架更好用
基礎(chǔ)環(huán)境搭好了,我們?cè)倥渲靡恍?shí)用的功能。
1. 生成測(cè)試報(bào)告
安裝pytest-html后,可以生成漂亮的HTML報(bào)告:
pytest test_demo.py --html=report.html
2. 并發(fā)執(zhí)行測(cè)試
安裝pytest-xdist后,可以并行運(yùn)行測(cè)試用例,大大提高執(zhí)行速度:
pytest test_demo.py -n 2 # 使用2個(gè)CPU核心
3. 失敗重試
安裝pytest-rerunfailures后,可以讓失敗的用例自動(dòng)重試:
pytest test_demo.py --reruns 2 # 失敗重試2次
06 項(xiàng)目結(jié)構(gòu)規(guī)劃
一個(gè)良好的項(xiàng)目結(jié)構(gòu)很重要,推薦這樣組織你的自動(dòng)化項(xiàng)目:
project_name/├── tests/ # 測(cè)試用例目錄│ ├── test_login.py # 登錄測(cè)試│ ├── test_search.py # 搜索測(cè)試│ └── conftest.py # pytest配置文件├── pages/ # 頁(yè)面對(duì)象目錄│ ├── login_page.py # 登錄頁(yè)面│ └── search_page.py # 搜索頁(yè)面├── utils/ # 工具類目錄│ ├── driver_manager.py # 瀏覽器管理│ └── config_reader.py # 配置讀取├── reports/ # 測(cè)試報(bào)告目錄├── logs/ # 日志目錄└── requirements.txt # 依賴包列表
07 編寫一個(gè)完整的測(cè)試用例
讓我們寫一個(gè)更完整的例子,使用頁(yè)面對(duì)象模式:
1. 首先創(chuàng)建頁(yè)面類pages/baidu_page.py:
from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECclassBaiduPage:def__init__(self, driver):self.driver = driverself.wait = WebDriverWait(driver, 10)defopen_baidu(self):"""打開百度首頁(yè)"""self.driver.get("https://www.baidu.com")return selfdefsearch(self, keyword):"""執(zhí)行搜索"""# 等待搜索框可見search_box = self.wait.until(EC.visibility_of_element_located((By.ID, "kw")))search_box.clear()search_box.send_keys(keyword)# 點(diǎn)擊搜索按鈕search_btn = self.driver.find_element(By.ID, "su")search_btn.click()return selfdefget_title(self):"""獲取頁(yè)面標(biāo)題"""return self.driver.title
2. 然后創(chuàng)建測(cè)試用例tests/test_baidu_search.py:
import pytestfrom pages.baidu_page import BaiduPageclassTestBaiduSearch:"""百度搜索測(cè)試類"""@pytest.fixture(autouse=True)defsetup(self, driver):"""初始化"""self.driver = driverself.baidu_page = BaiduPage(driver)deftest_search_python(self):"""測(cè)試搜索Python"""self.baidu_page.open_baidu().search("Python教程")assert"Python教程"in self.baidu_page.get_title()deftest_search_automation(self):"""測(cè)試搜索自動(dòng)化測(cè)試"""self.baidu_page.open_baidu().search("自動(dòng)化測(cè)試")assert"自動(dòng)化測(cè)試"in self.baidu_page.get_title()
3. 創(chuàng)建配置文件tests/conftest.py:
import pytestfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionsdefdriver():"""創(chuàng)建瀏覽器驅(qū)動(dòng),整個(gè)測(cè)試會(huì)話只執(zhí)行一次"""# 配置Chrome選項(xiàng)chrome_options = Options()chrome_options.add_argument("--disable-blink-features=AutomationControlled")chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])# 創(chuàng)建驅(qū)動(dòng)實(shí)例driver = webdriver.Chrome(options=chrome_options)driver.implicitly_wait(10)driver.maximize_window()yield driver# 測(cè)試結(jié)束后關(guān)閉瀏覽器driver.quit()
運(yùn)行測(cè)試:
pytest tests/test_baidu_search.py -v --html=reports/report.html
08 學(xué)習(xí)建議和下一步
環(huán)境搭好了,接下來(lái)該怎么學(xué)?給大家?guī)c(diǎn)建議:
1. 先掌握基礎(chǔ)知識(shí)
-
Python基礎(chǔ)語(yǔ)法
-
Selenium常用API(元素定位、頁(yè)面操作等)
-
Pytest斷言和夾具使用
2. 然后學(xué)習(xí)進(jìn)階內(nèi)容
-
頁(yè)面對(duì)象模式(Page Object Model)
-
數(shù)據(jù)驅(qū)動(dòng)測(cè)試
-
測(cè)試報(bào)告優(yōu)化
-
持續(xù)集成
3. 實(shí)戰(zhàn)項(xiàng)目練習(xí)
-
找一個(gè)熟悉的網(wǎng)站進(jìn)行自動(dòng)化練習(xí)
-
從簡(jiǎn)單的登錄、搜索功能開始
-
逐步擴(kuò)展到復(fù)雜業(yè)務(wù)流程
09 總結(jié)
好了,今天的內(nèi)容就到這里。我們完整地走了一遍Python+Pytest+Selenium環(huán)境搭建的過(guò)程,包括:
-
? Python安裝和配置
-
? Pytest安裝和插件配置
-
? Selenium安裝和驅(qū)動(dòng)配置
-
? 第一個(gè)自動(dòng)化腳本編寫和運(yùn)行
-
? 常見問(wèn)題解決
-
? 項(xiàng)目結(jié)構(gòu)規(guī)劃
-
? 完整測(cè)試用例示例
環(huán)境搭建是自動(dòng)化測(cè)試的第一步,也是很多新手容易卡住的地方。希望這篇教程能幫你順利邁出第一步!
如果在搭建過(guò)程中遇到什么問(wèn)題,歡迎在評(píng)論區(qū)留言,我會(huì)盡力幫大家解決!
本文原創(chuàng)于【程序員二黑】公眾號(hào),轉(zhuǎn)載請(qǐng)注明出處!
歡迎大家關(guān)注筆者的公眾號(hào):程序員二黑,專注于軟件測(cè)試干活分享,全套測(cè)試資源可免費(fèi)分享!
最后如果你想學(xué)習(xí)軟件測(cè)試,歡迎加入筆者的交流群:946094265,里面會(huì)有很多資源和大佬答疑解惑,我們一起交流一起學(xué)習(xí)!

浙公網(wǎng)安備 33010602011771號(hào)