【Playwright+Python】系列 Pytest 插件在Playwright中的使用

?

一、命令行使用詳解

使用?Pytest?插件在Playwright 中來編寫端到端的測試。

1、命令行執行測試
pytest --browser webkit --headed
2、使用 pytest.ini 文件配置

內容如下:

[pytest]
# Run firefox with UIaddopts = --headed --browser firefox

效果:運行測試類,可以直接可以按照配置執行 命令行執行,無需指定參數輸入pytest即可

3、CLI 參數詳解

前提:未使用pytest.ini配置

3.1、在帶頭模式下運行測試(默認:無頭)
pytest --headed
3.2、在不同的瀏覽器中運行測試

在不同的瀏覽器 chromium、firefox 或 webkit 中運行測試。可以多次指定(默認:chromium)

pytest --browser chromium --headed
?
3.3、使用的瀏覽器通道
pytest --browser-channel chrome --headed
3.4、將 Playwright 操作速度減慢指定的毫秒數

將 Playwright 操作速度減慢指定的毫秒數。很有用,以便您可以查看正在發生的事情(默認值:0)。

pytest --browser chromium --headed --slowmo 5000  # (5秒)
3.5、記錄測試結果

是否為每個測試記錄跟蹤。on、off或retain-on-failure(默認:off)

pytest --browser chromium --headed --tracing on
3.6、視頻錄制

是否為每個測試錄制視頻。on、off或retain-on-failure(默認:off)。

pytest --browser chromium --headed --video on

結果默認保存在test-results目錄下,和測試結果文件一樣

圖片

3.7、截圖

是否在每次測試后自動捕獲屏幕截圖。on、off或only-on-failure(默認:off)pytest --browser chromium --headed --screenshot on效果:

圖片

在失敗時截取整頁截圖(長截圖)默認情況下,僅捕獲視口。需要啟用 --screenshot(默認off).?

pytest --browser chromium --headed --screenshot on --full-page-screenshot

效果:

二、Fixtures夾具

因為我們使用fixture更加靈活,具體有獨立的命名,然后呢,還可以按模塊化的方式實現,每個fixture都可以互相調用,并且呢范圍可以跨函數、類、模塊、還有整個session范圍

那fixture怎么使用呢?

1、fixture初步使用

我們直接在函數前定義就可以 @pytest.fixture() 但是這塊是有一些注意事項:要定義的函數最好不要以test開頭,和用例分開,并且fixture定義的函數是有返回值的,下邊的測試用例可以調用fixture的返回值

我們看下實戰

@pytest.fixture()
def?set():print("----在用例前執行----")def?test_01(set):print('用例1')

這里我們定義了一個測試夾具,然后再test_01中使用了測試夾具的參數,那么執行結果應該是會先調用這個夾具函數,然后再執行用例函數

看下執行結果:

圖片

2、fixture進一步使用

我們還有一種使用fixture的方式@pytest.mark.usefixtures(fixture_name)這樣使用,我們如果用在類上呢,這個類下的所有用例都會調用這個fixture 直接看實戰:

@pytest.fixture()
def?set():print("----在用例前執行----")@pytest.mark.usefixtures('set')
class?Test_Demo():def?test_01(self):print('用例1')def?test_02(self):print('用例2')

看下結果:

每個用例前都執行了測試夾具

那么還有一種只作用在用例上呢 看實戰:

@pytest.fixture()
def?set():print("----在用例前執行----")class?Test_Demo():@pytest.mark.usefixtures('set')def?test_01(self):print('用例1')def?test_02(self):print('用例2')

執行結果:

圖片

只有用例1前執行了測試夾具

3、fixture作用域

在我們之前用了setupClass和tearDownclass,指的是在每個類前會執行前置,在執行后置 那我們在fixture中,也可以這樣使用 并且有好幾個:

  • unction:默認作用域,每個測試用例都運行一次

  • class:每個測試類只執行一次

  • module:每個模塊只執行一次

  • package:每個python包只執行一次

  • session:整個會話只執行一次,即運行項目時整個過程只執行一次

