Python自动化测试-Unittest单元测试框架详解

Posted 测试baby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python自动化测试-Unittest单元测试框架详解相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
python中unittest模块是用来做单元测试的。

unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep thebar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。

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方法让我们发送邮件

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

在这里插入图片描述

关于Unittest单元测试框架今天就跟你们分享到这里了,如果对你有帮助的话,欢迎大家评论留言一起交流。

看完这篇内容后,相信以下两件事,也会对你的个人提升有所帮助:

1、 点赞,让更多人能看到这篇文章,同时你的认可也会鼓励我创作更多优质内容。

2、 让自己变得更强:想一想,如果你想在测试这个行业一直做下去,你的经验和测试技术是远远不够的,你需要进阶,你需要丰富你的技术栈!还等什么!

最后:【可能给予你助力的教程】

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

关注我的微信公众号:【伤心的辣条】免费获取~

我的学习交流群:902061117 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

好文推荐:

35岁之后软件测试工程师靠什么养家?我能继续做测试!

App公共测试用例梳理

Python简单?先来40道基础面试题测试下

阿里二黑叹息:越来越多的年轻人从职场撤退了?

从一名开发人员转做测试的一些感悟

以上是关于Python自动化测试-Unittest单元测试框架详解的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化测试-Unittest单元测试框架详解

Python接口自动化测试之pytest与unittest区别

Python接口自动化测试之pytest与unittest区别

python 单元测试(unittest)

Python单元测试unittest测试框架

软件测试:Python接口自动化之unittest单元测试