測試報告 pytest-allure插件
什么是allure
- 是一個輕量級、靈活的、支持多語言的測試報告工具
- 多平太、奢華的report框架
- 可以為dev/qa提供詳盡的測試報告、測試步驟、log
- 為管理層提供high level統計報告
- java語言開發的、支持pytest、javascript、php、ruby
- 可以集成到jenkins
下載安裝
windows安裝
- jdk1.8+
- 解壓到allure-commandline目錄
- 進入到bin目錄,運行allure.bat
- 添加環境變量
# 添加到PATH
# 添加完后可能需要重啟pycharm或者電腦,可以使用echo %path% 打印環境變量
\安裝路徑\allure-commandline\bin
- cmd下驗證安裝
allure --version
- 安裝擴展包
pip install allure-pytest
生成測試報告
指定測試報告目錄
- 在測試執行期間收集結果
pytest [測試文件/目錄] -s -q --alluredir=./result/(--alluredir這個選項用於指定測試結果的路徑)
# --alluredir=指定測試數據目錄和運行結果
# test.py為測試用例文件(可以不加,也可以放測試用例目錄)
pytest test.py --alluredir=../result/report/1
或者
# 想要打印出測試用例詳細、PASSED以及進度條加-v
pytest -v test.py --alluredir=../result/report/1
-
查看測試報告
- 方式一:測試完成后,查看實際報告,在線看報告,會直接打開默認瀏覽器展示
# 指定測試報告目錄 # 將測試數據轉化測試報告 allure serve ../result/report/1
-
方式二:從結果生成報告,這是一種啟動tomcat的服務,需要兩個步驟:生成報告,打開報告
- 生成報告
allure test.py serve ../result/report/1 # 注意:覆蓋路徑加--clean(清空已有的報告,避免覆蓋時出錯) allure generate ../result/report/1 -o ../result/report/1 --clean # 執行后生成以下文件夾和文件
- 打開報告
allure open -h 127.0.0.1 -p 8883 ../result/report/1
每次用例執行之前先清空allure的報告記錄
pytest -v test_calc.py --alluredir=../report/1
pytest test_calc.py --alluredir=./report/1 --clean-alluredir
allure serve ../report/1
allure裝飾器
@allure.feature() 標注模塊名稱/添加標識(功能點描述)
@allure.story() 標注feature功能模塊下的分支功能/用戶故事
@allure.step() 標注操作步驟
用法
- @allure.step() 只能以裝飾器的形式放在類或者方法上面
- with allure.step(): 可以放在測試用例方法里面,但測試步驟的代碼需要被該語句包含,如下代碼
@allure.story("密碼缺失")
def test_login_failure(self):
with allure.step("點擊用戶名"):
print("輸入用戶名")
with allure.step("點擊密碼"):
print("輸入密碼")
print("點擊登錄")
with allure.step("點擊登錄之后登錄失敗"):
asser '1' == 1
print("登錄失敗")
pass
@allure.issue() 對應bug管理系統里面的鏈接/關聯bug
@allure.link("http://www.baidu.com")
def test_with_link():
print("這是一條加了鏈接的測試用例")
pass
# 效果如圖2
# 可以使用此種方式鏈接到測試用例管理系統上,測試用例名使用name參數,比如:name="登錄用例"
@allure.link("http://www.baidu.com",name="鏈接")
def test_with_link():
print("這是一條加了鏈接的測試用例")
pass
# 使用此種方式鏈接到bug管理系統上,140為bug_id,后面一串是bug的說明/描述
# 地址需要在執行命令的時候給
# --allure-link-pattern=issue:http://www.mytesttracker.com/issue/{}
# 完整命令如下
# pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
@allure.issue('140','Pytest-flaky test retries shows like test steps')
def test_with_issue_link():
pass
TEST_CASE_LINK='https://github.com/qameta/allure-integrations/issues/8#'
@allure.issue(TEST_CASE_LINK,'Test case title')
def test_with_testcase_link():
pass
圖2
@allure.attach() 添加圖片、文本信息、html
-
場景
- 前端自動化測試經常需要附加圖片、文本信息、附件、視頻、代碼塊或者html,在適當的地方、適當的時機截圖
-
解決
- @allure.attach 顯示許多不同類型的提供的福建、可以補充測試、步驟或測試結果
-
步驟
- 在測試報告里附加網頁
# allure.attach(body(內容),name,attachment_type,extension): # allure.attach('<head></head><body>首頁</body>','這是錯誤也的結果信息',allure.attachment_type.HTML)
- 在測試報告里附加圖片
# allure.attach.file(source,name,attachment_type,extension): # allure.attach.file("./result/b.png",attachment_type=allure.attachment_type.PNG)
-
舉個例子
-
代碼
- 添加文本信息
import allure def test_attach_text(): allure.attach("這是一個文本",attachment_type=allure.attachment_type.TEXT) # 執行運行 # pytest -v test_calc.py --alluredir=../report/1 # allure serve ../report/1
-
+ 添加html代碼塊
```python
import allure
def test_attach_html():
allure.attach("<body>這是一段html body塊</body>","html測試塊",attachment_type=allure.attachment_type.HTML)
```
+ 添加圖片
```python
# 錯誤演示,使用文件時需要到allure.attach.file方法
import allure
def test_attach_photo):
allure.attach("../report/photo/a.jpg",name="這是圖片",attachment_type=allure.attachment_type.JPG)
```
+ 執行以下命令
```python
pytest -v test_calc.py --alluredir=../report/1
allure serve ../report/1
```
注意:此時圖片展示不出來的時候
+ 解決圖片展示不出來的問題,可以去查看attach源碼
使用文件的時候需要用到file方法
```python
# 正確用法
import allure
def test_attach_photo):
allure.attach.file("../report/photo/a.jpg",name="這是圖片",attachment_type=allure.attachment_type.JPG)
# 執行命令
pytest -v test_calc.py --alluredir=../report/1
allure serve ../report/1
```
效果如圖
allure特性
@allure.feature與@allure.story的關系
- feature相當一個功能,一個大的模塊,將case分類到某個feature中,報告中behaviore中顯示,相當於testsuite
- story相當於對應這個功能或者模塊下的不同場景,分支功能,屬於feature之下的結構,報告在features中顯示,相當於testcase
- feature與story類似於父子關系
@allure.epic與@allure.feature的關系
- epic與feature類似父子關系
@allure.story與@allure.title的關系
- story與title類似父子關系
@allure.step
- 測試過程中每個步驟,一般放在具體邏輯方法中
- 可以放在關鍵步驟中,在報告中顯示
- 在app,web自動化測試當中,建議沒切換到一個新的頁面當做一個step
@allure.issue
-
關聯bug
- 執行的時候需要加個參數
--allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} # 完整命令如下 pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
@allure.testcase
- 關聯測試用例(可以直接給測試用例的地址鏈接)
@allure.epic() epic描述(敏捷里面的概念、定義史詩,往下是feature)
@allure.epic('測試API接口'.center(30,'*'))
class TestHttpbin:
"""測試模塊httpbin"""
def test(self):
"""所有用例執行前的條件"""
print("測試用例")
# 執行參數加上
--allure-epics=EPICS_SET
Comma-separated list of epic names. Run tests that
have at least one of the specified feature labels.
pytest --alluredir=../result/report/1 --allure-epics=epic對大Story的一個描述性標簽
@allure.suite() 測試套件/測試(集)套件,不用報告默認顯示py文件名
allure.tag() 測試用例標記 (用於給用例打個標記)
allure.title("用例標題") 測試用例的標題(重命名html報告名稱)
@alluredescription() 用例描述
運行
只運行一個模塊(添加)
@allure.feature("登錄模塊")
class TestLogin():
@allure.story("登錄成功")
def test_login_success(self):
print("登錄測試用例:登錄成功")
pass
@allure.story("用戶名缺失")
def test_login_failure(self):
print("登錄測試用例:登錄成功")
pass
執行命令
pytest test.py --allure-features '登錄模塊'
按重要性級別進行一定范圍測試
-
場景
- 通常測試有P0、冒煙測試、驗證上線測試。按重要性界別來分別執行的,比如上線要吧主流程和重要模塊都跑一遍
-
解決
- 通過附加pytest.mark標記
- 通過allure.feature或者allure.story
- 也可以通過 allure.severity 來附加標記
- 級別:Trivial:不重要,Minor:不太重要,Normal:正常問題,Critical:嚴重,Blocker:阻塞
-
步驟
-
在方法、函數和類上面加
@allure.severity(allure.severity_level.TRIVIAL)
-
執行時
pytest -s -v 文件名 --allure-severities normal,critical
Blocker級別:中斷bug(客戶端程序沒有響應,無法執行下一步操作) Critical級別:臨界bug(功能點缺失) Normal級別:普通bug(數值計算錯誤) Minor級別:次要bug(界面錯誤與UI需求不符) Trivial級別:輕微bug(必輸項沒有提示,或者提示不規范,建議性等)
-
-
舉個例子
- 代碼如下
@allure.severity(allure.severity_level.TRIVIAL) def test_with_trivial_severity(): pass @allure.severity(allure.severity_level.NORMAL) def test_with_normal_severity(): pass @allure.severity(allure.severity_level.NORMAL) class TestClassWithNormalSeverity(object): def test_inside_the_normal_severity_test_class(self): pass @allure.severity(allure.severity_level.CRITICAL) def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self): pass
- 在命令行執行
# 多個級別用逗號隔開 pytest test.py --alluredir=../result/report/1 --allure-severities normal,critical
- 在pycharm右鍵使用run運行,需要配置Additional Arguments
多並發運行
安裝補充
使用庫:pytest4.0,pytest-allure-adaptor
注意不要安裝allure-pytest該庫,否則會出現option names {'alluredir'} already added錯誤
1,安裝PowerShell (win10自帶有,其他系統自行安裝)
2,打開PowerShell,輸入命令:
set-executionpolicy remotesigned -s cu
再輸入
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
輸入scoop help 可查看scoop命令列表
3,在PowerShell命令窗口輸入 scoop install allure
4,進入存放用例py文件的目錄下,執行
py.test --alluredir=reports
存放用例的目錄中會多一個reports文件夾,里面是各種txt和json文件
再執行
allure generate reports
存放用例的目錄中會多一個allure-reports文件夾,更新allure-reports文件夾內容使用
allure generate reports --clean