python的unittest框架理论基础

Unittest核心工作原理

最核心的四个概念:test case ,test suite,test runner,test fixture

一个TestCase实例就是一个测试用例

测试用例:指一个完成的测试流程,包括测试前环境搭建(setup),执行测试代码(run),测试后环境还原(tearDown)。

一个测试用例是一个完整的测试单元,执行这个单元,验证某个问题

多个测试用例集合在一起就是TestSuite,并且TestSuite可以嵌套TestSuite

TestLoader用来加载TestCase到TestSuite中,loadTestsFrom_()方法,是从各个地方查找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例

TextTestRunner用来执行测试用例,其中run(test)会执行TestSuite/TestCase中的run(result)方法。测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功和失败各有多少等信息

对一个测试用例环境的搭建和销毁是一个fixture

一个class继承了unittest.TestCase,就是一个测试用例,如果有很多以test开头的方法,每个方法在load的时候便会生成一个TestCase实例,如:一个class中有四个test_xxx方法,最后在load到suite中也会有四个测试用例

整个流程如下:

写好TestCase,然后由Testloader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中

通过命令或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者直接通过TextTestRunner来执行用例

说明:在runner执行时,默认将结果输出到控制台,可以设置输出到文件中,然后在文件中查看;另外HTMLTestRunner也同样是执行用的,它可以将结果输出到html中,它跟TextTestRunner是一样的,但是它生成的报告更清晰好看


注意:1.运行时不要把文件放在中文目录下 2.编码缩进格式要注意否则会有错误,该缩进的要缩进,该顶格的要顶格写



关键字解释

TestLoader:测试用例加载器其包括多个加载测试用例的方法。返回一个测试套件

loadTestsFromModule(self,module)--根据给定的模块实例来获取测试用例套件

loadTestsFromTestCase(self,testCaseClass)--根据给定的测试类获取其中的所有测试方法并返回一个测试套件

loadTestsFromName(self,name,module=None)

--根据给定的字符串来获取测试用例套件字符串可以是模块名测试类名测试类中的测试方法名或者一个可调用的是实例对象

这个实例对象返回一个测试用例或一个测试套件

loadTestsFromNames(self,names,module=None) --和上面功能相同,只不过接受的是字符串列表

setUp()和tearDown()两个方法(其实是重写了TestCase的这两个方法),这两个方法在每个测试方法执行前以及执行后执行一次,setUp用来为测试准备环境,tearDown用来清理环境,已备之后的测试。

setUpClass()与tearDownClass():如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用setUpClass()与tearDownClass():

关键字的关系图


总结如下:

1.unittest是Python自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架

2.unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

3.一个class继承unittest.TestCase即是一个TestCase,其中以test开头的方法在load时被加载为一个真正的TestCase。

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

5.可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。

6.用setUp()、tearDown()、setUpClass()以及tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境

7.我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。

8.参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。



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

推荐阅读更多精彩内容