Modern style test report based on unittest framework.
基於unittest框架現代風格測試報告。
特點
- 漂亮測試報告讓你更願意編寫測試。
- 支援
單元
、Web UI
、API
各種型別的測試。 - 支援
Selenium
執行失敗/錯誤自動截圖。 - 支援失敗重跑。
- 支援標籤黑、白名單。
- 支援發郵件功能。
- 支援多語言
en
、zh-CN
等。 - 支援
HTML/XML
不同格式的報告。
安裝
- pip安裝
> pip install XTestRunner
使用文件
單元測試
XTestRunner基本用法,用於生成 HTML測試報告。
測試用例
# test_unit.py
import unittest
from XTestRunner import HTMLTestRunner
class TestDemo(unittest.TestCase):
"""測試用例說明"""
def test_success(self):
"""執行成功"""
self.assertEqual(2 + 3, 5)
@unittest.skip("skip case")
def test_skip(self):
"""跳過用例"""
pass
def test_fail(self):
"""失敗用例"""
self.assertEqual(5, 6)
def test_error(self):
"""錯誤用例"""
self.assertEqual(a, 6)
if __name__ == '__main__':
suit = unittest.TestSuite()
suit.addTests([
TestDemo("test_success"),
TestDemo("test_skip"),
TestDemo("test_fail"),
TestDemo("test_error")
])
with(open('./result.html', 'wb')) as fp:
runner = HTMLTestRunner(
stream=fp,
title='<project name>test report',
description='describe: ... ',
language='en',
)
runner.run(
testlist=suit,
rerun=2,
save_last_run=False
)
HTMLTestRunner
類說明
stream
: 指定報告的路徑。title
: 報告的標題。description
: 報告的描述, 支援str
、list
兩種型別。language
: 支援中文zh-CN
, 預設en
。
run()
方法說明
testlist
: 執行的測試套件。rerun
: 重跑次數。save_last_run
: 是否儲存最後一個重跑結果。
執行測試
> python test_unit.py
Selenium Web測試
針對Selenium Web自動化測試提供了失敗/錯誤
自動截圖功能。
注意
1.安裝selenium
> pip install selenium
2.注意:驅動必須定義為 driver
, 否則無法生成截圖。
測試用例
import unittest
from XTestRunner import HTMLTestRunner
from selenium import webdriver
from selenium.webdriver.common.by import By
class SeTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver = webdriver.Chrome()
cls.base_url = "https://cn.bing.com/"
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
def test_success(self):
"""測試bing搜尋:XTestRunner """
self.driver.get(self.base_url)
search = self.driver.find_element(By.ID, "sb_form_q")
search.send_keys("XTestRunner")
search.submit()
def test_error(self):
"""測試bing搜尋,定位失敗 """
self.driver.get(self.base_url)
self.driver.find_element(By.ID, "sb_form_qxxx").send_keys("python")
def test_fail(self):
"""測試bing搜尋,斷言失敗 """
self.driver.get(self.base_url)
self.driver.find_element(By.ID, "sb_form_q").send_keys("unittest")
self.assertEqual(self.driver.title, "unittest")
def test_screenshots(self):
"""測試截圖"""
self.driver.get(self.base_url)
# 元素截圖
elem = self.driver.find_element(By.ID, "sb_form_q")
self.images.append(elem.screenshot_as_base64)
# 豎屏截圖
self.images.append(self.driver.get_screenshot_as_base64())
# 最大化截圖
self.driver.maximize_window()
self.images.append(self.driver.get_screenshot_as_base64())
if __name__ == '__main__':
report = "./selenium_result.html"
with(open(report, 'wb')) as fp:
unittest.main(testRunner=HTMLTestRunner(
stream=fp,
title='Selenium自動化測試報告',
description=['型別:selenium', '作業系統:Windows', '瀏覽器:Chrome', '執行人:蟲師']
))
測試報告
一個用例支援多張截圖,不同的截圖自動輪播,而且優化之後,不管是頁面元素截圖,橫向、縱向圖片都可以很好的展示。
API 介面測試
XTestRunner 當然也支援HTTP介面測試了。
- 安裝requests
> pip install requests
測試用例
import requests
import unittest
from XTestRunner import HTMLTestRunner
class YouTest(unittest.TestCase):
def test_get(self):
"""測試get介面 """
r = requests.get("https://httpbin.org/get", params={"key":"value"})
print(r.json())
def test_post(self):
"""測試post介面 """
r = requests.post("https://httpbin.org/post", data={"key":"value"})
print(r.json())
def test_put(self):
"""測試put介面 """
r = requests.put("https://httpbin.org/put", data={"key":"value"})
print(r.json())
def test_delete(self):
"""測試delete介面 """
r = requests.delete("https://httpbin.org/delete", data={"key":"value"})
print(r.json())
if __name__ == '__main__':
report = "./reports/api_result.html"
with(open(report, 'wb')) as fp:
unittest.main(testRunner=HTMLTestRunner(
stream=fp,
title='Seldom自動化測試報告',
description=['型別:API', '地址:https://httpbin.org/', '執行人:蟲師']
))
測試報告
通過print()
可以講介面資訊列印到報告中展示。
郵件功能
XTestRunner 支援郵件功能。
import unittest
from XTestRunner import HTMLTestRunner
from XTestRunner import SMTP
...
if __name__ == '__main__':
report = "./reports/send_email_result.html"
with(open(report, 'wb')) as fp:
unittest.main(testRunner=HTMLTestRunner(
stream=fp,
title='測試傳送郵件',
description=['型別:測試傳送郵件', '執行人:蟲師']
))
# 發郵件功能
# 使用126郵箱傳送時password應為授權碼而非使用者密碼,須在郵箱客戶端設定開啟授權碼
# 使用gmail郵箱傳送時password為使用者密碼,須在gmail客戶端開啟安全性較低的應用的訪問許可權
smtp = SMTP(user="sender@qq.com", password="xxx", host="smtp.qq.com")
smtp.sender(to="fnngj@126.com", subject="XTestRunner測試郵件", attachments=report)
郵件展示
支援黑白名單
可以通過黑白名單選擇要執行(或跳過)的用例。
- 支援白黑名單
- 白名單:whitelist=["base"] 只有使用@label("base")裝飾的用例執行
- 黑名單:blacklist=["slow"] 只有使用@label("slow")裝飾的用例不被執行
測試用例
import unittest
from XTestRunner import label
from XTestRunner import HTMLTestRunner
class LabelTest(unittest.TestCase):
@label("base")
def test_label_base(self):
self.assertEqual(1+1, 2)
@label("slow")
def test_label_slow(self):
self.assertEqual(1, 2)
def test_no_label(self):
self.assertEqual(2+3, 5)
if __name__ == '__main__':
report = './reports/label_result.html'
with(open(report, 'wb')) as fp:
unittest.main(testRunner=HTMLTestRunner(
stream=fp,
title='<project name>test report',
description='describe: ... ',
whitelist=["base"], # 設定白名單
# blacklist=["slow"], # 設定黑名單
))
注意:
白名單和黑名單不要同時用,以免產生衝突。
XML格式報告
雖然,HTML報告的顏值很高,但有時需要提取測試資料,比如儲存到資料庫,這個時候從HTML報告中提取資料是非常麻煩的,所以,XTestRunner 支援XML格式的報告。
import unittest
from XTestRunner import XMLTestRunner
#...
if __name__ == '__main__':
# 定義報告
report = "./xml_result.xml"
with(open(report, 'wb')) as fp:
unittest.main(testRunner=XMLTestRunner(output=fp))
報告展示