XUnit测试框架-Python unittest

article/2025/10/20 9:27:19

选择

语言选择

本次个人作业我选择的语言是Python,了解学习Python有一段时间了但是一直没有练习,所以这次玩蛇,使用的版本是Python3.6。

开发工具选择

我选择的IDE是Pycharm,个人认为Pycharm是一款不错的Py开发工具,用起来得心应手,unittset是py自带的包不需要安装直接引用即可,方便快捷。开发工具截图如下。
1425720-20190411173337484-259995679.png

Python单元测试框架unittest

unittest简介

TestCase(测试用例)

一个testcase就是一个测试用例,包括测试前环境的搭建setUp,执行测试代码run,测试后环境的还原tearDown,是一个完整的测试单元。

TestSuite(测试套件)

多个testcase的集合

TestLoder

用来加载TestCase到TestSuite中

TextTestRunner

是来执行测试用例的

TextTestResult

保存测试结果的类

TestFixture

测试准备前和执行后要做到的工作

核心工作原理

工作原理

unittest实例

准备待测方法

mathfunc.py

def  add(a,b):return a+bdef minus(a,b):return a-bdef multi(a,b):return a*bdef divide(a,b):return a/b

编写测试方法

test_mathfunc.py

import unittest
from mathfunc import *class TestMathFunc(unittest.TestCase):#每个测试方法以test开头def test_add(self):self.assertEqual(3,add(1,2))self.assertNotEqual(3,add(2,2))def test_minus(self):self.assertEqual(1,minus(3,2))def test_multi(self):self.assertEqual(6,multi(2,3))def test_divide(self):self.assertEqual(2,divide(6,3))self.assertEqual(2.5,divide(5,2))if __name__ == '__main__':#verbosity  输出详细程度 0 1 2unittest.main(verbosity=2)

运行结果

测试通过

测试通过

测试不通过

把除法/改为//(整除)报错如下图
测试报错

TestSuite

上面的代码运行无序,如果我们写的用例有顺序的话,就需要用TestSuite,被添加到TestSuite中的case会被按照顺序执行。
编写test_suite.py代码如下

 import unittest
from test_mathfunc import TestMathFunc
from HTMLTestRunner import HTMLTestRunnerif __name__ == '__main__':suite = unittest.TestSuite()tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]#addTests添加多个TestCase#addTest添加单个TestCase#suite.addTests(tests)suite.addTests(unittest.TestLoader().loadTestsFromName('test_mathfunc.TestMathFunc'))#suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_mathfunc.TestMathFunc')]) 传入列表runner = unittest.TextTestRunner(verbosity=2)runner.run(suite)

addTests方法

传入一个TestCase对象的列表。

unittest.TestLoader().loadTestsFromName/Names

传入一个TestCase对象,这个对象里可以包含多个test_开头的方法,每个test_开头的方法处理的时候都可以理解为一个TestCase实例。

TestFixture

在实际测试中,我们可能会遇到这种情况,需要测试的方法中有的需要连接数据库,测试完毕需要还原数据,所以我们就需要一个准备环境的方法(setUp)还有清理环境的方法(TearDown),这就是TestFixture所包含的内容。
修改test_mathfunc.py如下

import unittest
from mathfunc import *class TestMathFunc(unittest.TestCase):#重写了TestCase的方法def setUp(self):print("开始测试之前的环境搭建")def tearDown(self):print("环境清理")def test_add(self):self.assertEqual(3,add(1,2))self.assertNotEqual(3,add(2,2))def test_minus(self):self.assertEqual(1,minus(3,2))def test_multi(self):self.assertEqual(6,multi(2,3))#skip装饰器@unittest.skip("我不想执行除法")#@unittest.skipIf(condition=,reason=)   当condition为true时跳过#@unittest.skipUnless(condition=,reason=)   为false时跳过def test_divide(self):self.assertEqual(2,divide(6,3))self.assertEqual(2.5,divide(5,2))if __name__ == '__main__':unittest.main(verbosity=2)

