Modern style test report based on unittest framework.

基于unittest框架现代风格测试报告。

特点

  • 漂亮测试报告让你更愿意编写测试。
  • 支持单元Web UIAPI 各种类型的测试。
  • 支持Selenium运行失败/错误自动截图。
  • 支持失败重跑。
  • 支持标签黑、白名单。
  • 支持发邮件功能。
  • 支持多语言enzh-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: 报告的描述, 支持strlist两种类型。
  • 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))

报告展示

高颜值测试报告- XTestRunner的更多相关文章

  1. Python3+selenium+BaiduAI识别并下载花瓣网高颜值妹子图片

    一.说明 1.1 背景说明 上周在“Python3使用百度人脸识别接口识别高颜值妹子图片”中自己说到在成功判断颜值后,下截图片并不是什么难点. 直观感觉上确实如此,你判断的这个url适不适合下载,适合 ...

  2. Python3+BaiduAI识别高颜值妹子图片

    一.在百度云平台创建应用 为什么要到百度云平台创建应用,首先来说是为了获取获取access_token时需要的API Key和Secret Key 至于为什么需要API Key和Secret Key才 ...

  3. 刷抖音太累,教你用Python把高颜值的小姐姐都爬下来慢慢看

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 星安果.AirPython 目 标 场 景 相信大家平时刷抖音短视频 ...

  4. ES6基础与解构赋值(高颜值弹框小案例!)

    let只作用在当前块级作用域内使用let或者const声明的变量,不能再被重新声明let不存在`变量提升` console.log(dad); var dad = '我是爸爸!';//预定义undef ...

  5. 这么高颜值的Kubernetes管理工具Lens,难道还不能C位出道吗

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 一直使用官方的Kubernetes Dashboard来管 ...

  6. IDEA高颜值之最吸引小姐姐插件集合!让你成为人群中最靓的那个崽!

    经常有小伙伴会来找TJ君,可能觉得TJ君比较靠谱,要TJ君帮忙介绍女朋友.TJ君一直觉得程序猿是天底下最可爱的一个群体,只不过有时候不善于表达自己的优秀,所以TJ君今天准备介绍几款酷炫实用的IDEA插 ...

  7. 高颜值,类似Fliqlo的翻页时钟-BdTab新标签页插件组件

    起因: 很多用户在使用BdTab插件时,反馈说希望添加一个时钟的功能, 而BdTab又是组件模块化的插件,于是在空余时间就用html+js+css写了一款高颜值的分页时钟 源码如下: 需要其他网页组件 ...

  8. 一次Dapper高并发测试报告记录. 结果....

    一直听说dapper的数据处理能力很强. 我也一直很喜欢. 不过最近的一次压力测试却出乎我的意料.... 好久没写东西,感觉自己都不知道怎么表达自己的意思了.   另外 这次的测试也是自己才开始的 . ...

  9. 这可能就是你苦苦寻找免费、高颜值、功能强大的 Markdown 编辑器(共5款)

    本文作者 | HelloGitHub-小猪蹄 Markdown 是一个轻量级的标记语言,语法简单.容易上手,它深受程序员.博客主等人群的钟爱.随着越来越多的博客系统支持 Markdown,它也开始越来 ...

随机推荐

  1. Jackson中处理map中的null key 或者null value 及实体字段中的null value

    1.map中有null key时的序列化  当有null key时,jackson序列化会报 Null key for a Map not allowed in JSON (use a convert ...

  2. js实现网页中英文翻译

    1,html 2,metrics.js 3,需要 http://www.microsoftTranslator.com/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKk ...

  3. 手势仿QQ侧滑---秀清

    // // SlideViewController.h // qqcehua // // Created by 张秀清 on 15/5/25. // Copyright (c) 2015年 张秀清. ...

  4. Solution -「ARC 104D」Multiset Mean

    \(\mathcal{Description}\)   Link.   读题时间≈想题时间,草.(   给定 \(N,K,M\),对于每个 \(x\in[1,N]\) 的整数 \(x\),统计多重集 ...

  5. 面向对象—继承(Day19)

    初识继承 继承是一种创建新类的方式,在python中新类可以继承一个或多个父类,父类又可称为基类或超类,新建的类为派生类或子类.(类与类之间的关系是什么是什么的关系.) 继承语法: class Par ...

  6. 麦克风阵列波束形成之DSB原理与实现

    语音识别有近场和远场之分,且很多场景下都会用到麦克风阵列(micphone array).所谓麦克风阵列是一组位于空间不同位置的麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式

    在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...

  8. pytest(12)-Allure常用特性allure.attach、allure.step、fixture、environment、categories

    上一篇文章pytest Allure生成测试报告我们学习了Allure中的一些特性,接下来继续学习其他常用的特性. allure.attach allure.attach用于在测试报告中添加附件,补充 ...

  9. 探秘inter()方法

    最近在阅读<深入理解Jav虚拟机>的运行时常量池章节,看到"java语言并不要求常量池一定只有编译器才能产生...运行期间也可以将新的常量放入常量池,这种特性被开发人员利用得比较 ...

  10. Python中类的定制

    1 class Chinese: 2 eye = 'black' 3 4 def eat(self): 5 print('吃饭,选择用筷子.') 6 7 class Guangdong(Chinese ...