最近今天忙着優化框架,所以更新遲了些,先來看看在測試報告中加入截圖怎么做吧,稍后分享一下我最近優化的成果。
查了很多資料,看到最多的是通過hook函數去獲取用例執行狀態然后進行截圖,那個應該是最方便的,但是呢,我比較笨看不太懂,所以就用了從別人那里學來的另一個方法。
封裝一個斷言失敗添加截圖的方法。
代碼示例:
def get_screenshot(self, doc):
global logger
logger = DemoLog().get_log()
logger.info('開始截圖')
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
pic_name = now + '.png'
self.driver.get_screenshot_as_file(pic_name)
with open(pic_name, mode='rb') as f:
file = f.read()
allure.attach(file, doc, allure.attachment_type.PNG)
return pic_name
# 通過斷言進行截圖
def result_assert(self, res, expected, doc=''):
try:
assert res in expected
except AssertionError:
screen_name = self.get_screenshot(doc)
logger.info(f'截圖成功,圖片為{screen_name}')
raise
解讀一下上面的兩個方法
日志的之前講過,我就直接略過了
設置一個當前時間作為變量,然后用這個時間加入到圖片名字里,這樣可以避免圖片名字的重復
driver.get_screenshot_as_file()這個方法是截圖用的,使用驅動器進行截圖,並命名為pic_name
然后讀取截圖的圖片文件,allure.attach是將該截圖文件添加進測試報告,doc參數在下面斷言的方法中傳入
嘗試進行斷言,如果res在excepted中則通過,否則拋出斷言錯誤,並且調用截圖方法並加入測試報告
上面的res是你想斷言的結果,excepted是元素的屬性,doc是斷言后的提示語。
在寫斷言的時候就可以直接調用,這樣一旦斷言失敗就可以自動截圖並添加到報告中了