python web自動化(分布式測試Grid)

Grid介紹

????????Selenium Grid 是 Selenium 提供的?個?具,?于?持在多臺計算機上并?運?測試。

????????它允許將測試分發到不同的機器和瀏覽器組合上,同時收集結果。

? 1.并?執?測試?例:在不同的機器上并?執?測試?例,從?加速整個測試過程。每個

? ? ? ? ? 節點可以并?地運?測試,?般?于?型測試套件和?規模的項?

? ? ? ? 2.多瀏覽器和多平臺測試:在不同的機器上同時運?測試,可以同時在不同的瀏覽器和操作系統上執?測試。確保應?程序的跨瀏覽器和跨平臺兼容性?常重要\

????????3. 資源最?化利?: 可以利??絡上多臺機器的資源,?不是僅僅依賴于本地機器的資源。可以更有效地使?硬件資源,尤其是在?規模測試或者需要?量瀏覽器并?執?的情況下
? ? ? ? 4.分布式測試環境: 可以設置為在不同的物理位置、不同的?絡環境或不同的云服務上運?測試。這允許你創建 ?個分布式的測試環境,以模擬真實的不同使?情境

? ? ? ? 5.提?可靠性: 在分布式環境下執?測試可以提?測試的可靠性。如果?個節點失敗,其他節點仍然可以繼續執?測 試,從?減?了整個測試過程受到?個節點失敗的影響

Grid快速??

? ? ? ? ? ? 1.首先我們要配置jdk的運行環境

? ? ? ? ? ? ?2.安裝google瀏覽器,并且配置chromedriver驅動

? ? ? ? ? ? ? 3.下載selenium-server-4.5.0.jar插件

????????????????https://github.c om/SeleniumHQ/selenium/releases/tag/selenium-4.5.0

環境都配置好后,在下載的selenium-server-4.5.0.jar所在的?錄層級打開cmd,并且輸?命令啟動grid:
????????????????

?件名(selenium-server-<version>.jar)盡可能的?tab?動補全,
防??動輸?有誤
示例:
java -jar selenium-server-4.5.0.jar standalone
注:啟動服務之后,切記不要關閉cmd窗?,否則服務就會被終?,
?法訪問

啟動之后,?google瀏覽器打開: http://127.0.0.1:4444,出現如下??及成功
????????????????

?將執??例的機器添加到監控端,在代碼中進?如下配置

????????????????

import allure
import pytest
from selenium import webdriver@pytest.fixture()
def browser():global driver# 01 用例的前置步驟,初始化瀏覽器對象chrome_options = webdriver.ChromeOptions()driver = webdriver.Remote(command_executor="http://127.0.0.1:4444",options=chrome_options)# 02 用例執行,返回driveryield driver# 03 用例的后置步驟,關閉瀏覽器driver.quit()@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport():# 獲取測試用例的執行結果,yield,返回給out對象,然后再去轉化為result對象out = yield"""從result對象out獲取調用結果的測試報告,返回一個report對象report對象的屬性:包括when(setup,call,teardown等三個值)、nodeid(測試用例的名稱)、outcome(用例的執行結果, passed, failed)"""report = out.get_result()  # 返回一個report對象# 僅僅獲取用例call階段的執行結果,不包含setup、teardownif report.when == "call":# 獲取用例call執行結果為失敗的情況xfail = hasattr(report, "wasxfail")  # hasattr方法會:返回對象是否具有給定名稱的屬性# 如果測試用例被跳過且標記為預期失敗,或者測試用例執行失敗且不是預期失敗if (report.skipped and xfail) or (report.failed and not xfail):# 添加allure報告截圖with allure.step("添加失敗的截圖 ---> "):allure.attach(driver.get_screenshot_as_png(), "失敗的截圖",allure.attachment_type.PNG)elif report.passed:# 如果測試用例執行通過,添加allure報告截圖with allure.step("添加成功的截圖 ---> "):allure.attach(driver.get_screenshot_as_png(), "成功的截圖",allure.attachment_type.PNG)

