一、单元测试的含义

unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试、为测试共享setUp和shutDown、它可以在将测试用例聚合到一起形成一个集合一起执行的同时在测试报告中展示独立的测试结果。

为了达到此目的,unittest支持几个重要的面向对象式的概念:

1、test fixture

  一个test fixture所做的事情是执行单个或多个测试用例时的准备工作和执行结束后的一些相关清理工作,这包括:创建临时或代理数据库、目录或开始服务器进程。。。

2、test case

  一个test case 是一个独立的测试单元,针对于一组特定的输入得到的特殊相应的验证,通过继承unittest提供的基类TestCase, 然后可以创建新的测试用例

3、test suite

  一个test suite 是一组测试用例的集合,也可以是一组test suite的集合,也可以两者混合的集合,test suite就是用来聚合你想要一起执行的测试用例的

4、test runner

  一个test runner 是一个协调测试执行并向用户提供执行结果的组建,它可以使用图形界面、文本界面或返回一个特殊值标识测试执行的结果

二、实例代码

下面我们看Python官方给的一个简单的小例子,来测试三个字符串

import unittestclass TestStringMethods(unittest.TestCase):  # 测试类继承了unittest.TestCase类,因此在该类里可以创建新的测试用例def test_upper(self):self.assertEqual('foo'.upper(), 'FOO')  # ‘foo’是一个字符串,upper()方法会将这个字符串转成大写,assertEqual是unittest提供的一个断言方法,用来比较逗号前后两个值是否相等def test_isupper(self):self.assertTrue('FOO'.isupper())  # assertTrue也是unittest提供的断言方法,用来判断括号内的内容是真是假,如果是真则断言成功,否则为失败,'FOO'是个字符串并且是大写,调用isupper()方法,返回结果self.assertFalse('Foo'.isupper())  # assertFalse则正好相反,如果括号内返回为假则断言成功,否则为失败def test_split(self):s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):s.split(2)if __name__ == '__main__':unittest.main()

三、代码解析:

在第三个用例里,定义了一个字符串,s='hello world', 然后进行了断言,断言的条件里调用了一个split()方法,实际上初学者看到这会比较懵,s.split()到底返回的是什么,它是否等于逗号后边['hello', 'world']?

学这个东西就是要多试试,那么接下来我们进行一系列尝试来认识一下split()

启动命令行CMD,进入python环境

尝试1:定义一个字符串  s = 'hello world', 然后 print(s)回车,结果应该是  hello world

尝试2:如果我们敲入print(s.split())然后回车呢呢,结果应该是['hello', 'world'], 到此我们就得到了答案,第三条用例里的断言self.assertEqual(s.split(), ['hello', 'world'])是成功

尝试3:如果我们print(s.split(2)) 会是什么结果?  如果我们print(s.split('o'))又会是什么结果?

        with self.assertRaises(TypeError):s.split(2)

在第三个用例里,我们也看到了两行代码,split()函数我们已经知道它能干什么了,那么with是什么?assertRaises在这又在干什么?

with,我们总提python之美,那么这就是美丽之处,with语句提供一个有效的处理异常和完成清理工作的机制,它让代码更简练,有点懵没关系,换一个方式说,如果不用with,要达到同等效果的的话要用什么呢?try...except...finally,这是另一个课题了并不是此处的重点,读者朋友可以先忽略它不要打断学习unittest的思路

assertRaises是什么呢?unittest 模块提供了用于测试函数是否在给定无效输入时引发特定异常的方法,这个方法就是assertRaises,我们在回去看代码,s.split(2), 很明显我们前边已经尝试过执行参数为2的情况,报了异常,也就是2并不是split函数的合法参数,我们传给2这个参数,它理应报异常,那么好with self.assertRaises(TypeError): 在干什么,它想要的就是看看split()在得到了非法参数的时候是否报一个TypeError,此处读者可能要整理一下思路,仔细阅读此段内容

最后的unittest.main(),有了它我们就有了一个简单的方式执行这个脚本,unittest.main()提供了命令行界面运行脚本的方式

假设我们上边的脚本保存在文件testingunit.py里并将它保存在桌面,然后我们启动命令行,输入“python C:\Users\davieyang\Desktop\testingunit.py”  看看是个什么结果?

