云服务器

Unittest原理及基本方法

2017-12-27 17:13:18 0

python功能自动化测试框架很多,unittest是其中比较受欢迎的一个,工作中也会用到,所以分享下unittest的原理和使用方法。

unittest主要组成如下:

  • Test Fixture:准备及清理工作。
  • Test Case: 通常是使用assert方法检查动作和输入的响应,一般是基于TestCase类扩充。
  • Test Suite:多个TestCase集合在一起,就是TestSuite,TestSuite还可以进行嵌套。
  • Test Runner:测试执行。
  • Test Result:包括运行了多少测试用例,成功了多少,失败了多少等信息。
 

首先通过查看unittest的源码,来看一下这几个概念,以及他们之间的关系,他们是如何在一起工作的,其静态类图如下:

整个流程是很清晰的,首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。

测试的基础就是TestCase,也就是用例的编写,用例的开始需要对测试做前期准备,用例结束则需清理环境,保证下一个用例在合适的环境下进行。

下面就以一个简单的例子,实践一下TestCase的基本实现方法:

  1. importrandom
  2. importunittest
  3. classTestSequenceFunctions(unittest.TestCase):
  4. def setUp(self):
  5. print(‘Test Start!’)
  6. self.seq = range(10)
  7. def test_shuffle(self):
  8. # make sure the shuffled sequence does not lose any elements
  9. shuffle(self.seq)
  10. self.seq.sort()
  11. self.assertEqual(self.seq, range(10))
  12. # should raise an exception for an immutable sequence
  13. self.assertRaises(TypeError, random.shuffle, (1,2,3))
  14. def test_choice(self):
  15. element = random.choice(self.seq)
  16. self.assertTrue(element in self.seq)
  17. def test_sample(self):
  18. with self.assertRaises(ValueError):
  19. sample(self.seq, 20)
  20. for element insample(self.seq, 5):
  21. self.assertTrue(element in self.seq)
  22. def tearDown(self):
  23. print(‘Test End!’)
  24. if__name__ == '__main__':
  25. main()
 

类TestSequenceFunctions包含继承自unittest.TestCase,重写了setUp()方法和tearDown()方法,打印语句以表明测试的开始和结束。TestSequenceFunctions还定义了三个以'test'开头的方法,,对每一个以test开头的方法,都为其构建了一个TestCase对象。方法都放在TestSequenceFunctions类中,是因为这几个测试用例的fixture是相同的(即setUp()和tearDown()),如果每一个测试用例单独写成一个TestCase的话,会有很多的冗余代码。

每一个方法里面可以写入断言语句,如assertEqual,assertTrue,assertRaises等,对测试的结果进行判断,并在测试完成后输出。

 

以上就是unittest的原理和基本实现方法。下一期,将继续学习如何生成HTML测试报告,更直观对测试情况进行了解,并通过邮件的方式发送测试报告。

 

上一篇: 无

微信关注

获取更多技术咨询