高颜值测试报告- XTestRunner

转自虫师-https://www.cnblogs.com/fnng/p/16010170.html

基于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='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))
报告展示

posted @ 2022-04-12 17:30  天空空liu  阅读(302)  评论(0)    收藏  举报