在实际测试中我们也可能会遇到这样的情况,开始测试前需要连接数据库,测试结束后关闭连接,不需要还原数据,只在开始和结束各自执行一次即可,setUpClass和tearDownClass的作用就是实现以上功能。

    @classmethoddef setUpClass(cls):print("开始测试之前的环境搭建统一")@classmethoddef tearDownClass(cls):print("最后清理环境")

输出结果如下图
输出结果混乱
没有得到想要的结果,多次输出发现setUp和tearDown输出位置不定,猜想是因为不是单线程执行造成的,所以进行调试结果正确,暂存疑问。
输出正确

跳过测试

有时候当某些条件的时候我们可能需要跳过测试,unittest也为我们提供了相应的方法

    #@unittest.skipIf(condition=,reason=)   当condition为true时跳过#@unittest.skipUnless(condition=,reason=)   为false时跳过def test_divide(self):self.assertEqual(2,divide(6,3))self.assertEqual(2.5,divide(5,2))

执行结果如下
跳过测试

把结果保存到文件中

保存到文本文件中

 with open('Unittest.txt','a') as f:runner = unittest.TextTestRunner(stream=f, verbosity=2)runner.run(suite)

会在项目目录下生成Unittext.txt文本文件,内容如下

test_add (test_mathfunc.TestMathFunc) ... ok
test_divide (test_mathfunc.TestMathFunc) ... ok
test_minus (test_mathfunc.TestMathFunc) ... ok
test_multi (test_mathfunc.TestMathFunc) ... ok----------------------------------------------------------------------
Ran 4 tests in 0.000sOK

生成HTML

需要HTMLTsetRunner文件

    with open('HTMLReport.html', 'wb') as f:runner = HTMLTestRunner(stream=f, title="123", description="test", verbosity=2)runner.run(suite)

参考自

转载于:https://www.cnblogs.com/ljsh/p/10651939.html


http://chatgpt.dhexx.cn/article/Xv6Z7OeG.shtml

相关文章

单元测试-xUnit

