python单元测试框架

  1. unittest单元测试框架?
    什么是unittest? 是python标准的单元测试框架模块
    2.unittest框架4个概念?
  • test fixture 测试固件
    代表测试前的准备动作
    代表测试后的清理动作
    如: 创建数据库连接 / 启动服务进程 / 测试环境的清理 / 关闭数据库的连接
  • test case 测试用例
    一个 test case 就是一个最小的测试单元, 也就是一个完整的测试流程.
    针对特定的输入,进行特殊的验证与响应.
    通过继承自unittest的基类TestCase,可以创建测试用例.
  • test suite 测试套件
    代表一组测试用例/ 一组测试套件/ 两者共同组成的集合.
  • test runner 测试运行器
    执行设定的测试用例 with 将测试结果提供给用户两部分功能组成.
  1. 单元测试加载方法?
    1> 直接通过unittest.main()方法加载,按照方法名的字符串表示的ASCII吗升序排序.
    2> 将所有的单元测试用例添加到测试套件集合中,然后一次性加载所有测试对象.
    4.测试用例?
    unittest框架通过TestCase类来构建测试用例
    所有自定义的类都必须继承TestCase类
    TestCase是所有测试用例的基类, 传入一个方法名,将返回一个测试用例对象.
    测试用例即可单独执行, 也可以组合成测试用例集,然后批量执行
    TestCase子类必须从父类继承的几个特殊的方法, 在测试用例执行是均会被依次执行.
  • setUp() 每个测试方法运行前先执行, 测试前的初始化工作.
  • tearDown() 每个测试方法运行结束后运行, 测试后的清理工作.
  • setUpClass() 所有的测试方法运行前运行, 单元测试前期准备,
    必须使用@classmethod装饰器修饰
    在setUp()方法之前执行,整个测试只执行一次.
  • tearDownClass() 所有的测试方法结束之后执行, 单元测试后期清理
    必须使用@tearDownClass装饰器修饰
    在tearDown()方法之后执行,整个测试只执行一次.
    最简单的测试用例只需要覆盖runTest()方法执行自定义的测试代码,这种方法是静态方法.
  1. 使用框架的规定有哪些?
    所有需要被执行的测试方法必须以" test "开头;
    .......
  2. 指定python源码的编码格式
    在源文件第一行或者第二行定义:
# coding=<encoding name>
# coding=utf-8
# coding:utf-8
# -*- coding: utf-8 -*-
# vim: set fileencoding=utf-8

7.测试结果说明:
setUpClass()方法和tearDownClass()方法整个测试类运行过程只执行一次.
setUp()方法和tearDown()方法在每个测试方法执行前执行后均被调用执行.
测试结果输出 点. 表示测试方法被成功执行,
测试结果出现E或F,表示测试方法执行失败或发生异常.
动态方法不再覆盖runTest()方法,而是直接在一个测试类中编写.
8.测试集合
将功能相关的测试用例组合在一起称之为测试用例集
通过TestSuite类来组装所有的测试用例集.
使用测试集合可以同时执行同一个.py文件中的多个用例类.
加载测试集合的步骤:
1>TestLoader(测试用例加载器)根据传入的参数获取相应的测试用例的测试方法
2>然后makeSuite把所有的测试用例组装成test suite集合.
3>最后将test suite集合传给test runner执行.

makeSuite通常由测试框架调用,用于生产test suite对象的实例.
if name=='main':
根据给定的测试类,获取以test开头的测试方法,并返回一个测试套件
testCase1=unittest.TestLoader().loadTestsFromTestCase(TestClassName1)
testCase2=unittest.TestLoader().loadTestsFromTestCase(TestClassName2)
将多个测试类加载到测试套件中
suite=unittest.TestSuite([testCase1,testCase2])
设置verbosity=2,可以打印更详细的执行信息
unittest.TextTestRunner(verbosity=2).run(suite)

(1)TestLoader类: 测试用例加载器,返回一个测试用例集合
(2)loadTestFromTestCase类: 根据给定的测试类, 获取其中所有以test开头的测试方法,返回集合
(3)TestSuite类: 组装测试用例的实例,支持添加和删除用例,最后将传递给test runner进行执行
(4)TextTestRunner类: 测试用例执行类,其中Text表示已文本形式输出测试结果.
更多说明:

  1. verbosity<1的整数,输出结果中不提示执行成功的用例数.
  2. verbosity=1的整数,输出结果中仅以点(.)表示执行成功的用例数
  3. verbosity>1的整数,可以输出每个用例的详细信息
  4. TestRunner.run()方法会返回一个TestResult实例对象,该实例对象里存储着所有测试用例执行过程中的详细信息. 可以通过dir()方法查看该方法详情

9.测试用例执行顺序
默认是按照所有方法名的字符串的ASCII吗排序后执行的. 通常不符合我们的需求
如果想按照我们自己设定顺序执行,方法如下:
if__name__=='main':
1> 启动单元测试
unittest.main()
2> 获取一个单元测试用例集TestSuite的实例对象suite
suite=unittest.TestSuite()
3> 将测试用例添加到测试容器中
suite.addTest()
例如:
suite=addTest(MyTestClass("test_add"))
suite=addTest(MyTestClass("test_sub"))
suite=addTest(MyTestClass("test_mul"))
suite=addTest(MyTestClass("test_div"))
4>创建TextTestRunner类的实例对象
runner = unittest.TextTestRunner()
runner.run(suite)
5.以上只是单线程执行测试, 不适用与多线程情况.

10.忽略某个测试方法
在想要忽略的方法上面加上注解/装饰器
无条件忽略 @unittest.skip("skipping")
有条件忽略
如果变量a>5, 则忽略该测试方法. a是类里指定的值.
@unittest.skipIf(a>5,"condition is satisfied ")
除非执行测试用例的平台是window平台,否则忽略该测试方法
@unittest.skipUnless(sys.platform.startswith("linux"),"requires Windows")

  1. 命令行执行测试用例
    unittest支持命令行模式运行测试模块,类,甚至单独有效的测试方法
    1通过命令直接运行整个模块
    命令格式: python -m unittest test_module1 test_modeule2 ...
    2.执行测试模块中的某个测试类
    命令格式: python -m unittest test_module.TestClass
    3.执行测试模块中某个类中的某个测试方法
    命令格式: python -m unittest test_module.TestClass.test_method

使用命令执行测试用例前,必须切换到测试脚本存放目录,
命令行中 -v 参数表示输出测试用例执行的详细信息,等价于verbosity=2

  1. 批量执行测试模块
    unittest可以自动发信并执行给定目录下满足规格的测试模块.
    规则是文件名必须是有效的标示符,文件名必须以test字符串开头,
    1.程序文件模式
    就是将测试发现代码编写再测试脚本中,然后直接执行脚本文件即可.
    2.命令行模式
    通过unittest单元测试框架提供的discover命令实现

  2. 常用的断言方法
    断言表示为一些布尔表达式
    判断程序是否达到预期
    断言为真,表示达到预期
    断言为假,表示未达预期
    unittest框架具有很大的断言,以assert***开头

  3. 使用HTMLTestRunner生成HTML测试报告
    前期准备
    1>下载HTMLTestRunner.py文件
    2>将该文件复制到Python安装路径下的lib文件夹中.
    3>进入Python文件或者交互模式,执行import HTMLTestRunner,没有报错,说明配置成功.
    4> 将测试结果报告写入指定的文件中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342