原标题:Unittest原理及基本方法
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的基本实现方法:
importrandom
importunittest
classTestSequenceFunctions(unittest.TestCase):
defsetUp( self):
print( 'Test Start!')
self.seq = range( 10)
deftest_shuffle( self):
# make sure the shuffled sequence does not lose any elements
random.shuffle( self.seq)
self.seq.sort()
self.assertEqual( self.seq ,range( 10))
# should raise an exception for an immutable sequence
self.assertRaises( TypeError,random.shuffle ,( 1,2,3))
deftest_choice( self):
element = random.choice( self.seq)
self.assertTrue(element inself.seq)
deftest_sample( self):
withself.assertRaises( ValueError):
random.sample( self.seq ,20)
forelement inrandom.sample( self.seq ,5):
self.assertTrue(element inself.seq)
deftearDown( self):
print( 'Test End!')
if__name__ == '__main__':
unittest.main()
类TestSequenceFunctions包含继承自unittest.TestCase,重写了setUp()方法和tearDown()方法,打印语句以表明测试的开始和结束。TestSequenceFunctions还定义了三个以'test'开头的方法,对每一个以test开头的方法,都为其构建了一个TestCase对象。方法都放在TestSequenceFunctions类中,是因为这几个测试用例的fixture是相同的(即setUp()和tearDown()),如果每一个测试用例单独写成一个TestCase的话,会有很多的冗余代码。
每一个方法里面可以写入断言语句,如assertEqual,assertTrue,assertRaises等,对测试的结果进行判断,并在测试完成后输出。
以上就是unittest的原理和基本实现方法。
下一期,将继续学习如何生成HTML测试报告,更直观对测试情况进行了解,并通过邮件的方式发送测试报告。返回搜狐,查看更多
责任编辑:
本文介绍了unittest自动化测试框架的基本原理和使用方法。重点讲解了TestFixture、TestCase、TestSuite、TestRunner和TestResult等核心组件的工作流程。并通过一个具体示例展示了如何编写测试用例。
176

被折叠的 条评论
为什么被折叠?



