這次會接續上次的實作把截圖做完,並介紹 conftest 的強大之處。
簡單來講,conftest 就是專門放 fixture 的檔案。前面有提過 fixture,它可以說是 setup/teardown 的上位替代版本。可實現 setup/teardown 之外也能設定作用範圍。我們要做的就是在 conftest 上寫建置瀏覽器的步驟。
import pytest
import allure
from allure_commons.types import AttachmentType
from browser import Browser
class InitBrowser:
@pytest.fixture(scope='function', autouse=True)
@allure.title("瀏覽器設定")
def setup_browser(self):
self.browser = Browser().get_browser()
yield
allure.attach(self.browser.get_screenshot_as_png(), name="Screenshot", attachment_type=AttachmentType.PNG)
self.browser.quit()
fixture 設定成自動執行(autouse),也就是不用把函式特地傳到 test 檔裡面,再把剛剛寫的 browser 設定瀏覽器的部分 import 進 conftest,再用 allure.attach 把瀏覽器截圖連結到 allure 即可。
寫在 conftest 裡面,除了可以讓 fixture 自動執行,讓之後每一條自動化的 case 都可以在開始的時候自動執行瀏覽器初始化的步驟,節省 code 數且更好維護外,在 fixture 中可以使用 yield,把瀏覽器初始化分成 setup 與 teardown,這樣就可以達到我們「在 case 結束瞬間截圖的目的」。
而 conftest 不只能做瀏覽器初始化,只要是 case 共通會跑到的部分,我們都可以用 conftest 處理,這也是 conftest 強大的地方。
@allure.step("前往我的文章")
def go_to_my_article(self):
with allure.step("點擊帳號圖示"):
self.click_element(self.account_icon)
time.sleep(2)
#with allure.step("點擊我的文章"):
#self.click_element(self.my_article)
我們把點擊我的文章的動作拔掉,並實際執行 test
可以看到畫面停留在點擊頭像那步,截圖成功。
下一篇預計會補充之前 D6 講到的 XPATH 的進階查詢方法。