playwright+pytest+BDD+pom書寫自動化用例


BDD行為驅動開發是從用戶視角描述我需要哪些特性,我們的驗證場景是什么,保證文檔與代碼的統一、設計與測試的統一、開發出更符合需求的測試用例

BDD分為fixture(特性) scenario(場景) given(前置條件) when(用戶操作) then(預期結果)

fixture(特性):是向最終用戶或其他涉眾提供的一項功能,以支持他們實現業務目標所需的功能。

scenario(場景):用戶在訪問應用時,用戶和應用之間有多種條件需要滿足,每一種不同的情況都對應不同的場景,簡短的聲明性句子來總結這個例子的特別之處

 given(前置條件):在測試操作前有哪些先決條件?應該定義出所有的但不場景該場景要求范圍的先決條件,given主要為后面的測試主體服務

when (用戶操作):用戶做了哪個操作,輸入了哪些數據

then (預期結果):回應行操作的預期結果,用戶做了操作后會觸發系統產生什么樣的變化、輸出的數據是什么

 

 

那么我們怎么將playwright pytest BDD結合起來書寫自動化用例

1、下載插件pytest-bdd

pip insall  pytest-bdd

2、創建.feature文件,每個feature文件中僅有一個Feature描述

@hotlink @shop
  Feature: As a new user,
    I want to be order a t-shirt,
    In order to buy a t-shirt, I must register my account
#background每個場景相同的前置部分
    Background:
      Given Sean 打開網站首頁

    Scenario: 我登錄購物網站后按照購物流程進行下單
      Given Sean 登錄xx購物網站
      And Sean 打開了T-shirt 分類
      When Sean 選了一件T-shirt加入購物車
      And Sean 完成了下單
      When Sean 查看個人資料訂單頁面
      Then Sean 訂單頁面有T-shirt訂單

3、將feature文件中的given(前置條件) when(用戶操作) then(預期結果)轉化為POM中封裝的頁面元素操作,(pom封裝如下https://www.cnblogs.com/mumu-lin/p/15585133.html)

也可以轉換未封裝的元素操作

import allure
from pytest_bdd import (
    given,
    scenario,
    then,
    when
)
# 需要從pytest_bdd中導入given、when、then等
from page_objects.registation.registration_object import RegistrationPage from page_objects.shop.shop_object import ShopPage from utils.bdd_helper import BddHelper feature_path = BddHelper.get_feature_path("shop/shop_order_t_shirt.feature")
@scenario(feature_path, '我登錄購物網站后按照購物流程進行下單')
def test_shop_order_t_shirt():
"""我按照購物流程進行下單, 新用戶注冊等操作."""
pass
#使用scenario decorator修飾的函數的行為類似於正常的測試函數,它們將在所有場景步驟之后執行。但是更建議將邏輯僅包含在given、when then中

@when('Sean 完成了下單')
def finish_order_after_registration(page):
    """Sean 完成了下單."""
    ShopPage(page).finish_order_after_registration()


@given('Sean 打開了T-shirt 分類')
def open_t_shirt_category(page):
    """Sean 打開了T-shirt 分類."""
    ShopPage(page).open_t_shirt_category()


@given('Sean 打開網站首頁')
def open_site(page):
    """Sean 打開網站首頁."""
    ShopPage(page).open_site()


@when('Sean 查看個人資料訂單頁面')
def open_profile_order_page(page):
    """Sean 查看個人資料訂單頁面."""
    ShopPage(page).open_profile_order_page()

4、執行測試用例

使用@scenario裝飾器的函數其實就是一個測試用例,所以我們只需要運行含有@scenario即可運行我們的測試用例。注意:pytest中檢索測試用例的規則是 文件名、測試用例、類名默認要以Test開頭。

如果不想按照每個feature文件都進行注冊的話,可以按照目錄進行注冊。然后使用pytest 執行當前文件即可運行對應的features

#方式一:獲取當前features目錄下的所有feature
scenarios(feature_path)
#方式二:獲取某個目錄或某個features,這些路徑可以是要素文件或要素文件夾。
scenarios(feature_path, 'other_features/some.feature', 'some_other_features')
#方式三:僅綁定有個場景
@scenario(feature_path, '進入首頁后, 查看附件數量')
def test_shop_attachment_count():
    pass
if __name__ == '__main__':
pytest.main(['-v', 'D:\\jiaoben\\ui-test-regression-main\\tests\step_definition\\shop\\test_bdd_shop.py'])

 

從個人感覺上來說,BDD用例的given(前置條件) when(用戶操作) then(預期結果)如何封裝和存放,維護起來更方便,這個是需要慢慢摸索和調整的,避免在不同的文件夾下封裝了多個相同的step

參考資料:

https://pypi.org/project/pytest-bdd/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM