美文网首页
python利用unittest进行测试用例执行的几种方式

python利用unittest进行测试用例执行的几种方式

作者: 金苹果415 | 来源:发表于2018-07-10 16:37 被阅读0次

      利用python进行测试时,测试用例的加载方式有2种:

      一种是通过unittest.main()来启动所需测试的测试模块;

      一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是所需测试的用例,下面分别列出3种方法的具体使用方式:

    1、通过unittest.main()来执行测试用例的方式:

    import unittest

    class UCTestCase(unittest.TestCase):

    def setUp(self):

    #测试前需执行的操作

    .....

    def tearDown(self):

    #测试用例执行完后所需执行的操作

    .....

    # 测试用例1

    def testCreateFolder(self):

    #具体的测试脚本

    ......

    # 测试用例2

    def testDeleteFolder(self):

    #具体的测试脚本

    ......

    if __name__ == "__main__":

    unittest.main()

    2、通过testsuit来执行测试用例的方式:

    import unittest

    # 执行测试的类

    class UCTestCase(unittest.TestCase):

    def setUp(self):

    #测试前需执行的操作

    .....

    def tearDown(self):

    #测试用例执行完后所需执行的操作

    .....

    # 测试用例1

    def testCreateFolder(self):

    #具体的测试脚本

    ......

    # 测试用例2

    def testDeleteFolder(self):

    #具体的测试脚本

    ......

    if __name__ == "__main__":

    # 构造测试集

    suite = unittest.TestSuite()

    suite.addTest(UC7TestCase("testCreateFolder"))

    suite.addTest(UC7TestCase("testDeleteFolder"))

    # 执行测试

    runner = unittest.TextTestRunner()

    runner.run(suite)

    3、通过testLoader方式:

    import unittest

    class TestCase1(unittest.TestCase):

    #def setUp(self):

    #def tearDown(self):

    def testCase1(self):

    print 'aaa'

    def testCase2(self):

    print 'bbb'

    class TestCase2(unittest.TestCase):

    #def setUp(self):

    #def tearDown(self):

    def testCase1(self):

    print 'aaa1'

    def testCase2(self):

    print 'bbb1'

    if __name__ == "__main__":

    #此用法可以同时测试多个类

    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)

    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)

    suite = unittest.TestSuite([suite1, suite2])

    unittest.TextTestRunner(verbosity=2).run(suite)

      下面针对上述脚本中应用到的unittest模块下的几个成员进行简单的介绍,以便于理解上述代码:

     'FunctionTestCase':函数测试用例,即给一个函数作为参数,返回一个testcase实例,可选参数有set-up,tear-down方法

     'TestCase':所有测试用例的基本类,给一个测试方法的名字,返回一个测试用例实例

     'TestLoader':测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件

     loadTestsFromModule(self, module)--根据给定的模块实例来获取测试用例套件

     loadTestsFromName(self, name, module=None)

     --根据给定的字符串来获取测试用例套件,字符串可以是模块名,测试类名,测试类中的测试方法名,或者一个可调用的是实例对象

     这个实例对象返回一个测试用例或一个测试套件

     loadTestsFromNames(self, names, module=None) --和上面功能相同,只不过接受的是字符串列表

     loadTestsFromTestCase(self, testCaseClass)--根据给定的测试类,获取其中的所有测试方法,并返回一个测试套件

    'TestProgram':命令行进行单元测试的调用方法,作用是执行一个测试用例。其实unittest.main()方法执行的就是这个命令,

    而这个类实例时默认加载当前执行的作为测试对象,

    原型为 __init__(self, module='__main__', defaultTest=None, argv=None, testRunner=xx, testLoader=xx)

    其中module='__main__'就是默认加载自身

    'TestResult':测试用例的结果保存实例,通常有测试框架调用

     'TestSuite':组织测试用例的实例,支持测试用例的添加和删除,最终将传递给testRunner进行测试执行

     'TextTestRunner':进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。显示测试名称,即完成的测试结果,其过同执行单元测试脚本时添加-v参数

     'defaultTestLoader':其实就是TestLoader

     'findTestCases', 'getTestCaseNames':这个2个就不用解释了

     'main': 其实就是TestProgram

     'makeSuite':通常是由单元测试框架调用的,用于生产testsuite对象的实例

    至此,我们知道了。其实整个单元测试框架的逻辑出来了。分三步走:第一步testloader根据传入的参数获得相应的测试用例,即对应具体的测试方法, 然后makesuite在把所有的测试用例组装成testsuite,最后把testsiute传给testrunner进行执行。 而我们通常执行的unittest.main(),其实就是unittest.testprom方法,其执行的功能就是上面分析的三步,在第一步中其传入的参数是自身的模块__main__; 在第二步中把自身模块中的所有测试类中中的测试方法提取出来,并生成测试套件;最后再把测试套件传递给testrunner进行具体的测试。 最后给出一个完整的单元测试组织代码,把该代码放到单元测试用例文件的同一个目录后执行该脚本,即可执行所有的测试用例文件。

    相关文章

      网友评论

          本文标题:python利用unittest进行测试用例执行的几种方式

          本文链接:https://www.haomeiwen.com/subject/srcqpftx.html