51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1453|回复: 1
打印 上一主题 下一主题

[新知识] 浅析Python单元测试-unittest

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-18 15:27:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 博为峰网校 于 2018-4-18 15:31 编辑

unittest作为一个python中的基本模块,是其他框架和工具的基础。



  • 基本概念

test fixture
一个test fixture代表执行一个或者多个测试时需要准备环境,以及相关联的清理环境的工作。这包含很多内容,比如创建临时的数据库、目录等。


test case一个test
case就是测试用例,测试当中的最小单元。unittest提供一个基本的类TestCase,用来创建一个test case。


test suitetest
suite是一组test case或者test suite的集合,也可以两者都有。用来将需要一同执行的测试用例聚合到一起。


test runner
一个test runner是用来执行测试用例的,对测试进行编排并把结果返回给用户。

  • 什么是单元测试

单元测试是用来对最小可测试单元(如一个函数、一个类或者一个模块)进行检查和验证。尤其是在对代码进行修改或重构后,可以快速准确的定位出现问题的问题。


为什么要做单元测试
写代码的首要目标就是实现需求。在此基础上,就要尽可能提高代码的质量和可维护性。而单元测试,就是提高代码质量和可维护性的一种方式,也是成本最低的一种方式。因为尽早排除尽可能过的bug,可以减少在后续阶段解决bug的成本(包括时间成本、人力成本等)。

单元测试的基本原则
单元测试代码要非常简单,如果测试代码过于复杂,则测试代码本身也可能存在bug通过单元测试,并不意味着所测代码没有bug


Python单元测试框架
Unittest:Python标准库自带的单元测试工具,也称为PyUnit,是JUnit(Java语言的单元测试)的Python版本。
Doctest:Python标准库自带的单元测试工具,适合简单的单元测试。其工作原理是在docstring中寻找测试用例并执行,比较输出结果与期望值是否符合。
Pytest:Python的一种单元测试框架,与Unittest测试框架类似。其特点是拥有众多高级功能和插件。
Nose:继承自Unittest,但比Unittest易用,而且能够自动识别测试用例。任何符合正则表达式“(?:^|[b_.-])[Tt]est”的类、函数、文件或目录,以及TestCase的子类都会被识别并执行。Unittest2:Unittest的升级版。


testXXX方法使用
“unittest.main()”执行测试用例时,每个测试方法必须以“test”开头,否则Unittes无法识别。例如,上面代码中的“aaa”方法未执行。


测试方法执行顺序
每个测试方法执行顺序并不是按照代码的书写顺序执行,而是按照前缀“test”后的字母顺序执行的。


setUp()方法
setUp()方法一般用来准备测试环境,在每个测试方法执行之前执行。


tearDown()方法
tearDown()方法一般用来清理测试环境,在每个测试方法执行之后执行,且不论测试方法执行是否成功。


setUpClass()方法
setUpClass()方法一般用来在所有测试方法执行之前准备一次测试环境,必须使用“@classmethod”装饰符,在所有测试方法执行前执行。


tearDownClass()方法
tearDownClass()方法一般用来在所有测试方法结束之后清理一次测试环境,必须使用“@classmethod”装饰符,在所有测试方法都执行完成否执行。


skip装饰器
不希望执行某个测试方法时,可以使用skip装饰器。skip装饰器共有三种:unittest.skip(reason)、unittest.skipIf(condition, reason)、unittest.skipUnless(condition, reason)。


了解更多课程内容及课程安排,可咨询QQ 2852509883 或致电客服 400-821-0951(工作日9:00-17:30)





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-6 23:54 , Processed in 0.069078 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表