Grid模式詳解

? ? ? ? 1.Standalone(獨?模式)

????????????????Standalone將所有Grid組件?縫地組合為?個。以獨?模式運?Grid可以在單個進程中? ? ? ? ? ? ? ? ?使?單個命令獲得功能完整的Grid。單機只能在?臺機器上運?

????????????????Standalone也是運轉Selenium Grid最簡單的模式。默認情況下,服務器將監聽? ? ? ? ? ? ? ? ? ? ? ? ? ? ? http://localho st:4444上的RemoteWebDriver請求。默認情況下,服務器將從System? ? ? ? ? ? ? ? ? ? ? PATH(環境變量)中檢測可?的驅動程序

? ? ? ? 2.Hub and Node (中?和節點模式)

????????????????中?和節點是使?最多的模式,因為它允許:
????????????????將不同的機器組合在?個Grid中

????????????????例如,使?不同操作系統和/或瀏覽器版本的機器

????????????????使?統???點來在不同的環境中運?WebDriver測試在不破壞Grid的情況下,增加或? ? ? ? ? ? ? ? ? ?減少組件

? ? ? ? ? ?3.Hub(主控制節點)

????????????????Hub 是 Selenium Grid 的中?控制節點,負責管理和分發測試請求。

? ? ? ? ? ? ? Hub 接收來?測試腳本的請求,然后將這些請求分發給連接到 Grid 的各個 Node 上執? ? ? ? ? ? ? ? ? ??。

????????????????功能:
? ? ? ? 4.Node(執?測試的節點)

????????????????Node 是 Selenium Grid 中的?作節點,負責實際執?測試?例。

? ? ? ? ? ? ? ? ??個 Grid 中可以有多個 Node,每個 Node 都可以運?在不同的機器上,甚?可以具有? ? ? ? ? ? ? ? ?不同的操作系統和瀏覽器組合。

????????????????同?機器上的多個節點
? ? ? ? ? ? ? ? ?設置不同的端?
????????????????

java -jar selenium-server-4.5.0.jar node --port 6666

???????????????

運?的main.py?件采?多線程的運??式
????????

import pytest
if __name__ == '__main__':
pytest.main(['-vs', '-n', '3'])

什么時候應該使?Grid

????????多瀏覽器和多平臺測試
? ? ?1.? ?當你需要在不同的瀏覽器類型、版本和操作系統上同時運?測試時,Selenium

? ? ? ? Grid 是?個理想的選擇。它允許在多個節點上并?運?測試,每個節點可以代表不同的瀏覽? ? ? ? ? 器和操作系統組合

? ? ? ? 2.減少測試執?時間

? ? ? ? ? ? 對于?型測試套件,Selenium Grid 可以顯著減少測試執?時間。通過并?執?測試,你可以在相同的時間內完成更多的測試任務,提?測試效率

? ? ? ? 3.提?測試覆蓋率
????????通過在不同瀏覽器和平臺上并?運?測試,你可以更全?地測試應?程序,確保其在各種環境下的穩定性和?致性
? ? ? ? 4.快速反饋
????????縮短測試套件執?的時間,可以更快地獲得測試結果。這對于在持續集成和持續交付環境中迅速反饋開發?員和團隊?常重要
????????5. 資源最?化
????????利?多臺計算機(節點)上的瀏覽器實例,充分利?可?資源,提?測試并?性,避免資源浪費
????????6. ?動化平臺兼容性測試
????????????????當你需要測試應?程序在不同瀏覽器和平臺上的兼容性時,Selenium Grid 是?個強?的?具。它使你能夠同時在多個環境中驗證應?程序的性能和功能
?

服務Grid的組件(了解)????????

? ? 主要包括路由器(Router)、分發器(Distributor)、會話映射(Session Map)、新會? ? ? ? ? ? ? ?話隊列(New Session Queue)、節點(Node)和事件總線(Event Bus)

