這次要在 allure 內新增截圖。當 case 結束時,會在程式關閉瞬間截圖並在 allure 裡面的 case 顯示。
這樣會比起看 step 哪邊出錯更好找 bug,也比較好判斷問題在哪(例如網頁 loading 太久或是沒有成功抓到元素等等)。
要實現截圖並放在 allure 的功能不難,只要用 allure.attach 即可。
from allure_commons.types import AttachmentType
allure.attach(self.browser.get_screenshot_as_png(), name="Screenshot", attachment_type=AttachmentType.PNG)
截圖功能最複雜的地方是要在 case 結束的時候截圖,目前我們是在 test 的開頭初始化瀏覽器,這樣不好實作截圖功能,因此這次我們要把瀏覽器初始化的部分獨立出來。
而我們要做的第一步是把原本在 test 上面初始化瀏覽器的區塊移到獨立的 py 檔。
在一開始寫自動化的時候,由於 case 跟執行的操作只有一個,所以把瀏覽器初始化的部分直接寫在 test 上,但是在實際寫網頁自動化測試專案的時候 case 絕對不會只有一條,所以遲早都要把瀏覽器的部分抽出來。
browser. py
class Browser:
def __init__(self) -> None:
pass
def get_browser(self):
# 設定 ChromeDriver 的路徑
browesr_path = "c:\Program Files\chromedriver-win64\chromedriver-win64\chromedriver.exe"
service = Service(browesr_path)
# 設定 Chrome 的啟動參數
options = Options()
# 設定瀏覽器語言為中文
options.add_argument("--lang=zh-TW")
# 全螢幕模式
options.add_argument("--kiosk")
browser = webdriver.Chrome(service=service, options=options)
return browser
除了把原本的 def 改成 Class 以外,基本上就是直接搬過來。會改成 Class 的原因是因為要在 conftest 上執行。
下一篇會介紹 conftest 以及做完截圖的部分。在講 fixture 的時候沒介紹到 conftest,在下一篇也會一併展示 conftest 強大的地方。