IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Python单元测试框架unittest使用全解析(文末赠书) -> 正文阅读

[开发测试]Python单元测试框架unittest使用全解析(文末赠书)

作者:title text-truncate

unittest是Python语言自带的单元测试框架,不仅适用于单元测试,还可以适用于web自动化测试,提供了很多断言方法,可以组织执行测试用例,生成测试结果等。

unittest基础概念

  1. TestCase测试用例,一个TestCase就是一条测试用例。

  2. TestSuite测试套件,多条测试用例集合在一起。TestSuite可以嵌套TestSuite。

  3. TestRunner测试执行,用来执行测试用例套件。

  4. TestFixture对一个测试环境的搭建和销毁,被称为一个Fixture,比如数据库连接关闭、测试环境数据清理、启动关闭服务进程。

  5. TestLoaderTestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

测试方法:setUp、tearDown执行每个测试方法都会执行一次setUp、tearDown

类级别:setUpClass、tearDownClass所有测试方法运行前运行后执行,使用@classmethod装饰器,整个测试过程只执行一次。

unittest断言

断言,就是让程序自己判断执行结果是否符合预期。

6d2d8d0b3c427bfa12689f5d56687394.png
  • 测试模块引入 import unittest

  • 测试类必须继承 unittest.TestCase

  • 测试方法必须以“test开头”,执行顺序按照开头字符串ASCII码升序执行。

一个简单的unittest使用示例

import?unittest
class?Test(unittest.TestCase):
????def?setUp(self)?->?None:
????????#?每个测试方法前执行
????????print("setUp方法")
????def?tearDown(self)?->?None:
????????#?每个测试方法后执行
????????print("tearDown方法")
????@classmethod
????def?setUpClass(cls)?->?None:
????????print("setUpClass每个类执行一次")
????@classmethod
????def?tearDownClass(cls)?->?None:
????????print("tearDownClass每个类执行一次")
????def?test_01(self):
????????a?=?1
????????b?=?2
????????c?=?a?+?b
????????self.assertEqual(c,3)
????def?test_02(self):
????????a?=?2
????????b?=?3
????????c?=?a*b
????????self.assertEqual(c,6)

if?__name__?==?'__main__':
????#?调用main方法执行unittest内所有test开头的方法
????unittest.main()
ea57ee591f8a2055af835875481a1b70.png

加载执行用例的几种方法

main方法

if?__name__?==?'__main__':
????unittest.main()

testsuit方式

suit?=?unittest.TestSuite()??#?创建suit实例并构造测试用例集
????suit.addTest(Test('test_01'))??# Test为class名;test_01是class中的方法
????suit.addTest(Test('test_02'))?#?用例执行顺序,按照加载的顺序执行
????runner?=?unittest.TextTestRunner()
????#?使用run方法运行测试套件
????runner.run(suit)

testloader方式

加载器TestLoader提供了以下几个方法来查找用例并批量加入测试套件:

  • loadTestsFromTestCase:根据传入的测试类查找用例

  • loadTestsFromName:根据传入的名称查找用例

  • loadTestsFromModule:通过模块名添加该模块内所有的测试用例

suit?=?unittest.TestSuite()
????loader?=?unittest.TestLoader()?#?创建加载器对象
????suit.addTest(loader.loadTestsFromTestCase(Test))?#?通过测试类加载测试
????runner?=?unittest.TextTestRunner()
????#?#?使用run方法运行测试套件
????runner.run(suit)

discover 路径加载

使用unittest.defaultTestLoader()类,通过该类下面的discover()方法自动搜索指定目录下指定开头 的.py文件,并将查找到的测试用例组装到测试套件。

test_dir='./'
????# test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式
????discover?=?unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py')
????runner?=?unittest.TextTestRunner()
????runner.run(discover)

unittest的执行结果

  • “.” 表示测试用例执行通过

  • “F” 表示执行失败

  • “E” 表示执行错误

  • "s“ 表示运行跳过

测试报告

单元测试完成后,可以将结果生成HTML测试报告。HTMLTestRunner是Python标准库的unittest模块的一个扩展。它生成易于使用的HTML测试报告。

HTMLTestRunner使用准备

1.下载HTMLTestRunner.py 链接: https://pan.baidu.com/s/1-iLHuHHbpuL1qdV3AMj6bA 提取码: w8og 也可以在github上搜索功能更强大的模板。

2.复制HTMLTestRunner.py文件到项目文件夹或者Python 安装路径下的lib文件夹。

示例

import?unittest
from?HTMLTestRunner?import?HTMLTestRunner
import?time


class?Test(unittest.TestCase):
????def?setUp(self)?->?None:
????????#?每个测试方法前执行
????????print("setUp方法")

????def?tearDown(self)?->?None:
????????#?每个测试方法后执行
????????print("tearDown方法")

????@classmethod
????def?setUpClass(cls)?->?None:
????????print("setUpClass每个类执行一次")

????@classmethod
????def?tearDownClass(cls)?->?None:
????????print("tearDownClass每个类执行一次")

????def?test_01(self):
????????a?=?1
????????b?=?2
????????c?=?a?+?b
????????self.assertEqual(c,?3)

????def?test_02(self):
????????a?=?2
????????b?=?3
????????c?=?a?*?b
????????self.assertEqual(c,?5,?"不相等")


if?__name__?==?'__main__':

????test_dir?=?'./'
????# test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式
????discover?=?unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py')
????#?定义报告目录
????file_dir?=?"./report/"
????#?定义报告名称格式
????now_time?=?time.strftime("%Y-%m-%d?%H_%M_%S")
????#?报告完整路径和名称
????file_name?=?file_dir?+?now_time?+?"Report.html"
????with?open(file_name,?"wb")?as?fp:
????????#?创建执行对象??是一个HTMLTestRunner的对象??生成测试结果报告内容
????????runner?=?HTMLTestRunner(stream=fp,
????????????????????????????????title="测试报告",
????????????????????????????????description="用例执行情况:",
????????????????????????????????verbosity=2
????????????????????????????????)
????????#?执行测试流程
????????runner.run(discover)

1ae9d684a8193c8873693690726dcd53.png


 

好书推荐

Vue.js全家桶零基础入门到进阶项目实战

Vue.js 是一套构建用户界面的渐进式框架,本书旨在帮助读者全面掌握 Vue.js 全家桶技术和单页面前后端分离项目开发,理解 MVVM 框架思想,让前端和后端开发人员快速精通 Vue.js 全家桶技术。

本书贯穿入门准备实操、基础核心案例、中级进阶实战、综合进阶项目进行讲解,循序渐进、环环相扣,通俗易懂,并分析为什么这样使用,让你知其所以然。包含的主要技术:NPM/CNPM、VS Code、Vue.js、 MVVM、Axios、Vue Router、webpack、ECMAScript 6、Vue Loader、Vue CLI、Element UI、Vuex、 Mock.js、Easy Mock、ECharts 、Promise、拦截器、组件通信、跨域问题、上线部署等。

36550f401778c1001ad561cd34007003.png

留言点赞送此书:?点在看本文并留言(本文内容相关、本书相关、其他公众号建议),我将随机挑选一位粉丝包邮送出本书(同一人一个月只有一次机会),送书活动会持续进行,机会多多,大家持续关注,感谢。
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:01:22  更:2021-11-14 22:02:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:42:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码