unittest 单元测试:

1,单元测试是指对软件中最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来讲,要根据实际情况去判定其具体含义。

2,unitest=TestCase + TestResult  执行 + 结果

3,首先使用import unitest

4,测试的类都是继承于TestCase类

5, setUp()测试前的初始化工作;tearDown()测试后的清除工作(在每个测试方法运行时被调用)

注意:

1,所有类中方法入参为self,定义方法的变量也要“self.变量”(熟悉python的写法其实就是类变量的调用)

2,定义测试用例,以“test”开头命名的方法,方法的入参为self

3,unitest.main()方法会搜索该模块下所有的以test开头的测试用例方法,并且自动执行它们

4,成功会输出,失败是F

先看一个例子:

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/7 21:15' import unittest class UserTestCase(unittest.TestCase):
def setUp(self):
print("--setup--") def tearDown(self):
print("--tearDown--") def test_name(self):
print('--name--') if __name__ == '__main__':
unittest.main()

运行的结果为:

.
--setup--
----------------------------------------------------------------------
--name--
Ran 1 test in 0.000s
--tearDown-- OK

可以看到的顺序是先执行setup方法之后,再去执行自定义的测试方法,最终使用tearDown来进行收尾

再看补充,因为在unitest中必须以test_开头来定义方法,因此新增几个方法。

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/7 21:15' import unittest class UserTestCase(unittest.TestCase):
def setUp(self):
print("--setup--") def tearDown(self):
print("--tearDown--") def test_name(self):
print('--name--') def test_isupper(self):
print('--upper') def test_age(self):
print('--age') if __name__ == '__main__':
unittest.main()

执行的结果为:

--setup--
...
--age
----------------------------------------------------------------------
--tearDown--
Ran 3 tests in 0.000s
--setup-- --upper
OK
--tearDown--
--setup--
--name--
--tearDown--

也就是说,每一个自定义方法开始会调用setup,然后调用自定义方法,然后调用tearDown方法

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/7 21:15' import unittest class UserTestCase(unittest.TestCase):
def setUp(self):
print("--setup--") def tearDown(self):
print("--tearDown--") def test_name(self):
self.assertEqual('foo'.upper(), "FoO", msg='转换不对') # msg=是报错之后的提示信息
print('--name--') def test_isupper(self):
print('--upper') def test_age(self):
print('--age') if __name__ == '__main__':
unittest.main()

结果如下:

--setup--
..F
--age
======================================================================
--tearDown--
FAIL: test_name (__main__.UserTestCase)
--setup--
----------------------------------------------------------------------
--upper
Traceback (most recent call last):
--tearDown--
File "C:/Users/lenovo/Desktop/新建文件夹/自动化测试selenium/unitest_import.py", line 16, in test_name
--setup--
self.assertEqual('foo'.upper(), "FoO", msg='转换不对') # msg=是报错之后的提示信息
--tearDown--
AssertionError: 'FOO' != 'FoO'
- FOO
? ^
+ FoO
? ^
: 转换不对 ----------------------------------------------------------------------
Ran 3 tests in 0.000s FAILED (failures=1)

三个test失败1个,报错信息为转换不对,总体结论为..F

测试套件TestSuite介绍:

需求:

1,利用unitest执行流程测试而非单元测试

2,控制unitest的执行顺序

① unitest.TestSuite()类来表示一个测试用例集

1,用来确定测试用例的执行顺序,决定先后执行

2,如果一个class中有四个test开头的方法,则加载到suite中则有四个测试用例

3, 由TestLoder加载TestCase到TestSuite

4, verbosity参数可以控制执行结果的输出, 0是简单报告,1是一般报告, 2是详细报告

默认1 会在每个成功的用例前面有个“.”每个失败用例前面有个“F”

② TextTestRunner() 文本测试用例运行器

③ run()方法是运行测试套件的测试用例,入参为suite测试套件

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/10 21:37' import unittest class UserTestCase(unittest.TestCase):
def setUp(self):
self.age = 25
self.name = "呦西,开始了"
print('setup method------') def tearDown(self):
print("--tearDown method------") def test_one(self):
print("test_one 周先生来了")
self.assertEqual(self.name, "呦西,开始了", msg="口令不对!") def test_two(self):
print('test_two')
self.assertFalse("ZL".isupper(), msg="不是大写") def test_three(self):
print('test_three')
self.assertEqual(self.age, 25) def test_four(self):
print('test_four')
self.assertEqual(self.age, 25) if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(UserTestCase("test_one")) # 测试类名加方法 # verbosity参数可以控制执行结果的输出, 0是简单报告,1是一般报告, 2是详细报告 默认1 会在每个成功的用例前面有个“.”每个失败用例前面有个“F”
runner = unittest.TextTestRunner(verbosity=0)
runner.run(suite)

