unittest单元测试框架

先贴一下unittest官网地址。unittest文档开头介绍了四个重要的概念:test fixture,test case, test suite, test runner。

test fixture

test fixture表示执行一个或多个测试所需的准备。怎么去理解这句话呢?比如我们执行一条创建文章的测试用例,但是如果我们调用创建文章的接口,需要我们进行登录。那么我们可以把登录作为一个test fixture。

test case

测试用例,这个不必多说,没有测试用例就不能叫做接口测试了。

test suite

我们在做接口测试的时候,一般都是执行多条测试用例。这就有了test suite概念,简单来说,就是把想要执行的测试用例进行组装然后进行测试。

test  runner

执行测试用例。

为了方便大家的理解,会用一个实例对上面四个概念进行解释。请看如下代码:

import unittest

class AddTest(unittest.TestCase):
def setUp(self):
print("在每个用例执行之前") def tearDown(self):
print("在每个用例执行之后") @classmethod
def setUpClass(cls):
print("在用例执行之前,只执行一次,优先于setUp") @classmethod
def tearDownClass(cls):
print("所有用例运行之后只执行一次") def add(self, a, b):
if type(a) == int and type(b) == int:
return a + b
else:
return "请输入数字" def test_add1(self):
self.assertEqual(self.add(2, 3), 5, "验证加法") def test_add2(self):
self.assertEqual(self.add(2, 4), 6, "验证加法") if __name__ == '__main__':
# unittest.main()
# test suite(构造测试集)
suite = unittest.TestSuite()
suite.addTest(AddTest("test_add1"))
suite.addTest(AddTest("test_add2"))
# test runner (执行测试)
runner = unittest.TextTestRunner()
runner.run(suite)

上面代码输出如下内容:

在用例执行之前,只执行一次,优先于setUp

在每个用例执行之前

在每个用例执行之后

在每个用例执行之前

在每个用例执行之后

所有用例运行之后只执行一次

我们来根据代码拆解一下,看哪部分对应test fixture,test case, test suite, test runner。首先,在使用unittest单元测试框架之前,我们需要导包,我们先import unittest,然后创建一个AddTest类,这个类继承unittest.TestCase。然后我们创建一个add方法(注意:一般类中的函数我们称作为方法),然后创建了2条测试用例test_add1,test_add2,注意!测试用例必须以test开头!然后使用test fixture中setUp、tearDown、setUpClass 、tearDownClass。然后使用test suite把2条测试用例加进去,当然需要注意一点,用例执行是有顺序的(按照 ASCII 码的从小到大的顺序),比如test_add1和test_add2,前面都是一样的,但是最后1位1排在2前面,所以先执行1,最后使用test runner执行测试用例。到这里想必大家都已经明白。最后画一张思维导图,更方便大家的理解。

细心的人可以看到,测试用例中有一个assertEqual,这就是我们说比assert更好用的断言,那么这些断言有哪些呢?请看下面表格:

Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

小结:本章内容只是简单介绍了一下unittest的使用方法以及相关概念,unittest框架使用起来很简单也很方便,建议大家多去官网学习,当然不管是UI自动化也好,还是接口自动化也好,如果使用Python实现,一般都不会绕过Unittest这个概念,希望大家可以熟练掌握。

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

最新文章

  1. 浅谈 Web 中前后端模板引擎的使用
  2. Reporting Service 告警"w WARN: Thread pool pressure. Using current thread for a work item"
  3. mysql 二进制文件增量备份
  4. BizTalk开发系列(九) MAP的连接方法
  5. POJ 1966 Cable TV Network(顶点连通度的求解)
  6. Makefile 多目录自动编译
  7. Java线程学习笔记(一个)
  8. oracle10g遇到ORA-00257归档程序错误,在释放之前仅限于内部连接
  9. linux内核Makefile整体分析
  10. [Note] 计算机网络的应用层
  11. python3三角函数
  12. redis 列表(list)函数
  13. KNN算法基本实例
  14. bzoj2969矩形粉刷
  15. F#周报2018年第52期
  16. 关于hdfs 和hive的数据迁移
  17. java 的反射机制
  18. ios开发之--首页 导航栏隐藏 下一级页面显示,pop回来显示白条
  19. php表达式
  20. 几个原生js方法总结

热门文章

  1. ASP.NET Core 菜鸟之路:从Startup.cs说起 转发https://www.cnblogs.com/chenug/p/6869109.html
  2. php优化及高效提速问题小结
  3. centos6.2 shutdown now关机进入单用户模式
  4. 解决myeclipse validation验证javascript导致速度变慢的现象
  5. shell编程:sed的选项
  6. mongo数据库基本查询语句
  7. Redis项目实战,一些经验总结
  8. Linux下实现客户端和服务器端的通信
  9. Goals ? Ideals ?
  10. AJAX 步骤分析