unittest 单元测试
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 单元测试的更多相关文章
- Node.js的UnitTest单元测试
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } 在专业化的软件开发过程中,无论什么平台语言,现在都需要UnitTes ...
- 我的TDD实践---UnitTest单元测试
我的TDD实践---UnitTest单元测试 “我的TDD实践”系列之UnitTest单元测试 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则 ...
- unittest单元测试框架总结
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- unittest单元测试框架详解
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- unittest单元测试框架
unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...
- python unittest单元测试
unittest单元测试框架:包含测试用例编写.测试收集\测试用例加载.执行测试用例.生成测试用例报告,同时,更提供了添加断言,异常处理等. 第一:创建测试类,创建测试用例 第二:收集测试用例,加载测 ...
- python之unittest单元测试
# unittest单元测试 import unittest from class_demo import Car class TestCar(unittest.TestCase): '''测试Car ...
- unittest单元测试简单介绍
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
随机推荐
- Activity生命周期,切换,参数传递,bundle(包),值对象,Activity参数返回,Activity的启动模式
Activity代表手机屏幕的一屏,或是平板电脑中的一个窗口.它是android应用中最重要的组成单元之一,提供了和用户交互的可视化界面.在一个Activity中,可以添加很多组件,这些组件负责具体的 ...
- linux 3.10 一次softlock排查
x86架构.一个同事分析的crash,我在他基础上再次协助分析,也没有获得进展,只是记录一下分析过程.记录是指备忘,万一有人解决过,也好给我们点帮助. 有一次软锁,大多数cpu被锁,log中第一个认为 ...
- 【转】解决Eclipse中SVN版本信息不显示的问题
eclipse 中使用 svn 插件,原本正常,未作任何更改,最近几天突然eclipse 中查看文件时,文件后面的 版本号 . 文件的状态图标 等等都不见了.以为有插件冲突,卸载了好多其他的相关的插件 ...
- Android DevArt3:SingleTask启动模式探究:首先从MainActivity启动案例入口AActivity,并在A中启动BActivity,从B启动CActivity, 再从C中又启动AActivity, 最后在A中启动B,现在按两次back键,然后回到的是哪个Activity? 答案是,回到MainActivity。
SingleTask启动模式探究 GitHub如题:首先从MainActivity启动案例入口AActivity,并在A中启动BActivity,从B启动CActivity,再从C中又启动AActiv ...
- server安装
ArcGIS Server Enterprise10 安装过程 1.ArcGIS Server Enterprise10 安装之前先检查下系统有没有安装IIS.右击电脑--管理--服务和应用程序--I ...
- 使用firefox插件httperrequest,模拟发送及接收Json请求 【转】
转自[http://blog.csdn.net/feixue1232/article/details/8535212] 目标:使用httpreques\Json-Handle\tcpdump\wire ...
- Mybatis之mapper.xml配置文件中的#{}和${}
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换.#{}可以有效防止sql注入. #{}可以接收简单类型值或pojo ...
- CentsOS6 Tomcat7 报javax.management.InstanceNotFoundException 解决办法
警告: Failed to unregister MBean with name [Catalina:j2eeType=Servlet,name=UploadServlet,WebModule=//l ...
- workerman 平滑重启
<?phpuse Workerman\Worker;use Workerman\Lib\Timer; require_once '../../web/Workerman/Autoloader.p ...
- sass 使用clac的问题
最后在github的issue中找到了方法,要想在sass的calc中使用变量,必须对这个变量使用sass的插值方法(#{$variable}). 所以把代码改正下面的形式就可以了: width: c ...