自動化測試是軟件測試中非常重要的一部分,可以提高測試效率和測試覆蓋率。在UI自動化測試中,Selenium是非常流行的工具。本文將介紹如何使用Python和Selenium搭建UI自動化測試框架。
一、環(huán)境準備
在開始搭建UI自動化測試框架之前,需要先安裝Python和Selenium??梢詮腜ython官網(wǎng)下載Python安裝包,并使用pip命令安裝Selenium。
二、框架目錄結構
在搭建UI自動化測試框架之前,需要先規(guī)劃好框架的目錄結構。以下是一個比較完整的目錄結構:
├──?config
│???├──?__init__.py
│???├──?config.ini
│???└──?logger.ini
├──?data
│???├──?__init__.py
│???├──?test_data.xlsx
│???└──?test_data.json
├──?logs
│???├──?__init__.py
│???└──?test.log
├──?page
│???├──?__init__.py
│???└──?login_page.py
├──?report
│???├──?__init__.py
│???└──?test_report.html
│???└──?screenshots
│???????├──?test_login_failure_2022-05-01_08-30-00.png
│???????└──?test_login_success_2022-05-01_08-30-00.png
├──?testcase
│???├──?__init__.py
│???└──?test_login.py
├──?utils
│???├──?__init__.py
│???├──?driver.py
│???├──?logger.py
│???└──?read_config.py
│???└──?take_screenshot.py
├──?.gitignore
├──?README.md
├──?requirements.txt
└──?run.py
config:存放配置文件,包括config.ini和logger.ini。
data:存放測試數(shù)據(jù),包括Excel和JSON格式的數(shù)據(jù)。
logs:存放日志文件,包括test.log。
page:存放頁面對象,每個頁面對應一個.py文件。
report:存放測試報告,包括test_report.html。
screenshots:用于存放測試過程中的截圖。
testcase:存放測試用例,每個用例對應一個.py文件。
utils:存放工具類,包括driver.py、logger.py和read_config.py。
.gitignore:Git忽略文件列表。
README.md:項目說明文件。
requirements.txt:Python依賴包列表。
run.py:測試執(zhí)行入口。
三、框架搭建
1.創(chuàng)建項目目錄
在本地創(chuàng)建一個項目目錄,進入該目錄,執(zhí)行以下命令:
mkdir?config?data?logs?page?report?report/screenshots?testcase?utils
touch?.gitignore?README.md?requirements.txt?run.py
cd?config?&&?touch?__init__.py?config.ini?logger.ini?&&?cd?..
cd?data?&&?touch?__init__.py?test_data.xlsx?test_data.json?&&?cd?..
cd?logs?&&?touch?__init__.py?test.log?&&?cd?..
cd?page?&&?touch?__init__.py?login_page.py?&&?cd?..
cd?report?&&?touch?__init__.py?test_report.html?&&?cd??..
cd?testcase?&&?touch?__init__.py?test_login.py?&&?cd?..
cd?utils?&&?touch?__init__.py?driver.py?logger.py?read_config.py?&&?cd?..
2.安裝依賴包
在項目目錄下執(zhí)行以下命令,安裝依賴包:
pip?install?selenium?openpyxl?configparser?loguru
3.編寫配置文件
在config目錄下的config.ini文件中,配置瀏覽器類型和網(wǎng)站地址:
[Browser]
browser_name?=?chrome
[URL]
base_url?=?https://www.example.com
在config目錄下的logger.ini文件中,配置日志文件路徑和日志級別:
[loggers]
keys=root
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=formatter
[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=formatter
args=(sys.stdout,)
[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=formatter
args=('logs/test.log',?'D',?1,?30)
[formatter_formatter]
format=%(asctime)s?-?%(name)s?-?%(levelname)s?-?%(message)s
datefmt=%Y-%m-%d?%H:%M:%S
4.編寫工具類
在utils目錄下的driver.py文件中,封裝獲取瀏覽器驅動的方法:
import?os
from?selenium?import?webdriver
from?configparser?import?ConfigParser
def?get_driver():
????config?=?ConfigParser()
????config.read(os.path.join(os.path.dirname(__file__),?'../config/config.ini'))
????browser_name?=?config.get('Browser',?'browser_name')
????if?browser_name.lower()?==?'chrome':
????????return?webdriver.Chrome()
????elif?browser_name.lower()?==?'firefox':
????????return?webdriver.Firefox()
????elif?browser_name.lower()?==?'edge':
????????return?webdriver.Edge()
????else:
????????raise?ValueError('Unsupported?browser:?{}'.format(browser_name))
在utils目錄下的logger.py文件中,封裝日志記錄的方法:
import?os
from?loguru?import?logger
from?configparser?import?ConfigParser
config?=?ConfigParser()
config.read(os.path.join(os.path.dirname(__file__),?'../config/logger.ini'))
logger.add(config.get('handler_fileHandler',?'class'),?level=config.get('logger_root',?'level'),?rotation=config.getint('handler_fileHandler',?'args')[2],?retention=config.getint('handler_fileHandler',?'args')[3])
def?get_logger(name):
????return?logger.bind(name=name)
在utils目錄下的read_config.py文件中,封裝讀取配置文件的方法:
import?os
from?configparser?import?ConfigParser
config?=?ConfigParser()
config.read(os.path.join(os.path.dirname(__file__),?'../config/config.ini'))
def?get_base_url():
????return?config.get('URL',?'base_url')
在utils目錄下新增了一個take_screenshot.py文件,用于封裝截圖的方法:
import?os
from?datetime?import?datetime
from?utils.driver?import?get_driver
def?take_screenshot(name):
????driver?=?get_driver()
????screenshot_dir?=?os.path.join(os.path.dirname(__file__),?'../report/screenshots')
????os.makedirs(screenshot_dir,?exist_ok=True)
????screenshot_file?=?os.path.join(screenshot_dir,?'{}_{}.png'.format(name,?datetime.now().strftime('%Y-%m-%d_%H-%M-%S')))
????driver.save_screenshot(screenshot_file)
5.編寫頁面對象
在page目錄下的login_page.py文件中,封裝登錄頁面的元素定位和操作方法:
from?selenium.webdriver.common.by?import?By
from?utils.driver?import?get_driver
class?LoginPage:
????url?=?'/login.html'
????username_input?=?(By.ID,?'username')
????password_input?=?(By.ID,?'password')
????login_button?=?(By.ID,?'login-button')
????def?__init__(self):
????????self.driver?=?get_driver()
????def?open(self):
????????self.driver.get(get_base_url()?+?self.url)
????def?close(self):
????????self.driver.quit()
????def?login(self,?username,?password):
????????self.driver.find_element(*self.username_input).send_keys(username)
????????self.driver.find_element(*self.password_input).send_keys(password)
????????self.driver.find_element(*self.login_button).click()
6.編寫測試用例
在testcase目錄下的test_login.py文件中,編寫登錄測試用例:
import?unittest
from?page.login_page?import?LoginPage
from?utils.take_screenshot?import?take_screenshot
class?TestLogin(unittest.TestCase):
????def?setUp(self):
????????self.page?=?LoginPage()
????def?tearDown(self):
????????self.page.close()
????def?test_login_success(self):
????????self.page.open()
????????self.page.login('admin',?'admin123')
????????self.assertIn('Welcome',?self.page.driver.title)
????def?test_login_failure(self):
????????self.page.open()
????????self.page.login('admin',?'wrong_password')
????????self.assertIn('Login?failed',?self.page.driver.page_source)
????????take_screenshot('test_login_failure')
7.編寫測試執(zhí)行入口
在run.py文件中,編寫測試執(zhí)行入口:
import?unittest
from?datetime?import?datetime
from?utils.logger?import?get_logger
from?report?import?HTMLTestRunner
logger?=?get_logger(__name__)
if?__name__?==?'__main__':
????logger.info('Start?testing...')
????suite?=?unittest.defaultTestLoader.discover('testcase')
????report_file?=?'report/test_report_{}.html'.format(datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
????with?open(report_file,?'wb')?as?f:
????????runner?=?HTMLTestRunner.HTMLTestRunner(stream=f,?title='Test?Report',?description='Test?Result')
????????runner.run(suite)
????logger.info('Testing?finished.?Report?file:?{}'.format(report_file))
????
????#?將截圖嵌入測試報告
????with?open(report_file,?'r+',?encoding='utf-8')?as?f:
????????content?=?f.read()
????????for?root,?dirs,?files?in?os.walk('report/screenshots'):
????????????for?file?in?files:
????????????????screenshot_file?=?os.path.join(root,?file)
????????????????if?'test_report'?not?in?screenshot_file:
????????????????????screenshot_name?=?os.path.splitext(os.path.basename(screenshot_file))[0]
????????????????????screenshot_time?=?datetime.strptime(screenshot_name.split('_')[-2],?'%Y-%m-%d')
????????????????????screenshot_url?=?os.path.join(get_base_url(),?screenshot_file)
????????????????????content?=?content.replace('{}"'.format(screenshot_name),?'{}"?width="50%"'.format(screenshot_url))
????????f.seek(0)
????????f.write(content)
四、測試執(zhí)行
在項目目錄下執(zhí)行以下命令,執(zhí)行測試:
python?run.py
測試完成后,測試報告將保存在report目錄下的test_report.html文件中。
五、Jenkins持續(xù)集成
持續(xù)集成是軟件開發(fā)過程中非常重要的一環(huán),可以幫助開發(fā)團隊實現(xiàn)快速迭代和快速交付。Jenkins是一個開源的持續(xù)集成工具,可以幫助團隊實現(xiàn)自動化構建、自動化測試和自動化部署。本文將介紹如何使用Jenkins進行UI自動化測試的持續(xù)集成。
1.Jenkins安裝和配置
安裝Jenkins
Jenkins可以從官網(wǎng)下載安裝包,根據(jù)操作系統(tǒng)選擇相應的安裝包進行安裝。安裝完成后,啟動Jenkins服務。
安裝插件
Jenkins需要安裝一些插件來支持UI自動化測試,包括:
Selenium Plugin:用于集成Selenium和Jenkins。
HTML Publisher Plugin:用于生成測試報告。
在Jenkins的插件管理頁面中,搜索并安裝這兩個插件。
配置Jenkins
在Jenkins的系統(tǒng)管理頁面中,配置全局環(huán)境變量和全局工具配置。
配置全局環(huán)境變量:設置PYTHONPATH變量,指向Python的安裝目錄。
配置全局工具:添加Python和瀏覽器驅動的安裝路徑。
2.Jenkins配置UI自動化測試任務
創(chuàng)建Jenkins任務
在Jenkins的首頁中,點擊“新建任務”,選擇“自由風格軟件項目”,輸入任務名稱,點擊“確定”。
配置源碼管理
在任務配置頁面中,選擇“Git”作為源碼管理方式,填寫代碼倉庫地址和分支信息。
配置構建觸發(fā)器
在任務配置頁面中,選擇“構建觸發(fā)器”,配置定時構建或者代碼提交構建。
配置構建環(huán)境
在任務配置頁面中,選擇“構建環(huán)境”,配置Python環(huán)境和瀏覽器驅動。
配置構建步驟
在任務配置頁面中,選擇“構建步驟”,配置構建腳本。
構建腳本如下:
#!/bin/bash
#?安裝依賴包
pip?install?-r?requirements.txt
#?執(zhí)行測試
python?run.py
#?生成測試報告
cp?report/test_report.html?$WORKSPACE
#?發(fā)布測試報告
echo?'<h2>UI自動化測試報告</h2>'?>?report.html
echo?'<iframe?src="test_report.html"?width="100%"?height="600"></iframe>'?>>?report.html
cp?report.html?$WORKSPACE
配置構建后操作
在任務配置頁面中,選擇“構建后操作”,配置測試報告的發(fā)布方式。
發(fā)布方式如下:
發(fā)布HTML測試報告:選擇“HTML Publisher Plugin”,設置測試報告路徑為$WORKSPACE/report.html。
3.Jenkins測試執(zhí)行
在Jenkins的任務頁面中,點擊“立即構建”,Jenkins將自動拉取代碼,執(zhí)行測試,并生成測試報告。測試報告將發(fā)布到Jenkins的測試報告頁面中。文章來源:http://www.zghlxwxcb.cn/news/detail-426660.html
本文主要介紹了如何使用Python Selenium框架搭建UI自動化測試框架,并給出了一個完整的目錄結構示例進行參考。通過UI自動化測試框架,可以幫助團隊快速構建自動化測試框架,提高測試效率和測試質(zhì)量。希望本文能對你有所幫助。文章來源地址http://www.zghlxwxcb.cn/news/detail-426660.html
到了這里,關于Python Selenium搭建UI自動化測試框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!