????????

封裝日志

? ? ? ? ? ? ? ?我們新建一個pytest.ini的文件

????????????????

[pytest]
log_cli = true
log_cli_level = INFO
log_cli_fromat = %(asctimes)s [%(levelname)s] %(message)s
log_cli_date_fromat = %Y-%m-%d %H:%M:%S
log_file = pytest.log

各個名詞的解釋

????????

[pytest]
; 這個里面的變量名都是固定的,不能隨意修改
; 啟用在命令行界面(CLI)上輸出日志。
log_cli = true; 設置輸出日志級別
log_cli_level = INFO; 指定命令行頁面(CLI)上日志輸出的格式
; 日志記錄的時間(年月日時分秒,代碼格式: %Y-%m-%d %H:%M:%S)
; 日志級別
; 日志消息
log_cli_fromat = %(asctimes)s [%(levelname)s] %(message)s; 設置時間格式
log_cli_date_fromat = %Y-%m-%d %H:%M:%S; 設置日志保存文件
log_file = pytest.log

應用到conftest中

????????

import loggingimport allure
import pytest
from selenium import webdriver@pytest.fixture()
def browser():global driver# 01 用例的前置步驟,初始化瀏覽器對象driver = webdriver.Chrome()# 02 用例執行,返回driveryield driver# 03 用例的后置步驟,關閉瀏覽器driver.quit()@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):# 獲取測試用例的執行結果,yield,返回給out對象,然后再去轉化為result對象out = yield"""從result對象out獲取調用結果的測試報告,返回一個report對象report對象的屬性:包括when(setup,call,teardown等三個值)、nodeid(測試用例的名稱)、outcome(用例的執行結果, passed, failed)"""report = out.get_result()  # 返回一個report對象# 僅僅獲取用例call階段的執行結果,不包含setup、teardownif report.when == "call":# 修改之前的版本:# logging.info("--------->日志的頭部<---------")# logging.info(f"用例ID:{report.nodeid}")# logging.info(f"測試結果:{report.outcome}")# logging.info(f"故障標識:{report.longrepr}")# logging.info(f"異常信息:{call.excinfo}")# logging.info(f"用例耗時:{report.duration}")# logging.info("--------->日志的尾部<---------")# 修改之后的版本:allure.attach("--------->日志的頭部<---------")allure.attach(f"用例ID:{report.nodeid}", name="用例ID")allure.attach(f"測試結果:{report.outcome}", name="測試結果")allure.attach(f"故障標識:{report.longrepr}", name="故障標識")allure.attach(f"異常信息:{call.excinfo}", name="異常信息")allure.attach(f"用例耗時:{report.duration}", name="用例耗時")allure.attach("--------->日志的尾部<---------")# 獲取用例call執行結果為失敗的情況xfail = hasattr(report, "wasxfail")  # hasattr方法會:返回對象是否具有給定名稱的屬性# 如果測試用例被跳過且標記為預期失敗,或者測試用例執行失敗且不是預期失敗if (report.skipped and xfail) or (report.failed and not xfail):# 添加allure報告截圖with allure.step("添加失敗的截圖 ---> "):allure.attach(driver.get_screenshot_as_png(), "失敗的截圖",allure.attachment_type.PNG)elif report.passed:# 如果測試用例執行通過,添加allure報告截圖with allure.step("添加成功的截圖 ---> "):allure.attach(driver.get_screenshot_as_png(), "成功的截圖",allure.attachment_type.PNG)


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15963.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vulhub——adminer

文章目錄 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;遠程文件讀取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一個PHP編寫的開源數據庫管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

如何在WRF模型中更好地設置這些海洋物理參數以提高模擬精度?

