Python unittest

一、简介

unittest是python自带的单元测试框架

主要有以下几个概念:
1、test fixture:初始化和清理 测试数据、以及环境,比如在用例执行前创建临时文件和文件夹,,或者代理数据库、目录,又或者启动服务器进程

最简单的实现方式是通过自定义下面的2个方法:

  • TestCase.setUp():在每个测试方法运行之前都会运行一次,适合为每个用例都初始化一遍数据,有几个以test开头的方法就执行几次
  • TestCase.tearDown():在每个测试方法运行之后都会运行一次,适合为每个用例都清理一遍数据

2、test case:测试用例
所有的测试类都必须直接或间接的继承自unittest.TestCase类

3、test suite:用例集合,组合起来批量执行

4、test runner:运行用例并返回结果,可以使用图形界面、文本界面,或者返回一个特殊值来指示执行测试的结果

注意点:测试用例中方法名需要以test开头,不然是不会被test runner执行的

二、用法

前置条件:在创建测试用例之前需要导入unittest

1个测试用例类下面可以有多个测试方法(test)或者叫做测试点,如下就有3个用例,其中TestStringMethods继承了unittest.TestCase,实际工作中我们会写test_case1、test_case2......

import unittest


class TestStringMethods(unittest.TestCase):       # 定义测试类

    def test_upper(self):
         self.assertEqual('foo'.upper(), 'FOO')

     def test_isupper(self):
         self.assertTrue('FOO'.isupper())
         self.assertFalse('Foo'.isupper())

     def test_spilt(self):
         s = 'hello world'
         self.assertEqual(s.split(), ['hello', 'world'])
         with self.assertRaises(TypeError):
             s.split(2)


if __name__ == "__main__":
    unittest.main()
    # suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
    # unittest.TextTestRunner(verbosity=2).run(suite)

断言
在开发一个程序的时候,与其让它运行时崩溃,不如在它出现错误条件时就返回错误,所以断言是测试用例的核心,常见的就是assert断言,一般来说每个测试方法里都必须有断言

比如判断接口通不通,返回值对不对,错误描述信息是否一致等等,我常用的就是下面2种:

  • assertEqual(first, second, msg=message)
  • assertNotEqual(first, second, msg=message)

断言第一个参数和第二个参数是否相等,如果相等,则输出OK信息,若不相等则测试失败。其中 msg 为可选参数,用于输出测试失败时提示信息。

self.assertEqual(response.get('success'), True)
self.assertEqual(form.external_id.data, response_external_id, msg=message.to_str('业务逻辑错误'))
  • 调用assertEqual()来检查预期结果;
  • assertTrue()或assertFalse()来验证条件;
  • assertRaises()来验证是否引发了特定的异常。
    使用上述方法而不是assert语句,是为了测试运行程序可以累积所有测试结果并生成报告。

其余用法可参考博客园上的一篇文章 https://www.cnblogs.com/feiyueNotes/p/7788995.html

运行case

全局:unittest.main
或者下面的
suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)

有时候case执行时只是入参值变化,结果都是一样
这时我们可以采用入参参数化的方式,借助parameterizd

但是uniittest框架不支持装饰器,故只有使用@parameterized.expand创建的测试才会被执行

@parameterized.expand([
    ('-9999', ''),
    ('', '-9999'),
    ('-8888', '-9999'),
])
def test_case_1(self, aaa, bbb):
    ****
    代码此处省略
    ****

参数化的case执行:生成测试集然后运行

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

推荐阅读更多精彩内容

  • Python unittest 学习 [[toc]] 前言 由于目前项目需要做接口测试,故特意去学习了Python...
    Alex_6c08阅读 1,059评论 0 1
  • 版权声明:本文为博主原创文章,转载请标明原文地址,谢谢 ^_^ https://blog.csdn.net/xia...
    小娟_bb93阅读 645评论 0 0
  • Startup 单元测试的核心价值在于两点: 更加精确地定义某段代码的作用,从而使代码的耦合性更低 避免程序员写出...
    wuwenxiang阅读 10,100评论 1 27
  • unittest基本原理 整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unitte...
    紫Qi阅读 3,326评论 1 2
  • 第一次我遇见你,天空下着小雨。你躲进我伞下,让我迷恋你。自从相遇那天起,我们彼此相依。 曾经...
    落寞心阅读 290评论 0 0