前言
當我們在公司跑UI自動化的時候,一般都會選擇晚上或者工作日休息時進行運行。那么當程序這時運行,如果自動化出現(xiàn)錯誤,我們又不知道當時頁面是什么原因導致測試用例失敗,怎么辦?
這個時候我們就想到在其測試用例失敗的時候,進行自動截圖當時圖片,然后保存下來,這樣當測試人員后面查看測試報告時,就可以很清楚的看到當時錯誤內(nèi)容,然后排查測試用例失敗的原因。
![]()
今天小編就介紹幾種在自動化測試報告中增加測試用例失敗的截圖的方法,這里小編運用了UI自動化測試中常用的兩種單元測試框架,進行為其增加在測試報告中增加其失敗截圖。
UnitTest
UnitTest屬于早期的Python的單元測試,其功能雖然沒有Pytest強大,但也能符合并滿足我們當時的功能需求,UnitTest屬于Python自帶的單元測試框架,類似于Java的JUnit。
UnitTest支持編寫測試自動化用例,多個用例中共享一個前置和后置內(nèi)容,有多種執(zhí)行測試用例的方法,支持生成獨立的測試報告內(nèi)容。
具體詳情可以了解官方文檔:https://docs.python.org/2/library/unittest.html
UnitTest生成的測試報告常見的有HTMLTestrunner,這個是屬于Python的一個標準庫,需要下載,下載完成后使用時候,直接進行調(diào)用即可。
HTMLTestrunner支持截圖功能,需要二次開發(fā),具體開發(fā)內(nèi)容小編就不做太多介紹,小編從網(wǎng)上下載一個開源的HTMLTestrunner,存放在我們的測試路徑下,接下來就直接使用代碼進行調(diào)用:
#coding:utf-8
import unittest
import HTMLTestRunner_cn
fromseleniumimport webdriver
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver=webdriver.Chrome()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_01(self):
"""定位失敗截圖案例"""
self.driver.get("https://www.baidu.com")
self.driver.find_element_by_id('anjing').send_keys('百度一下')
self.driver.find_element_by_id('su').click()
self.assertTrue(True)
def test_02(self):
"""成功案例"""
self.driver.get("https://www.baidu.com")
self.assertIn("百度一下,你就知道",self.driver.title)
if__name__=="__main__":
testunit=unittest.TestSuite()
#加載用例
testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test))
#執(zhí)行用例
runner=HTMLTestRunner_cn.HTMLTestRunner(title="自動化測試報告",
description="測試結果",
stream=open("result.html","wb"),
runner.run(testunit)
代碼編寫完成后,直接進行執(zhí)行程序,執(zhí)行完成后,就會發(fā)現(xiàn)我們測試報告已經(jīng)生成了,直接打開就可以看到自動化測試結果,失敗的存在截圖信息。
![]()
Pytest
Pytest是一個使創(chuàng)建簡單及可擴展性測試用例變得非常方便的框架,測試用例清晰、易讀而無需大量的繁瑣代碼。
只要幾分鐘你就可以對你的應用程序或者庫展開一個小型的單元測試或者復雜的功能測試。Pytest支持第三方插件,靈活性較高。
這里小編通過Pytest生成的Allure報告中添加測試報告內(nèi)容。其中Allure屬于一種開源的測試框架,可以基于多種語言進行使用,如Java的JUnit、Python的Pytest。
alluer生成的報告內(nèi)容比較美觀,目前測試中常用的測試報告。Allure的環(huán)境是基于Java環(huán)境的,前提條件需要將Java的環(huán)境安裝完成(下載JDK,配置環(huán)境變量)。
下載地址:https://github.com/allure-framework/allure2(具體安裝不在過多介紹)。
我們需要在conftest.py文件中去收集Pytest測試用例中失敗的結果,小編這里選擇用pytest_runtest_makereport函數(shù)來幫忙實現(xiàn)。
#conftest.py
from selenium import webdriver
import pytest
import time
import allure
te=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())
@pytest.hookimpl(tryfirst=True,hookwrapper=True)
def pytest_runtest_makereport(item,call):
#獲取鉤子方法的調(diào)用結果
outcome=yield
rep=outcome.get_result()
#僅僅獲取用例call執(zhí)行結果是失敗的情況
if rep.when=="call"and rep.failed:
#添加allure報告截圖
with allure.step('失敗截圖:'):
#將截圖添加到報告中,圖片名稱已當前時間。
allure.attach(d.get_screenshot_as_png(),name=te,
attachment_type=allure.attachment_type.PNG)
#配置瀏覽器驅動,不顯示瀏覽器執(zhí)行過程
@pytest.fixture(scope="session")
def driver():
global d
options=webdriver.ChromeOptions()
options.add_argument("--headless")
d=webdriver.Chrome(options=options)
yield d
d.quit()
編寫兩個簡單的測試用例,一個測試用例失敗,一個測試用例成功。
#coding:utf-8
def test_01(driver):
#失敗案例
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('51testing軟件測試網(wǎng)')
t=driver.title
assert t=='51testing軟件測試網(wǎng)'
def test_02(driver):
#成功案例
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('安靜')
t=driver.title
assert t=='百度一下,你就知道'
然后運行Pytest并且生成Allure報告,查看到Allure報告中,已經(jīng)將對應的失敗截圖已經(jīng)添加到其中了。
![]()
總結
小編分別通過UnitTest和Pytest在測試用例中增加對應的失敗截圖功能,其中關于UnitTest比較簡單,直接在網(wǎng)上查找對應的Htmltestrunner報告就可以了。
但是在Allure報告中添加失敗截圖,需要在conftest.py中進行對現(xiàn)有的函數(shù)進行二次開發(fā),不過開發(fā)比較簡單,主要在于孰能生巧。
當然具體怎么在對應項目中使用,這個就要看小伙伴們的操作了。感謝您的閱讀,希望本篇文章對您有所幫助。
最后:在我的V:atstudy-js,可以免費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!其中包括了有基礎知識、Linux必備、Shell、互聯(lián)網(wǎng)程序原理、Mysql數(shù)據(jù)庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續(xù)集成、測試架構開發(fā)測試框架、性能測試、安全測試等。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.