在WRF&#xff08;Weather Research and Forecasting&#xff09;模型中正確設置海洠物理參數是提高模擬精度的關鍵&#xff0c;特別是當模擬涉及到海洋和大氣的相互作用時。以下是一些提高模擬精度的策略和建議&#xff1a; 1. 理解模擬的地區和目標 在進行參數設置之前&…

基于SpringBoot+Vue的人事管理系統

引言 目前,人事管理的系統大都是CS架構的大型系統,很少有面向機關,事業單位內部的基于BS架構的微型人事系統,因此.開發一個基于BS架構的人事信息管理系統是非常必要的.但是基于BS架構的人事系統對于安全是一個大的考驗點.在人事信息系統中,功能需簡單清晰,可操作性強,其次安全…

使用paddlepaddle框架構建ViT用于CIFAR10圖像分類

使用paddlepaddle框架構建ViT用于CIFAR10圖像分類 硬件環境&#xff1a;GPU (1 * NVIDIA T4) 運行時間&#xff1a;一個epoch大概一分鐘 import paddle import time import paddle.nn as nn import paddle.nn.functional as F import paddle.vision.transforms as transforms…

CCF-GESP 等級考試 2023年3月認證C++一級真題解析

2024年03月真題 一、單選題&#xff08;每題2分&#xff0c;共30分&#xff09; 第 1 題 以下不屬于計算機輸入設備的有&#xff08; &#xff09;。 A. 鍵盤B. 音箱C. 鼠標D. 傳感器 正確答案&#xff1a;B. 音箱 解析&#xff1a; A. 鍵盤&#xff1a;鍵盤是輸入設備。B. …

第六節:帶你全面理解vue3 淺層響應式API: shallowRef, shallowReactive, shallowReadonly

前言 前面兩章,給大家講解了vue3中ref, reactive,readonly創建響應式數據的API, 以及常用的計算屬性computed, 偵聽器watch,watchEffect的使用 其中reactive, ref, readonly創建的響應式數據都是深層響應. 而本章主要給大家講解以上三個API 對應的創建淺層響應式數據的 API,…

Java面試題:Executor框架在Java并發編程中扮演什么角色?如何使用它?

在Java并發編程中&#xff0c;Executor框架扮演著核心角色&#xff0c;它提供了一種高級的、線程安全的機制來異步執行任務。Executor框架的主要目的是將任務的提交與任務的執行分離&#xff0c;從而簡化了多線程編程的復雜性。 Executor框架的角色&#xff1a; 任務與線程分離…

持續總結中!2024年面試必問 20 道 Redis面試題(八)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 20 道 Redis面試題&#xff08;七&#xff09;-CSDN博客 十五、使用過Redis做異步隊列么&#xff0c;你是怎么用的&#xff1f; Redis作為一個高性能的鍵值存儲系統&#xff0c;非常適合用來實現異步隊列。異步隊…

【STM32單片機】----實現LED燈閃爍實戰

&#x1f3a9; 歡迎來到技術探索的奇幻世界&#x1f468;?&#x1f4bb; &#x1f4dc; 個人主頁&#xff1a;一倫明悅-CSDN博客 ?&#x1f3fb; 作者簡介&#xff1a; C軟件開發、Python機器學習愛好者 &#x1f5e3;? 互動與支持&#xff1a;&#x1f4ac;評論 &…

【機器學習-23】關聯規則(Apriori)算法:介紹、應用與實現

在現代數據分析中&#xff0c;經常需要從大規模數據集中挖掘有用的信息。關聯規則挖掘是一種強大的技術&#xff0c;可以揭示數據中的隱藏關系和規律。本文將介紹如何使用Python進行關聯規則挖掘&#xff0c;以幫助您發現數據中的有趣模式。 一、引言 1. 簡要介紹關聯規則學習…

[處理器芯片]-5 超標量CPU實現之ALU

ALU&#xff08;Arithmetic Logic Unit&#xff0c;算術邏輯單元&#xff09;&#xff0c;是CPU執行單元中最主要的組成部分。 1 主要功能 算術運算&#xff1a;執行加法、減法、乘法和除法等算術運算。 邏輯運算&#xff1a;執行與、或、非、異或等邏輯運算。 移位運算&am…