如果設置多個的話,會有一個優先級:session > package > module > class > function

那我們以其中的作用域為class做一個實戰場景:

@pytest.fixture(scope='class')
def?set():print("----在用例前執行----")class?Test_Demo1:def?test_01(self,set):print('用例1執行')def?test_02(self,set):print('用例2執行')class?Test_Demo2():def?test_01(self,set):print('第二個類中的用例1')

我們在夾具函數上定義每個類只執行一次 現在猜下執行結果是什么,是不是夾具——>Test_Demo1,夾具——>Test_Demo2 直接看結果:

?

4、自定義夾具的使用

對于browser和context夾具,請使用以下夾具來定義自定義啟動選項。

  • browser_type_launch_args:覆蓋 browser_type.launch() 的啟動參數。它應該返回一個 Dict。

  • browser_context_args:覆蓋 browser.new_context() 的選項。它應該返回一個 Dict。

示例代碼:

import?pytest@pytest.mark.browser_context_args(timezone_id="Europe/Berlin",?locale="en-GB")
def?test_browser_context_args(page):assert?page.evaluate("window.navigator.userAgent")?==?"Europe/Berlin"assert?page.evaluate("window.navigator.languages")?==?["de-DE"]

?

三、配置測試

1、并行測試
# install dependency
pip install pytest-xdist
# use the --numprocesses flag
pytest --numprocesses auto

根據測試的硬件和性質,可以將 numprocesses 設置為從 2 到計算機上的 CPU 數量之間的任意值。如果設置得太高,您可能會注意到意外行為。

2、跳過測試
@pytest.mark.skip("firefox")
def test_visit_example(page):page.goto("https://www.alipansou.com/")
3、配置 base-url執行

