python unittest原理_Unittest原理及基本方法

原标题: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测试报告,更直观对测试情况进行了解,并通过邮件的方式发送测试报告。返回搜狐,查看更多

责任编辑:

你可能感兴趣的:(python,unittest原理)