Unittest是基于Python的单元测试框架,当然现在经常与其他框架集成,用来做自动化测试的框架。比如跟Selinum一起做Web UI的自动化测试框架,与Requests一起做接口的自动化测试框架,与Twisted一起做VoIP系统的自动化测试框架等等。

1 Unittest的几大组件介绍

2 测试用例的编写

(1)TestCase组件介绍

当我们写测试用例的时候,是需要自己实现一个类,该类需要集成unittest框架自带的TestCase类。我们具体每一个case的体现就是一个以test打头的实例方法,具体的测试用例代码都是写在以test打头的实力方法里面。

另外,父类TestCase给我们提供了几个方法【实例方法:setUP()、tearDown()、addCleanup(),类方法:setUpClass()、tearDownClass()、addClassCleanup()】,用来充当TestFixture。帮我们实现测试用例执行前环境的创建、执行后环境的清理工作。

当然,类TestCase给我们提供了大量的断言方法【assert*()】,用例判断测试用例的结果是否符合预期,这些断言方法,我们可以在以test打头的实例方法里调用。

最后TestCase给我们提供了运行case的实例方法【run()】,不过呢该方法我们不会直接调用,而是通过调用后文讲的【Testrunner】的方法【run()】,再调用它。

(2)TestCase有关方法执行顺序

(3)编写一个测试用例文件

如下:

## test_case_demo.pyimport unittestclass TestStringMethods(unittest.TestCase):@classmethoddef setUpClass(cls):print('Before all test cases')def setUp(self):print('Before some test case')def tearDown(self):print('After some test case')@classmethoddef tearDownClass(cls):print('After all test cases')def test_upper(self):print(__name__ + '.' + 'test_uppern')self.assertEqual('foo'.upper(), 'FOO')def test_isupper(self):print(__name__ + '.' + 'test_isuppern')self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())def test_split(self):print(__name__ + '.' + 'test_splitn')s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# check that s.split fails when the separator is not a stringwith self.assertRaises(TypeError):s.split(2)

3 测试用例的执行

(1)TestSuite组件介绍

站坑

(2)TestLoader组件介绍

站坑

(3)TestResult组件介绍

(4)TestRunner组件介绍

顾名思义,TestRunner是用来运行我们的TestCase的,最终会产生一个结果,形成一个测试报告。

一般根据TestResult,我们的TestRunner会有几种,比如基于文本的TextTestRunner,基于HTML的HtmlTestRunner()。

我们已unittest框架自带的运行器TexTestRunner()为例,该class的构造方法,接受几个参数,如下:

TexTestRunner(stream=None, descriptions=True, verbosity=1, failfast=False, buffer=False, resultclass=None, warnings=None, *, tb_locals=False)

最后我们可以调用该class的run()方法,运行testcase,当然testcase作为该方法的入参,如下:

run(test)

(5) 执行测试用例

从上面不难知晓,Testcase是Unittest框架的核心,整个框架都是围绕Testcase展开的,这一节重点阐述运行Testcase的几种方法。

(5.1)采用unittest框架自带的入口文件完成

采用unittest框架自带的入口文件,有两种处理方式。

第一种方式,在testcase文件里面,最后几行加入以下代码:

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

然后执行以下命令即可。

python3 test_case_demo.py

这种方式的缺点是,一次只能执行一个testcase文件里面的case。

第二种方式,在testcase文件里面,无需额外的代码。不过呢,在运行的时候,需要调用unittest框架自带的入口文件。命令如下:

python3 -m unittest test_case_demo.py

采用该方式,可以通过添加【-v】对运行时的输出信息详细程度等做控制,当然还有其他参数,具体的可以查看源码【unittest/__main__.py】。

(5.2)自己编写入口文件

除了testcase文件以外,我们需要额外编写一个入口文件,用来运行我们的testcase。上面一种方式的入口文件,其实是由unittest框架自身实现的。

入口文件样例如下:

## entry_point.pyimport unittest
from test_case import TestStringMethods# step 1: create test suite
suite = unittest.TestSuite()# # step 2-1: add test case to suite
# suite.addTest(TestStringMethods('test_upper'))
# suite.addTest(TestStringMethods('test_isupper'))
# suite.addTest(TestStringMethods('test_split'))# # step 2-2: add test cases to suite
# cases = [TestStringMethods('test_upper'), TestStringMethods('test_isupper')]
# suite.addTests(cases)# # step 2-3:
# suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestStringMethods))# test 2-4:
suite.addTests(unittest.TestLoader().loadTestsFromName('test_case.TestStringMethods'))# steo 2-5:
discover = unittest.defaultTestLoader.discover(start_dir='./', pattern='test_case.py'
)# step 3: create test runner
runner = unittest.TextTestRunner()# step 4-1: start runner
runner.run(suite)# step 4-2: start runner
# runner.run(discover)