运行结果如下:

setup method------
----------------------------------------------------------------------
Ran 1 test in 0.000s
test_one 周先生来了 --tearDown method------
OK

如果增加多个呢?

    suite.addTest(UserTestCase("test_four"))
suite.addTest(UserTestCase("test_two"))
suite.addTest(UserTestCase("test_three"))

注意顺序,这个是指定的顺序添加之后,结果如下:

setup method------
test_one 周先生来了
--tearDown method------
setup method------
test_four
--tearDown method------
setup method------
test_two
--tearDown method------
setup method------
test_three
--tearDown method------
----------------------------------------------------------------------
Ran 4 tests in 0.001s OK

完整代码如下:

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/10 21:37' import unittest class UserTestCase(unittest.TestCase):
def setUp(self):
self.age = 25
self.name = "呦西,开始了"
print('setup method------') def tearDown(self):
print("--tearDown method------") def test_one(self):
print("test_one 周先生来了")
self.assertEqual(self.name, "呦西,开始了", msg="口令不对!") def test_two(self):
print('test_two')
self.assertFalse("zl".isupper(), msg="不是大写") def test_three(self):
print('test_three')
self.assertEqual(self.age, 25) def test_four(self):
print('test_four')
self.assertEqual(self.age, 25) if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(UserTestCase("test_one")) # 测试类名加方法
suite.addTest(UserTestCase("test_four"))
suite.addTest(UserTestCase("test_two"))
suite.addTest(UserTestCase("test_three")) # verbosity参数可以控制执行结果的输出, 0是简单报告,1是一般报告, 2是详细报告 默认1 会在每个成功的用例前面有个“.”每个失败用例前面有个“F”
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)

unittest 单元测试的更多相关文章

  1. Node.js的UnitTest单元测试

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } 在专业化的软件开发过程中,无论什么平台语言,现在都需要UnitTes ...

  2. 我的TDD实践---UnitTest单元测试

    我的TDD实践---UnitTest单元测试 “我的TDD实践”系列之UnitTest单元测试 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则 ...

  3. unittest单元测试框架总结

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  4. unittest单元测试框架详解

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  5. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  6. unittest单元测试框架

    unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...

  7. python unittest单元测试

    unittest单元测试框架:包含测试用例编写.测试收集\测试用例加载.执行测试用例.生成测试用例报告,同时,更提供了添加断言,异常处理等. 第一:创建测试类,创建测试用例 第二:收集测试用例,加载测 ...

  8. python之unittest单元测试

    # unittest单元测试 import unittest from class_demo import Car class TestCar(unittest.TestCase): '''测试Car ...

  9. unittest单元测试简单介绍

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

随机推荐

  1. English-旅游英语及情景对话

    1.旅游英语:预订机票情景对话及常用句型 目前,越来越多的人都选择以飞机为出行方式.但是如何用一口流利的英语订机票呢?这里我们替你总结了一些情景对话,还有一些常用的句型.大家都来学一学吧~A:Good ...

  2. Runloop原理

    简单的说,runloop是一个事件循环的机制,同时能够保活线程.iOS中每个线程都对应一个runloop,主线程的runloop默认开启,其他线程的runloop默认关闭,线程与runloop是一一对 ...

  3. 4:list 列表

    list:列表.数组.array . list 是有序的,list的定义以 [] 为标识.如:list1 = ['name1', 'name2', 'name3'] 元素可以是任何类型的,如字符串.数 ...

  4. 在升级过内核的机器上安装docker遇到的一个错误

    出现了以下错误: [root@osd2 ~]# service docker start Starting cgconfig service: Error: cannot mount memory t ...

  5. 解决mysql从windows迁移到centos出现乱码问题

    windows上的数据库编码情况 修改前centos上的编码情况 修改centos上mysql的配置文件my.cnf如下(修改前停掉mysql服务,/etc/init.d/mysqld stop) 红 ...

  6. CentOS7下搭建LNMP记录

    OS:使用虚拟机最小化安装的CentOS 7系统:配置好防火墙,SELINUX,YUM源,IP地址等. 0.因为采用了最小化安装系统,所缺少的包比较多,必要工具先安装一下 yum install gc ...

  7. 检测浏览器是否支持cookie功能

    <script> if(navigator.cookieEnabled) { document.write("你的浏览器支持cookie功能!"); } else{ d ...

  8. Intellij IDEA使用spring-boot-devtools无效解决办法(2018年3月9日11:46:00)

    步骤一:pom.xml中加入: <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  9. hdu1753-大明A+B-(java大数)

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  10. vue--公告轮播

    html:   <div class="news" v-if="news.length > 0" > <ul class="m ...