allure簡介
Allure Framework是一個靈活的輕量級多語言測試報告工具。貌似是目前最漂亮的一個報告工具
python版本及必要庫或工具
python 3.7
pytest 4.3.1
allure-pytest 2.6.1 (注意:這里不要使用pytest-allure-adaptor,踩過坑。使用pytest-allure-adaptor時因為一些兼容問題發現只有pytest3.7.0 才可以與alllure2.0匹配。但pytest3.7.0有不少bug)
command tool 工具 #用於生成美觀報告
brew tap qatools/formulas
brew install allure-commandline
Features
1.title case標題
可以自定義用例標題,標題默認為函數名.
@allure.title
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.title("用例標題0") def test_0(): pass @allure.title("用例標題1") def test_1(): pass def test_2(): pass
執行效果:
2. 說明
可以添加測試的詳細說明,以便根據需要為報告閱讀器提供盡可能多的上下文。
兩種方式:@allure.description 提供描述字符串的裝飾器
@allure.description_html 提供一些HTML在測試用例的描述部分 (待研究)
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.title("用例標題0") @allure.description("這里是對test_0用例的一些詳細說明") def test_0(): pass @allure.title("用例標題1") def test_1(): pass @allure.title("用例標題2") def test_2(): pass
3. 標簽
這個標簽非常好用
@allure.feature 分組第一層
@allure.story 分組第二層
@allure.severity 標記嚴重級別
用法一:通過@allure.feature @allure.story來標記case 可以使得case在報告里顯示更有層次感
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.description("這里是對test_0用例的一些詳細說明") @allure.story("這里是第一個二級標簽") def test_0(self): pass @allure.title("用例標題1") @allure.story("這里是第一個二級標簽") def test_1(self): pass @allure.title("用例標題2") @allure.story("這里是第二個二級標簽") def test_2(self): pass
運行結果如下:
用法二:@allure.story @allure.feature 還可以用來指定執行的case集合
1 --allure-features
2 --allure-stories
3 --allure-epics (待研究)
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.description("這里是對test_0用例的一些詳細說明") @allure.story("這里是第一個二級標簽") def test_0(self): pass @allure.title("用例標題1") @allure.story("這里是第二個二級標簽") def test_1(self): pass @allure.title("用例標題2") @allure.story("這里是第三個二級標簽") def test_2(self): pass
執行命令 pytest test_1.py --allure-stories "這里是第二個二級標簽", "這里是第三個二級標簽" #
執行結果如下:
用法三:使用@allure.severity裝飾器, 按嚴重性級別來標記case 這里等於給每個case定義一個嚴重級別 在Graphs頁面查看分布情況。當然也可以指定執行的case集合 語法為 --allure.-severities XX,XX
- BLOCKER = 'blocker' 中斷缺陷(客服端程序無響應,無法執行下一步驟)
- CRITICAL = 'critical' 臨界缺陷(功能點缺失)
- NORMAL = 'normal' 普通缺陷(數據計算錯誤)
- MINOR = 'minor' 次要缺陷(界面錯誤與ui需求不符)
- TRIVIAL = 'trivial' 輕微缺陷(必須項無提示,或者提示不規范)
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.description("這里是對test_0用例的一些詳細說明") @allure.story("這里是第一個二級標簽") @allure.severity(allure.severity_level.CRITICAL) def test_0(self): pass @allure.title("用例標題1") @allure.story("這里是第二個二級標簽") @allure.severity(allure.severity_level.BLOCKER) def test_1(self): pass @allure.title("用例標題2") @allure.story("這里是第三個二級標簽") @allure.severity(allure.severity_level.NORMAL) def test_2(self): pass
執行結果如下:
4. step 步驟 為報告中對應case添加一些的描述,以提供更詳細的操作步驟
用法:@allure.step()
@allure.step(‘這里是操作步驟的描述: 獲取參數一:“{0}”,獲取參數二: “{1}” ’)
來裝飾對應case
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.description("這里是對test_0用例的一些詳細說明") @allure.story("這里是第一個二級標簽") @allure.severity(allure.severity_level.CRITICAL) @allure.step("這里是步驟說明一") def test_0(self): pass @allure.title("用例標題1") @allure.story("這里是第二個二級標簽") @allure.severity(allure.severity_level.BLOCKER) @allure.step("這里是步驟說明二") def test_1(self): pass @allure.step('這里是操作步驟打印:name: "{0}", age: "{age}"') def step_with_title(self, name, age=10): pass @allure.title("用例標題2") @allure.story("這里是第三個二級標簽") @allure.severity(allure.severity_level.NORMAL) def test_2(self): self.step_with_title('張三') self.step_with_title('李四', 20) self.step_with_title('王五', age=30)
執行結果如下:
5. 參數化
可以將case所需參數展示在報告中,方便問題追蹤
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.description("這里是對test_0用例的一些詳細說明") @allure.story("這里是第一個二級標簽") @allure.severity(allure.severity_level.CRITICAL) @allure.step("這里是步驟說明一") @pytest.mark.parametrize('param1, param2', [(1, 10), (2, 20)]) def test_0(self, param1, param2): print(param1) @allure.title("用例標題1") @allure.story("這里是第二個二級標簽") @allure.severity(allure.severity_level.BLOCKER) @allure.step("這里是步驟說明二") @pytest.mark.parametrize('param1', ['value 1', 'value 2']) @pytest.mark.parametrize('param2', [True], ids=["這是一個有意思的操作"]) @pytest.mark.parametrize('param3', [1]) def test_1(self, param1, param2, param3): pass @allure.step('這里是操作步驟打印:name: "{0}", age: "{age}"') def step_with_title(self, name, age=10): pass @allure.title("用例標題2") @allure.story("這里是第三個二級標簽") @allure.severity(allure.severity_level.NORMAL) def test_2(self): self.step_with_title('張三') self.step_with_title('李四', 20) self.step_with_title('王五', age=30)
執行結果如下:
6 附件
報告可以展示許多不同類型的附件,用來補充測試,步驟等信息
allure.attach(body, name, attachment_type, extension)
-
body
- 要寫入文件的原始內容。 -
name
- 包含文件名的字符串 -
attachment_type
- 其中一個allure.attachment_type
值 -
extension
- 提供的將用作創建文件的擴展名
或者 allure.attach.file(source, name, attachment_type, extension)
source
- 包含文件路徑的字符串。
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.story("這里是第一個二級標簽") @pytest.mark.parametrize('param', ['青銅', '白銀', '黃金']) def test_0(self, param): allure.attach('附件內容是: '+param, '我是附件名', allure.attachment_type.TEXT) @allure.title("用例標題1") @allure.story("這里是第二個二級標簽") def test_1(self): allure.attach.file(r'E:\Myproject\pytest-allure\test\test_1.jpg', '我是附件截圖的名字', attachment_type=allure.attachment_type.JPG) @allure.title("用例標題2") @allure.story("這里是第三個二級標簽") @allure.severity(allure.severity_level.NORMAL) def test_2(self): pass
執行結果如下:
7. 鏈接
@allure.link @allure.issue @allure.testcase
# -*- coding: utf-8 -*- # @Time : 2019/3/12 11:46 # @Author : zzt import allure import pytest @allure.feature('這里是一級標簽') class TestAllure(): @allure.title("用例標題0") @allure.story("這里是第一個二級標簽") @pytest.mark.parametrize('param', ['青銅', '白銀', '黃金']) def test_0(self, param): allure.attach('附件內容是: '+param, '我是附件名', allure.attachment_type.TEXT) @allure.title("用例標題1") @allure.story("這里是第二個二級標簽") def test_1(self): allure.attach.file(r'E:\Myproject\pytest-allure\test\test_1.jpg', '我是附件截圖的名字', attachment_type=allure.attachment_type.JPG) @allure.title("用例標題2") @allure.story("這里是第三個二級標簽") @allure.issue('http://baidu.com', name='點擊我跳轉百度') @allure.testcase('http://bug.com/user-login-Lw==.html', name='點擊我跳轉禪道') def test_2(self): pass
執行結果如下:
8 重試
Allure允許您匯總有關在單次測試運行期間重新執行的測試的信息以及在一段時間內測試執行的歷史記錄。
重試需要引入插件: pip pytest-rerunfailures 或者手動下載 https://github.com/pytest-dev/pytest-rerunfailures
(未完待續)