軟件測試 | 結(jié)合Allure生成測試報(bào)告
簡介
測試報(bào)告在項(xiàng)目至關(guān)重要,測試人員可以在測試報(bào)告中體現(xiàn)自己的工作量,開發(fā)人員可以從測試報(bào)告中 了解缺陷的情況,測試經(jīng)理可以從測試報(bào)告中看到測試人員的執(zhí)行情況及測試用例的覆蓋率,項(xiàng)目負(fù)責(zé) 人可以通過測試報(bào)告查看整個(gè)項(xiàng)目還余留多少問題。強(qiáng)大的測試報(bào)告能夠非常清晰的反映很多問題,提 供給相關(guān)人員了解項(xiàng)目的整體情況。
Allure 是一種靈活的、輕量級、支持多語言測試報(bào)告框架,它不僅能夠以簡潔的 web 報(bào)告形式顯示已測 試的內(nèi)容,而且允許參與開發(fā)的每個(gè)人,從測試的日常執(zhí)行中提取最大限度的有用信息。同時(shí)支持多種 語言包括 Java、Python、JavaScript、Ruby、Groovy、PHP、.Net、 Scala。
安裝
安裝 ALLURE
Mac 可以使用 brew 安裝 Allure,安裝命令如下:
brew install allure
關(guān)于 Allure 在其它操作系統(tǒng)安裝方式,參照官網(wǎng)(https://docs.qameta.io/allure/?#_installing_a_commandline)。
查看 Allure 版本:
allure --version
其他操作系統(tǒng)請參考?https://docs.qameta.io/allure/#_installing_a_commandline?。
安裝 ALLURE-PYTEST 插件
與 pytest 結(jié)合需要安裝 allure-pytest 插件 pip install allure-pytest 。
Allure 特性
ALLURE FEATURE 與 ALLURE STORY
使用裝飾器 @allure.feature 和 @allure.store 來裝飾測試用例。
feature 相當(dāng)于大模塊,將測試用例分類到某個(gè) Feature 中,報(bào)告中 Behaviore 中顯示,相當(dāng)于測試 套件(Test Suite)
story 相當(dāng)于對應(yīng)功能或者模塊下的不同場景,屬于分支功能,相當(dāng)于測試用例(Test Case)
feature 與 story 類似于父子關(guān)系
定義測試類為 feature,定義測試方法為 story,代碼如下:
@allure.feature("測試登錄功能")
class TestLogin:
@allure.story("測試成功的登錄場景")
def test_login1(self):
pass
@allure.story("測試失敗的登錄場景")
def test_login2(self):
pass
ALLURE STEP
測試過程中,如果想查看測試用例每個(gè)步驟的結(jié)果,可以添加測試步驟的裝飾器 @allure.step() 用法 1,方法加上裝飾器作為測試步驟:
import allure
@allure.step
def login():
pass
@allure.step
def search():
pass
def test_with_nested_steps():
login()
search()
用法 2,在用例中添加測試步驟
def test_search():
with allure.step("打開 Chrome 瀏覽器"):
driver = webdriver.Chrome()
with allure.step("打開 baidu.com"):
driver.get("https://www.baidu.com")
關(guān)聯(lián)測試用例
在測試報(bào)告中關(guān)聯(lián)測試用例的 URL 地址
TEST_CASE_LINK = 'https://github.com/qameta/allure-integrations/issues/
8#issuecomment-268313637'
@allure.testcase(TEST_CASE_LINK, '測試用例地址')
def test_with_testcase_link():
pass
添加測試附件 前端自動(dòng)化測試時(shí),會(huì)需要在測試報(bào)告中附加錯(cuò)誤截圖或者視頻片段??梢允褂?Allure,在報(bào)告中添加 截圖,視頻等多媒體素材的功能。
在測試報(bào)告里附加圖片
allure.attach.file("image.png", attachment_type=allure.attachment_type.PNG)
image.png 圖片的相對或者絕對路徑 attachment_type=allure.attachment_type.PNG 圖片的類 型,這里使用的是 PNG 格式,也可以選擇其它的格式,例如 JPG,BMP 等
在測試報(bào)告里附加視頻
allure.attach.file("video.mp4", name="視頻", \
attachment_type=allure.attachment_type.MP4)
video.mp4 視頻的相對或者絕對路徑 name 展示在測試報(bào)告中的視頻名字,如果不為這個(gè)視頻命 名,系統(tǒng)會(huì)自動(dòng)為它生成一個(gè)名稱展示在報(bào)告中。 attachment_type=allure.attachment_type.MP4 視頻的類型,這里使用 MP4 格式。
運(yùn)行
第一步:在 pytest 執(zhí)行測試的時(shí)候,指定參數(shù) --alluredir 選項(xiàng)及結(jié)果數(shù)據(jù)保存的目錄,代碼如下:
pytest --alluredir=tmp/my_allure_results
tmp/my_allure_results 中保存了本次測試的結(jié)果數(shù)據(jù)。
第二步:打開報(bào)告 兩種方式 第一種:需要啟動(dòng) Allure 服務(wù),在 terminal 中輸入 allure serve tmp/my_allure_results ,代碼 如下:
allure serve tmp/my_allure_results
第二種:也可以使用 allure generate 生成 html 格式的測試結(jié)果報(bào)告,并使用 allure open 來 打開報(bào)告。
allure generate ./result/ -o ./report/ --clean
上面的命令將 ./result/ 目錄下的測試數(shù)據(jù)生成 HTML 測試報(bào)告到 ./report 路徑下,-–clean 選項(xiàng)目的 是先清空測試報(bào)告目錄,再生成新的測試報(bào)告,然后使用下面的命令打開報(bào)告。
allure open -h 127.0.0.1 -p 8883 ./report/
上面的命令會(huì)啟動(dòng)一個(gè) Web 服務(wù),將已經(jīng)生成的 html 測試報(bào)告在默認(rèn)的瀏覽器中打開(地址: 127.0.0.1:8883),報(bào)告如下:

上面的測試報(bào)告首頁中展示了此次測試的測試用例數(shù)量、成功用例、失敗用例、跳過用例的比例、測試 環(huán)境、測試套、分類等。如果與 Jenkins 結(jié)合使用,TREND 區(qū)域還將顯示,歷次測試的通過情況。 點(diǎn)擊左下角的 En,可以切換語言,下圖為切換成中文展示。

首頁的左邊欄,還從不同的維度展示測試報(bào)告的其他信息。重點(diǎn)頁面介紹:
總覽:匯總結(jié)果展示
類別:按照用例的類別,分類展示
測試套:Allure 測試報(bào)告將每一個(gè)測試腳本,作為一個(gè)測試套
圖表:展示了此次測試結(jié)果的統(tǒng)計(jì)信息,比如測試用例執(zhí)行結(jié)果狀態(tài)、測試用例重要等級分布、測 試用例執(zhí)行時(shí)間分布等
功能:按照 FEATURES 和 STORIES 展示測試用例的執(zhí)行結(jié)果
測試用例詳情頁面,測試套頁面點(diǎn)擊任意一條測試用例,右側(cè)將展示詳細(xì)信息。圖中可以看到測試 步驟,每個(gè)步驟的執(zhí)行結(jié)果,還有測試用例的鏈接、圖片、視頻等內(nèi)容
前端自動(dòng)化測試實(shí)戰(zhàn)(百度搜索功能)
實(shí)際項(xiàng)目中,一旦用例報(bào)錯(cuò),希望將被測應(yīng)用運(yùn)行時(shí)的錯(cuò)誤狀態(tài)記錄下來。記錄這些狀態(tài)可以通過日 志、截圖、視頻等手段,并將這些測試結(jié)果展示在測試報(bào)告中,方便相關(guān)人員查看并定位問題。
以網(wǎng)頁版本的百度為例,百度首頁呈現(xiàn)的功能:搜索、新聞、網(wǎng)頁等,我們以百度網(wǎng)頁的搜索功能為 例,使用 Allure、pytest 結(jié)合 selenium 自動(dòng)化測試框架,完成一個(gè)搜索功能的測試(關(guān)于 Web 前端測 試中使用的 Selenium,參考 Web 自動(dòng)化測試章節(jié))。模擬百度搜索功能場景,需要?jiǎng)?chuàng)建兩個(gè)文件(數(shù) 據(jù)文件與測試用例文件)。 首先創(chuàng)建數(shù)據(jù)管理文件 data/data.yml ,代碼如下:
- allure
- pytest
- unittest
然后,創(chuàng)建用例文件名為 test_baidudemo.py ,代碼如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import allure
import pytest
import yaml
from selenium import webdriver
import time
@allure.testcase("http://www.github.com")
@allure.feature("百度搜索")
@pytest.mark.parametrize('test_data1', yaml.safe_load(\
open("data/data.yml")))
def test_steps_demo(test_data1):
with allure.step("打開百度網(wǎng)頁"):
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
with allure.step(f"輸入搜索詞:{test_data1}"):
driver.find_element_by_id("kw").send_keys(test_data1)
time.sleep(2)
driver.find_element_by_id("su").click()
time.sleep(2)
with allure.step("保存圖片"):
driver.save_screenshot("./result/b.png")
allure.attach.file("./result/b.png", \
attachment_type=allure.attachment_type.PNG)
with allure.step("關(guān)閉瀏覽器"):
driver.quit()
代碼解析:
allure.testcase 用例標(biāo)識,給定用例的鏈接,可以與用例的管理地址關(guān)聯(lián)。 allure.feature 功 能模塊劃分,方便管理和運(yùn)行測試用例。 allure.step 用來添加測試步驟,在測試報(bào)告里面會(huì)展示出 來這個(gè)步驟說明。 allure.attach.file 測試報(bào)告中添加附件 pytest.mark.parametrize 用來參 數(shù)化測試用例。
執(zhí)行:
pytest test_baidudemo.py -s --alluredir=./result/
allure serve ./result/
測試結(jié)果圖:


測試報(bào)告中添加了分類,測試步驟,在每條測試用例中添加了測試用例的鏈接,截圖展示等內(nèi)容,方便 后續(xù)分析定位問題。