高颜值测试报告- XTestRunner

news2024/11/26 17:48:57

基于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))

报告展示

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后: 我给大家整理了一份完整的全套软件测试学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

全套资料获取方式:评论区给我留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADG-rac备库的问题处理

第一次配置rac to rac的的adg&#xff0c;ADG过程就不叙述了&#xff0c;备库同步完成后&#xff0c;使用srvctl加入集群时未报错&#xff0c;但是使用crsctl status res -t查看状态时&#xff0c;发现了问题&#xff0c;如下图 ASM1:/home/gridhydb1> crsctl status res -…

达梦数据库DSC集群搭建:两节点与多节点(三节点)集群搭建

目录 说明... 4 两节点集群搭建... 5 一、创建共享磁盘... 6 1、DMDSC01添加硬盘... 6 2、DMDSC02添加共享磁盘... 8 二、搭建DMDSC集群... 12 1、安装完成数据库配置资源限制... 12 2、添加用户变量... 13 3、共享磁盘分区... 14 4、新建udev规则文件-裸设备绑定...…

如何将PDF转换为Excel?这4个方法请收好

PDF&#xff08;便携式文档格式&#xff09;因其安全且易于访问而广泛用于在线共享和存档文档。但是&#xff0c;很多时候您可能需要从 PDF 文档中提取数据以在 Excel 中使用它。这是将 PDF 转换为 Excel 发挥作用的地方。在本文中&#xff0c;我们将探讨将 PDF 文件转换为 Exc…

HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 一)

HarmonyOS提供了一套复杂且强大的Java UI框架&#xff0c;其中Component提供内容显示&#xff0c;是界面中所有组件的基类。ComponentContainer作为容器容纳Component或ComponentContainer对象&#xff0c;并对它们进行布局。 Java UI框架也提供了一部分Component和ComponentC…

linux系统总结

linux系统总结&#xff1a; linux系统总结 一、网络&#xff1a;1.七层模型&#xff1a;2.三次握手&#xff0c;四次挥手&#xff1a;3.网络层&#xff1a;ARP&#xff0c;icmp4.总结tcp和udp的不同&#xff1a;5.端口号的作用&#xff1a;6.VRRP的原理&#xff1a;SNAT DNAT7…

论文解读 | 超越人类智慧!类脑多模态混合神经网络助力机器人精准定位

原创 | 文 BFT机器人 01 研究内容 这篇论文的研究内容是基于大脑启发的多模态混合神经网络&#xff0c;用于机器人地点识别。研究人员设计了一个名为NeuroGPR的系统&#xff0c;该系统可以模拟大脑的多模态感知机制&#xff0c;从传统和神经形态传感器中编码和整合多模态线索&a…

消息队列的基本概念

每种消息队列都有自己的一套消息模型&#xff0c;像队列&#xff08;Queue&#xff09;、主题&#xff08;Topic&#xff09;或是分区&#xff08;Partition&#xff09;这些名词概念&#xff0c;在每个消息队列模型中都会涉及一些&#xff0c;含义还不太一样。 为什么出现这种…

1.8C++流提取运算符重载

C流提取运算符重载 在 C中&#xff0c;流提取运算符&#xff08;>>&#xff09;是用于从流中提取数据的运算符。 C中的流提取运算符可以被重载&#xff0c;使得程序员可以自定义输入对象的方式&#xff0c;更方便地输入自定义的数据类型&#xff0c;也可以使得输入更加…

阿里云轻量应用服务器和云服务器ECS区别(终于懂了)

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;云服务器ECS是明星级云服务器&#xff0c;轻量应用服务器可以理解为简化版的云服务器ECS&#xff0c;轻量适用于单机应用&#xff0c;云服务器ECS适用于集群类高可用高容灾应用&#xff0c;阿里云百科来详细说下阿里云轻…

dbGet 快速学习教程

dbGet是innovus/encounter工具自带的"database access command"命令中的一部分&#xff0c;它几乎可以用来获取设计相关的一切信息。 输入dbGet 按[Tab]键&#xff0c;能看到三个选项&#xff0c;分别是head / top /selected。这三个选项所代表的意义如下: head --…