C:\Users\用户名>python C:\Users\davieyang\Desktop\testingunit.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.001sOK

我们能看到4个....,它的意义我们共4个用例,点表示测试通过,那么如果点表示测试通过,什么表示测试失败呢? 是“F”,如果测试遇到异常呢? 是“E”

如果我们执行“python C:\Users\davieyang\Desktop\testingunit.py -v”又是什么结果?

C:\Users\用户名>python C:\Users\davieyang\Desktop\testingunit.py -v
test_isupper (__main__.TestStringMethods) ... ok
test_list (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok----------------------------------------------------------------------
Ran 4 tests in 0.002sOK

转载于:https://www.cnblogs.com/davieyang/p/10159630.html

单元测试框架之unittest(一)相关推荐

  1. python单元测试框架-Python unittest单元测试框架总结

    什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入 ...

  2. python 单元测试_Python系列之单元测试框架【unittest】

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

  3. Python单元测试框架之unittest+requests+ddt+excel接口自动化测试

    unitetest是python里单元测试框架,是基于 java 的 junit 测试框架 相当于是一个 python 版的 junit,除了 unittest,还有一个 pytest 框架 unit ...

  4. python单元测试框架之unittest和pytest的区别

    前言 今天呢笔者想和大家来聊聊Python单元测试框架,我们都知道python单元测试框架有很多,大家平时经常使用的是unittest,因为它比较基础,并且可以进行二次开发,如果你的开发水平很高,集成 ...

  5. unittest单元测试框架之unittest案例(二)

    1.待测方法: 1 # 加法,返回 a+b 的值 2 def add(a,b): 3 return a+b 4 # 减法,返回 a-b 的值 5 def minus(a,b): 6 return a- ...

  6. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

  7. unittest测试框架_python接口自动化测试 - 4.unittest单元测试框架学习

    简介 unittest就是python的一个单元测试框架,unittest非常适合做自动化测试. 官方源码栗子: import unittestclass IntegerArithmeticTestC ...

  8. python测试框架untest_Python测试框架之unittest和pytest

    目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内.近期打算重新优化框架 ...

  9. [转载] python面面观单元测试_python 使用unittest进行单元测试

    参考链接: 使用Unittest在Python中进行单元测试 importunittestimportHTMLTestRunner"""Python中有一个自带的单元测试 ...

最新文章

  1. 窗口函数(防忘笔记)
  2. mysql优化的重要参数 key_buffer_size table_cache
  3. HDU 6304 Chiaki Sequence Revisited
  4. Blending and Bagging
  5. 链表操作---面向过程--到---面型对象---到模板类
  6. 湖南雅礼培训 1.1
  7. linuxpython重定向_linux命令重定向、、 1、 2、 1、 2、
  8. oracle 取系统当前年份_Oracle中如何获取系统当前时间
  9. python123组合数据类型答案_Python组合数据类型
  10. HDU-4278 Faulty Odometer 数学递推 || 八进制
  11. java线程wait()使一个线程一直运行,一直提供服务
  12. 一、初识函数定义与调用
  13. 一起来看React(路由跳转)
  14. [c++] 关于STL中list类的Remove方法的编译错误C2678
  15. 计算机网络工程师多久过期,软考网络工程师证书有效期
  16. @JsonView注解的使用
  17. 【python】数据挖掘 实验:中国二级城市经纬度聚类分析
  18. python开发erp系统odoo_odooERP系统(框架)总结
  19. 【好看图标不用愁】吾爱万能软件ICO图标提取器
  20. 2寸的照片长宽各是多少_标准的2寸照片尺寸是多大?

热门文章

  1. mac redis 链接_在Ubunt/Mac系统安装Redis以及设置Redis密码并且允许远程连接 - Laravel学习网...
  2. 【多线程】ThreadPoolExecutor 类的使用详解
  3. Day 23 面向对象进阶
  4. JavaScriptjQuery 基本使用
  5. 高斯消元整数版和浮点数版实现
  6. Android 聊天软件客户端
  7. 26. linix脚本启动java程序
  8. 元素函数编程之美系列之栈和队列1—在O(1)的时间内得到栈的最大或者最小值...
  9. elasticsearch批量修改,批量更新某个字段
  10. 在 Windows 内核上运行 Docker 靠谱吗?专家六问六答帮你解惑!