使用 base-url 參數啟動 Pytest。pytest-base-url 插件用于允許您從配置、CLI arg 或作為固定裝置設置基本 url 的插件。pytest --base-url [http://localhost:8080](http://localhost:8080)

def?test_visit_example(page):page.goto("/admin")#?->?Will?result?in?http://localhost:8080/admin
4、忽略 HTTPS 錯誤

conftest.py

import?pytest@pytest.fixture(scope="session")
def?browser_context_args(browser_context_args):return?{**browser_context_args,"ignore_https_errors":?True}
5、使用自定義視口大小

conftest.py

import?pytest@pytest.fixture(scope="session")
def?browser_context_args(browser_context_args):return?{**browser_context_args,"viewport":?{"width":?1920,"height":?1080,}}
6、設備仿真

conftest.py

import?pytest@pytest.fixture(scope="session")
def?browser_context_args(browser_context_args,?playwright):iphone_11?=?playwright.devices['iPhone?11?Pro']return?{**browser_context_args,**iphone_11,}

使用pytest --device="iPhone 11 Pro" --headed執行腳本效果:

圖片

?

7、與 unittest.TestCase的使用

與 unittest.TestCase。這有一個限制,即只能指定一個瀏覽器,并且在指定多個瀏覽器時不會生成多個瀏覽器的矩陣。示例代碼:

#?-*-?coding:?utf-8?-*-
#?@Time????:?2024/07/06?18:10
#?@Author??:?longrong.lang
#?@FileName:?test_unittest.py
#?@Software:?PyCharm
#?@Cnblogs :https://www.cnblogs.com/longronglang
#?@Motto:你只管努力,剩下的交給天意.
import?pytest
import?unittestfrom?playwright.sync_api?import?Pageclass?MyTest(unittest.TestCase):@pytest.fixture(autouse=True)def?setup(self,?page:?Page):self.page?=?pagedef?test_foobar(self):self.page.goto("https://microsoft.com")assert?self.page.evaluate("1?+?1")?==?2
8、運行調試

在測試代碼中使用 breakpoint() 語句暫停執行并獲取 pdb REPL。

def?test_bing_is_working(page):page.goto("https://bing.com")breakpoint()#?...

如何進行調試:

  1. 啟動調試:當程序在breakpoint()處暫停時,它會自動進入pdb調試環境。

  2. 查看狀態:在pdb中,你可以使用命令如l(list)來查看當前代碼周圍的行,p 變量名來打印變量的值。

  3. 繼續執行:要繼續執行程序直到下一個斷點或程序結束,你可以輸入c(continue)命令。

  4. 如果你只是想在特定點暫停代碼執行,但不希望進入pdb環境,可以考慮使用其他方法,比如打印語句(print())或條件斷點。

效果:

圖片

四、關于自動等待的說明

很可能您不需要手動等待,因為 Playwright 具有自動等待功能。如果你仍然依賴它,你應該使用 page.wait_for_timeout(5000) 而不是 time.sleep(5)最好不要等待超時,但有時它對調試很有用。在這些情況下,請使用我們的 wait (wait_for_timeout) 方法而不是 time 模塊。這是因為我們在內部依賴于異步操作,而當使用 time.sleep(5)它們無法得到正確的處理。

?

?

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

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

相關文章

云計算【第一階段(31)】PXE高效批量網絡裝機

一、系統安裝 1.1、系統裝機的三種引導方式 1. 硬盤 2. 光驅( u 盤) 3. 網絡啟動 pxe 1.2、系統安裝過程 加載boot loader Boot Loader 是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映…

【CSS in Depth 2 精譯】3.1.2 邏輯屬性 + 3.1.3 用好邏輯屬性的簡寫形式

當前內容所在位置(可進入專欄查看其他譯好的章節內容) 第一章 層疊、優先級與繼承(已完結) 1.1 層疊1.2 繼承1.3 特殊值1.4 簡寫屬性1.5 CSS 漸進式增強技術1.6 本章小結 第二章 相對單位(已完結) 2.1 相對…

深入探討:CPU問題的深度分析與調優

引言 你是否曾經遇到過這樣的情況:系統運行突然變慢,用戶抱怨不斷,檢查后發現CPU使用率居高不下?這時候,你會如何解決?本文將詳細解析CPU問題的分析與調優方法,幫助你在面對類似問題時游刃有余。 案例分析:一次CPU性能瓶頸的解決過程 某知名互聯網公司在一次促銷活動…

《Python數據科學之一:初見數據科學與環境》

《Python數據科學之一:初見數據科學與環境》 歡迎來到“Python數據科學”系列的第一篇文章。在這個系列中,我們將通過Python的鏡頭,深入探索數據科學的豐富世界。首先,讓我們設置和理解數據科學的基本概念以及在開始任何數據科學項…

實變函數精解【4】

文章目錄 說明點集與測度可數集定義性質示例與有限集的關系應用 可列集定義種類不可列集性質應用與意義 有限集性質示例與無限集的區別應用 可數集(Countable set)和可列集(Countably infinite set 或 Enumerable set)可數集可列集…

怎樣把pptx課件轉換成word文檔

如果你還沒有安裝python-pptx和python-docx,請先運行以下命令: pip install python-pptx python-docx from pptx import Presentation from docx import Document import re# 函數:清理文本,移除特殊字符和控制字符 def clean…

每日Attention學習11——Lightweight Dilated Bottleneck

模塊出處 [TITS 23] [link] [code] Lightweight Real-Time Semantic Segmentation Network With Efficient Transformer and CNN 模塊名稱 Lightweight Dilated Bottleneck (LDB) 模塊作用 改進的編碼器塊 模塊結構 模塊代碼 import torch import torch.nn as nn import to…

qt 添加一個圖片控件

在Qt中,要添加一個圖片控件,你通常會使用QLabel或者QGraphicsView來顯示圖片。下面是使用QLabel來顯示圖片的一種方法: 使用 QLabel 顯示圖片 在Qt Designer中添加QLabel 打開你的Qt Designer。從工具箱中找到QLabel控件,并將其拖…

C#如何進行深度學習對行人進行識別?

C#通常不是用于深度學習的主要語言,但是通過一些庫和框架,你可以輕松地在C#中實現深度學習。以下是使用C#進行深度學習的一些更詳細的步驟: 選擇合適的庫: ML.NET:這是微軟推出的一個機器學習庫,它很容易集成到.NET應用程序中。ML.NET支持廣泛的機器學習任務,包括深度學…

使用DeepWalk 和Word2Vec實現單詞Embedding

0、準備“邊”數據集Wiki_edgelist import pandas as pddf pd.read_csv(./data/wiki/Wiki_edgelist.txt, sep , headerNone, names["source", "target"]) df.head() 1、讀入 起點-終點 邊數據,構建圖 # 1、讀入 起點-終點 邊數據&#xff0c…

GIS就業相關問題快問快答

目錄 前言1.現在處于經濟下行期,GIS就業崗位是否減少了?2.我未來的打算是進體制內研發崗,這方面需要掌握哪些技能呢?3.GIS前端需要掌握哪些知識?4.GIS后端需要掌握哪些知識?5.不論是前端還是后端&#xff0…

編程語言都是哪些人開發出來的?為什么都是國外較小國家的人

編程語言都是哪些人開發出來的? 編程語言的開發者通常是來自計算機科學、軟件工程、數學、物理學等領域的專家、學者和工程師。這些開發者具備深厚的編程技能、算法知識、系統設計能力以及創新思維,他們致力于創造出能夠解決特定問題或滿足特定需求的編…

Docker入門(清晰認識)

為什么學習Docker? 再學完linux后,我們需要遠程對Linux虛擬機下載一些軟件,如果在Linux里直接用命令下載軟件會十分麻煩,所以我們需要通過使用Docker將軟件直接下載到Docker中,這樣更方便下載和卸載等操作。 一張圖弄…

javaScript的面試重點--預解析

目錄 一.前言 二.預解析案例 一.前言 關于預解析,我們通過今天學習就能夠知道解析器運行JS分為哪兩步;能夠說出變量提升的步驟和運行過程;能夠說出函數提升的步驟和運行過程。 二.預解析案例 預解析,簡而言之,也就是…

7.13實訓日志

上午 學習網絡安全的過程中,我們深入了解了網絡的不同層面和技術,從表層網絡到深網再到暗網,以及涉及的產業分類和技術工具。這些知識不僅幫助我們理解網絡的復雜性,還揭示了如何應對和防范各種網絡威脅。 首先,我們…

簡易秒表的實現

目錄 描述 輸入描述: 輸出描述: 參考代碼 描述 請編寫一個模塊,實現簡易秒表的功能:具有兩個輸出,當輸出端口second從1-60循環計數,每當second計數到60,輸出端口minute加一,一直…

當在多線程環境中使用 C++進行編程時,怎樣確保線程安全以及如何處理線程之間的同步和通信?

在C中確保線程安全性和處理線程之間的同步和通信有多種方法。下面是一些常用的技術和技巧: 互斥鎖:使用互斥鎖可以確保只有一個線程可以訪問共享資源。在訪問共享資源之前獲取鎖,在完成后釋放鎖。這可以防止多個線程同時訪問同一份數據&#…

007-端口隔離

端口隔離配置 端口隔離簡介 為了實現報文之間的二層隔離,可以將不同的端口加入不同的VLAN,但會浪費有限的VLAN資源。采用端口隔離特性,可以實現同一VLAN內端口之間的隔離。 設備支持以下方式進行端口隔離: 基于隔離組的端口隔…

中介子方程五十七

XXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXiXXpXXbXXiXOXWXyXkXXeXpXXαXXpXeXXkXyXWXOXiXXbXXpXXiXpXXhXiXXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXiXXpXXbXXiXOXWXyXkXXeXpXXα…

理解JavaScript中的對象傳遞與賦值操作

在JavaScript中,對象傳遞和賦值操作是兩個非常重要的概念。它們在日常開發中扮演著關鍵角色,但也常常會讓人感到困惑。本文將通過兩個簡單的例子,更好地理解它們的區別和實際應用。 示例代碼1:修改對象屬性 我們先來看第一段示例…