Unittest单元测试框架

    unittest作为单元测试框架以一个标准模块放入python的开发包中,测试框架可以提供用例的组织与执行,提供丰富的验证比较方法和丰富的日志,能够帮助我们更好的组织自动化测试用例。

一、unitest中几个重要的概念

1、Test Case

一个Test Case的实例就是一个测试用例,一个测试用例就是一个完整的测试流程,它包括测试前准备 setUp() ,实现测试过程的代码run(),以及测试完成之后的环境还原tearDown() ;测试单元unit test 就是一个完整的测试用例,通过这个单元测试可以对程序的某个功能进行验证

2、Test Suite

一个功能点的验证往往包含多个测试用例,多个测试用例集合到一起就组成一个测试集 TestSuite ,通过addTest()加载Test Case到 TestSuite中

3、Test Runner

测试用例的执行,我们可以执行单个测试用例也可以执行整个测试集,通过TextTestRunner类提供的run()方法来执行

4、Test Fixture

对一个测试用例从环境的前期搭建到销毁就是一个fixture ,通过覆盖test case 的setUp()和tearDown()方法来实现


二、unittest 编写用例

1、我们先定义一个sumFunc.py文件,给出一个计算两数之和的方法


2、 编写一个unittest的用例test01.py文件:



我们的TestCount类继承类unittest模块中的TestCase类,使用asserEqual方法对sumNum()方法进行断言,而省去类被注释掉的代码,常用的断言方法有:asserEqual(a,b)、assertTrue(a)、assertIs(a,b)、assertIsNone(x)等等

3、组织单元测试用例

首先,我们在sumFunc.py文件中再增加一个subNum()方法用来计算两个数的减法,然后在test01.py文件中新增这个方法的断言验证


然后,我们开始组织用例


上面的例子中创建了TestCount()和TestSub()两个类,分别测试sumFunc.py文件中的sumNum()和subNum()两个功能,通过TestSuite类的addTest()方法把不同的测试类中的测试方法组装到测试集中,最后执行结果如下:


三、Testloader用例识别

从上面简单的例子中可以看到我们的测试集需要添加所有的case去执行,实际项目中我们的case可以按照功能划分有成百上千条用例,这时我们就可以用Testloader类提供discover()方法自动识别测试用例

discover(start_dir, pattern='test*.py', top_level_dir=None)


这样,只要我们的测试case按照pattern给定的规则命名,就能自动的识别到测试用例去run()

四、用例类型

1、在实际应用中我们会需要根据特定的场景和条件选择跳过不去执行某些用例,在unittest中提供了这样的功能:

unitest.skip(reason) #跳过装饰的测试,并给出原因

unitest.skipIf(condition,reason) #跳过装饰的测试,当满足条件时

unitest.skipUnless(condition,reason) #跳过装饰的测试,除非满足条件时

unitest.expectedFailure() #该装饰的测试统一标记为失败

2、上 面我们提到fixtures可以看作是setUp/tearDown和中间的测试用例,除此之外,unit test还有对测试类和测试模块的fixtures

setUpModule/tearDownModule :在整个模块的开始和结束时被执行

setUpClass/tearDownClass :在测试类的开始和结束时被执行

setUp/tearDown :在测试用例的开始和结束时被执行

五、测试报告

在测试执行完成之后我们需要将用例的结果写入到log文件中,简单的我们可以直接写入文件

python runtest.py >> report/log.txt 2>&1

实际项目中我们一般要加入些report插件来更直观美化的呈现测试报告,HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的HTML报告,下载地址:

http://tungwaiyip.info/software/HTMLTestRunner.html

将HTMLTestRunner.py(python 2和python 3有些方法不一致需要修改一点)文件加入到我们的python安装目录中,然后import HTMLTestRunner

fp = open('./result.html', 'wb')

runner = HTMLTestRunner(stream=fp,title='测试报告标题', description='测试报告描述')

runner.run(testunit)

fp.close

1、HTMLTestRunner可以读取到doc string类的注释(‘’‘ ’‘’),所以我们可以给每个测试用例通过添加注释就能在报告中展示每条用例的名称

2、我们可以使用用例执行时间来存储每次报告的文件名称

now = time.strftime("%Y-%m-%d %H_%M_%S")

filename = './' + now + 'result.html' 

fp = open(filename,'wb')

3、发送测试报告邮件,python的smtplib模块提供sendmail方法让我们发送邮件

我们需要设置邮箱的服务器、发送邮箱、接受邮箱、邮件主题、邮件附件等等


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

推荐阅读更多精彩内容