動態路由實驗—OSPF

動態路由協議實驗-------OSPF 鏈路狀態路由選擇協議又被稱為最短路徑優先協議&#xff0c;它基SPF&#xff08;shortest path first &#xff09;算法 實驗要求&#xff1a;各個PC之間能夠互通 1.四臺PC配置如下 PC1 PC2 PC3 PC4 2.配置各個交換機的口子的IP R1 <HUAWE…

Room注解無效原因

在Android項目中&#xff0c;如果父模塊使用Kotlin&#xff0c;而子模塊用Java編寫&#xff0c;并且在子模塊中使用了Room庫&#xff0c;那么你會發現需要使用kapt而不是annotationProcessor來處理Room注解。這里有幾個原因和背景知識&#xff1a; 1. 項目配置的影響 父模塊的…

spiderfoot一鍵掃描IP信息(KALI工具系列九)

目錄 1、KALI LINUX簡介 2、spiderfoot工具簡介 3、在KALI中使用spiderfoot 3.1 目標主機IP&#xff08;win&#xff09; 3.2 KALI的IP 4、命令示例 4.1 web訪問 4.2 掃描并進行DNS解析 4.3 全面掃描 5、總結 1、KALI LINUX簡介 Kali Linux 是一個功能強大、多才多…

YOLOv8+PyQt:實時檢測(攝像頭、視頻)

1.YOLO&#xff1a;CPU實時檢測&#xff08;攝像頭、視頻&#xff09;https://blog.csdn.net/qq_45445740/article/details/106557451 2.YOLOv8PyQt&#xff0c;實現攝像頭或視頻的實時檢測 需要安裝 PySide6 和 ultralytics pip install PySide6 pip install ultralyticsfr…

基于docxtpl的模板生成Word

docxtpl是一個用于生成Microsoft Word文檔的模板引擎庫。它結合了docx模塊和Jinja2模板引擎&#xff0c;使用戶能夠使用Microsoft Word模板文件并在其中填充動態數據。這個庫提供了一種方便的方式來生成個性化的Word文檔&#xff0c;并支持條件語句、循環語句和變量等控制結構&…

如何在 Elasticsearch 中選擇精確 kNN 搜索和近似 kNN 搜索

作者&#xff1a;來自 Elastic Carlos Delgado kNN 是什么&#xff1f; 語義搜索&#xff08;semantic search&#xff09;是相關性排名的強大工具。 它使你不僅可以使用關鍵字&#xff0c;還可以考慮文檔和查詢的實際含義。 語義搜索基于向量搜索&#xff08;vector search&…

Angular Ivy:新渲染引擎的性能提升與優化

Angular Ivy是Angular 9及更高版本中引入的默認渲染引擎&#xff0c;它取代了以前的View Engine。Ivy的目標是提高Angular的性能、減少包大小和提高開發者的生產力。 1. AOT編譯的改進&#xff1a; 在Ivy中&#xff0c;Angular使用了更早的AOT&#xff08;Ahead-of-Time&…

在AnolisOS8.9系統安裝docker-compose

在AnolisOS8.9系統安裝docker-compose 下載docker-compose之前請先確保docker已經安裝完&#xff0c;教程可以參考 在阿里Anolis OS 8.9龍蜥操作系統安裝docker 下載最新版的docker-compose文件 sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0…

大數據工具之HIVE-參數調優,調度亂碼(二)

一、調度亂碼 在利用HUE工具,搭建WORKFLOW流程的過程中,如果直接執行hivesql數據正常,不會出現亂碼現象,如果利用WORKFLOW搭建的流程,進行數據的拉取,會出現數據中文亂碼現象,這些亂碼主要是由于select 中的硬編碼中文導致出現的現象 具體現象如下: select case when …