单元测试-xUnit Assert常用方法 名称描述Eqalexpected.result)断言结果与期望值相等。该方法的重载版本用于比较不同的类型和集合。该方法的另一种版本接受一个额外参数该对象实现了用于比较对象的IEqualityComparer接口NotEqual(expected,result)断言结果不等于期望值True(r…

xUnit安装及注意事项

前言 对于单元测试,想必大家都已再熟悉不过了,同时单元测试的重要性也越发突出,在招聘中也特别强调单元测试,但是对于微软内置的单元测试还是太过于繁琐,于是都在寻找一种简洁并且更加轻量的测试工具。用的最多的莫过于…

Xunit.net 单元测试学习——按顺序测试

最近一直在提高编码的质量,为了保证质量,必须有一套趁手的兵器,Xunit.Net 就是如此霸气的利器。 怎么编写单元测试 怎么会有如此低级的疑问呢?因为从接触单元测试,到使用上,真的不是一个简单的心路历程&am…

单元测试-xUnit总结

xUnit总结 什么是xUnit xUnit.net是针对.NET Framework的免费,开源,以社区为中心的单元测试工具。 自动化测试的优点 可以频繁的进行测试可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动化测…

单元测试之 Xunit

 单元测试项目中引入 xunit.dll 1. 有类 Common,中有方法 Divide(int a, int b),代码如下 public class Common {public int Divide(int a, int b){if (b 0)return 0;return a / b;} } 2. 在单元测试项目中为方法 Divide 写单元…

使用 xunit 编写测试代码

使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使用 xunit 来作为测试框架。 Get Started 在 xunit 中不需要标记…

C#_Unit Testing 一(xUnit)

一、前言 在VS中新建一个xunit的项目,该项目中已经自动安装了一些Nuget包,其中一个关键的就是xunit,https://xunit.net/。 同时,在同一个解决方案下我们也新建了一个类库,这个类库就是需要被测试的。这里提一点&…

在.NET开发中的单元测试工具之(2)——xUnit.Net

在上一篇《在.NET开发中的单元测试工具之(1)——NUnit》中讲述了如何使用NUnit在.NET开发中进行单元测试以及NUnit的一些缺点,今天将讲述如何使用xUnit.Net来进行单元测试。 xUnit.Net介绍 xUnit.net的创造者的创造者是Jim Newkirk和Brad Wilson从包括NUnit及其它单…

单元测试中Assert详解-xUnit

前一篇:详谈单元测试-xUnit 简介 Assert 是基于代码的返回值、对象的最终状态、事件是否发生等情况来评估测试的结果。Assert 的结果可能是 Pass 或者 Fail。如果所有的 Asserts 都通过了,那么整个测试就通过了。如果任何 Asserts 失败了,那…

xUnit-Moq框架

基于上一次的单元测试-xUnit进行 Models文件夹 Staff类修改为: public class Staff { public int Id { get; set; } public string Name { get; set; } public string State { get; set; } public int Age { get; set; } } 创建一个IRepository接口…

xUnit.net入门

xUnit.net是一个免费的、开源的、以社区为中心的.net框架单元测试工具。 本文在Win10Visual Studio2022-Preview下,创建一个简单的.Net Framework4.8的xUnit.net测试项目。 1、新建项目 打开VS2022,新建项目,弹出“创建新项目”窗口&#…

xUnit总结--学习笔记

xUnit.net是针对.NET Framework的免费,开源,以社区为中心的单元测试工具。 自动化测试的优点# 可以频繁的进行测试可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动化测试比人工测试速度快可以更…

Xunit入门

本节记录Xunit单元测试的入门知识,以2.1版本作为入门示例。 1、新建一个类库项目 2、在Nuget中搜索xunit,这里我们只选xUnit.net和xunit.runner.visualstudio包。 其中xUnit是框架,而xunit.runner.visualstudio是vs插件包,让我们可…

3. 使用xUnit进行单元测试

实现.NET Core时,xUnit可用于创建单元测试,.NET Core团队使用了该产品。xUnit是一个开源实现方案,创建NUnit 2.0的开发人员创建了它。现在,.NET Core命令行界面支持MSTest和xUnit。 提示: xUnit的文档可参阅https://…

详谈单元测试-xUnit

简介 xUnit.net 是针对 .NET 的免费,开源单元测试框架,可并行测试、数据驱动测试。测试项目需引用被测试项目,从而对其进行测试,测试项目同时需要引用 xUnit。测试编写完成后,用 Test Runner 来测试项目,T…

01 如何利用xUnit框架对测试用例进行维护-xUnit简介及基本使用方法(基于Junit4)

1、xUnit是什么 先看Wikipedia上的解释 xUnit是一系列测试框架的统称,最开始来源于一个叫做Smalltalk的SUnit框架,现在各种面向对象的语言,如Java、Python的鼻祖就是Smalltalk,后来这些语言都借助了Sunit框架的理念,有…

【IoT】物联网NB-IoT之移动oneNET平台硬件接入

主要实现开发者实际的终端设备在 OneNET 平台上的创建、连接和数据交互。在完成用户注册和产品创建后,即可根据相关所创建产品的协议类型选择相应的硬件接入的开发。 接入流程可参见下图: 1、LWM2M 协议 - NB-IoT 测试接入流程分为平台域和设备域&…

【安装工具】【ARM-DS-5】成功破解ARM DS-5 v5.26.0 + 配置高通MDM9026芯片的demo==》成功编译得到demo.bin文件

Note:Win7 64环境 安装破解ARM DS-5 v5.26.0 http://blog.csdn.net/qq_27295631/article/details/68582582 验证破解成功 安装MinGW http://blog.csdn.net/qq_27295631/article/details/68582582 设置系统属性-环境变量(bin/lib/inc) ARMBIN C:\Program Files…

把乌托邦变成细密画:华为如何思考家居IoT?

奥尔罕帕穆克凭借他的名作《我的名字叫红》一举跃入20世纪文学史,而这部广为人知的作品也让我们知道了一种绘画史上非常奇特的艺术形式:细密画。 这种流传自希腊罗马,盛行于波斯帝国的艺术样式,特点是要在书的扉页、边框&#xff…