Vue3对于一个前端来讲意味着什么?

最近很多技术网站&#xff0c;讨论的最多的无非就是Vue3了&#xff0c;大多数都是Composition API和基于Proxy的原理分析。但是今天想着跟大家聊聊&#xff0c;Vue3对于一个低代码平台的前端更深层次意味着什么&#xff1f; 首先&#xff0c;Vue是前端三大主流框架之一&#xf…

python,如何设置定时执行python代码-windows本地

最近写了一个python小程序&#xff0c;希望能每天定时执行&#xff0c;但是又不想用jenkins这样的工具&#xff0c;后来发现windows本地就可以设置&#xff0c;而且很好用&#xff0c;具体步骤如下&#xff1a; 首先&#xff0c;需确保本地python代码已编写好&#xff0c;环境…

c++创建对象常见的坑

c创建对象常见的坑 创建对象的时候不要在对象名后面加空的圆括号&#xff0c;编译器误认为是声明函数。&#xff08;如果没有构造函数、构造函数没有参数、构造函数的参数都有默认参数&#xff09;在构造函数名后面加括号和参数不是调用构造函数&#xff0c;是创建匿名对象。以…

【有奖调研】HarmonyOS新物种,鸿蒙流量新阵地——元服务邀你来答题!

“聊技术无话不谈&#xff0c;一起来吹吹元服务&#xff01;畅聊你对元服务的想法&#xff0c;说不定&#xff0c;你就能撬动元服务的爆发增长&#xff01;” 元服务&#xff08;即原子化服务&#xff09;是华为“轻量化”服务的新物种&#xff0c;可提供全新的服务和交互方式…

人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型&#xff0c;利用正态分布数据训练该模型。本文将介绍一种基于PyTorch的BiGRU模型应用项目。我们将首先解释BiGRU模型的原理&#xff0c;然后使用PyTorch搭建模型…

uniApp -- 学习笔记(vue3+ts)

uniApp学习笔记目录 一.关于界面节点信息 6月15 一.关于界面节点信息 6月15 uniApp官网介绍 &#xff08;一&#xff09; 个人理解是官网返回一个 SelectorQuery 对象实例。 并且可以在这个实例上使用 select 等方法选择节点&#xff0c;并使用 boundingClientRect 等方法选择…

使用 Sharesheet分享Android 应用链接

使用 Sharesheet分享Android 应用链接 使用 Sharesheet 进行丰富的链接共享 Android App Links 允许您的应用程序打开网页链接&#xff0c;而不是使用网络浏览器。处理这些深层链接已在我们的《深层链接入门课程》中介绍过。除了能够打开深层链接外&#xff0c;您的应用程序还…

《Lua程序设计》--学习8

编译&#xff0c;执行和错误 编译 可以认为dofile函数就是这样&#xff1a; loadfile函数从文件中加载Lua代码段&#xff0c;但它不会运行代码&#xff0c;只是编译代码&#xff0c;然乎将编译后的代码段作为一个函数返回 函数loadfile更灵活。在发生错误的情况中&#xff0…

100种思维模型之排列组合思维模型-78

说到模型&#xff0c;一般人会觉得特别难&#xff0c;会觉得是学霸级别的人才能做出来的高科技。 然实际上并不是&#xff01; 西方人常说Model&#xff0c;模型在西方人眼里是一个非常常见的词。 查理芒格&#xff0c;多元思维模型倡导者和践行者&#xff0c;他说任何能够帮助…

Elasticsearch:实用 BM25 - 第 1 部分:分片如何影响 Elasticsearch 中的相关性评分

作者&#xff1a;Shane Connelly 背景 在 Elasticsearch 5.0 中&#xff0c;我们切换到 Okapi BM25 作为我们的默认相似度算法&#xff0c;这是用于对与查询相关的结果进行评分的算法。 在本博客中&#xff0c;我不会过多地介绍 BM25 与替代措施&#xff0c;但如果你想了解 B…