最后执行以下命令,运行testcase。

python3 entry_point.py

python 单元测试_Python系列之单元测试框架【unittest】相关推荐

  1. 派森python教程_Python系列教程一Python入门(一)

    前言 各位看博客的园友们,大家好,我就是那个风流倜傥的KK,还记得我那篇2019年的年中总结博客吗?我想有许多看博客的园友是没有读过我那篇文章的,KK很生气,后果很严重(开个玩笑了,怎么可能).给大家 ...

  2. asp python 定时任务_python定时任务最强框架APScheduler详细教程

    APScheduler定时任务 上次测试女神听了我的建议,已经做好了要给项目添加定时任务的决定了.但是之前提供的四种方式中,她不知道具体选择哪一个.为了和女神更近一步,我把我入行近10年收藏的干货免费 ...

  3. python高性能_Python高性能分布式执行框架-Ray

    Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能.Ray是一个基于Pyth ...

  4. python网络爬虫系列教程——Scrapy框架应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...

  5. python接口自动化(二十一)--unittest简介(详解)

    简介 前边的随笔主要介绍的requests模块的有关知识个内容,接下来看一下python的单元测试框架unittest.熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 T ...

  6. python 单元测试_Python 单元测试(unittest)

    测试目录 项目的整体结构可以参考"软件目录开发规范",这里单说测试目录.一般都是在项目里单独创建一个测试目录,目录名就是"tests".关于目录的位置,一种建议 ...

  7. python单元测试框架—unittest

    目录 unittest核心工作原理 unittest示例 示例1:简单示例 示例2:setUpClass()和tearDownClass() 示例3:通过在测试用例方法名中添加数字test_N指定执行 ...

  8. python单元测试框架Unittest详解

    前言 我们今天来聊聊Python中的单元测试框架unittest,大家都知道在Python中比较热门的测试框架除了pytest就是unittest,我之前有讲过pytest所以今天想讲unittest ...

  9. 软件测试系列之单元测试 (转载)

    软件测试系列之单元测试   2009-05-26 作者:Delores 来源:Delores的blog   1 基本理论 整理资料时发现以前给兄弟们灌输的单元测试的一些基本知识,放在这里供大家参考.里 ...

最新文章

  1. 怎样用python画雪花_python使用turtle库与random库绘制雪花
  2. 因贡献Linux社区被Linus关注,受公司10万期权奖励!酷派重回大众视野...
  3. 深圳python培训比较好的机构-深圳十大python培训机构排名
  4. sql advantage 执行sql_Sql 的执行顺序是怎样的?
  5. 由Photoshop高反差保留算法原理联想到的一些图像增强算法。
  6. 用python编写图片生成器_python生成器
  7. AttributeError: 'module' object has no attribute 'text_format'
  8. 剩余 大小 查看内存_谈谈内存压缩那些事
  9. 剑指offer之求两个数之和(不能使用四则运算)
  10. strcpy、strncpy与memcpy的区别与使用方法
  11. [蓝桥杯][2019年第十届真题c/c++B组]完全二叉树的权值
  12. NET 自定义配置文件 Configuration
  13. pr中音频转场的介绍和使用
  14. 毕业5年决定你的命运 --------值得所有不甘平庸的人看看
  15. 现在计算机上都有高速缓冲存储器,高速缓冲存储器(Cache.一般采用DRAM构成
  16. 虚拟空间、vps、管理型服务器和独立主机之间那些事儿
  17. java无法验证证书_java – 如何解决“证书无效且无法用于验证此网站的身份”错误?...
  18. unity如何插入图片_unity 图片导入及其使用方法
  19. 如何学习三点透视?该注意什么?
  20. 分享自己的页游运维架构

热门文章

  1. 知识点的积累(零碎的积累)
  2. 【通信原理】【实验】实验三: 数字调制解调实验2ASK--2FSK--2PSK思路(GZHU)
  3. openCV笔记(持续更新)
  4. python django升级安装sqlite3后在python命令行还是显示旧版本的解决办法
  5. helm部署kafka完整记录
  6. docker离线包相关脚本编写示例:docker镜像load/push/save脚本
  7. k8s Service之NodePort
  8. kafka topic常用命令
  9. Scala 类中声明方法
  10. Linux nohup 和 命令