zoukankan      html  css  js  c++  java
  • python基础===利用unittest进行测试用例执行的几种方式

    利用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模块下的几个成员进行简单的介绍,以便于理解上述代码:
     TestCase:所有测试用例的基本类,给一个测试方法的名字,就会返回一个测试用例实例;
     TestSuit:组织测试用例的实例,支持测试用例的添加和删除,最终将传递给  testRunner进行测试执行;
     TextTestRunner:进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
     TestLoader:用来加载TestCase到TestSuite中的,其中有几个  loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例;

    本文转自:http://www.51testing.com/html/10/448910-3648852.html


    # -*- coding:utf-8 -*-
    import unittest
    
    
    class test(unittest.TestCase):
    
        def setUp(self):
            print 'This is the setup msg'
    
        def tearDown(self):
            print 'This is the teardown msg'
    
        def test1(self):
            print 'This is the first testcase'
    
        def test2(self):
            print 'This is the second testcase'
    
        def test3(self):
            print 'This is the third testcase'
    
    运行方法一:
    if __name__ == '__main__':
        unittest.main()
    通过unittest.main()执行时,main会调用TextTestRunner中的run来执行
    
    运行方法二:
    suite = unittest.TestLoader().loadTestsFromTestCase(test)
    unittest.TextTestRunner().run(suite)
    通过创建一个测试套,将所有用例全部加载到测试套中,然后直接调用TextTestRunner方法能运行测试套(此时测试套中的用例执行还是无规则,不一定会按用例顺序进行执行)
    
    运行方法三:
    suite = unittest.TestSuite()
    suite.addTest(test('test3'))
    unittest.TextTestRunner().run(suite)
    通过创建一个测试套,给测试套中增加一条测试用例,然后再调用TextTestRunner方法单独执行该测试用例
    
    运行方法四:
    suite = unittest.TestSuite()
    suite.addTest(test('test3'))
    suite.addTest(test('test1'))
    unittest.TextTestRunner().run(suite)
    通过创建一个测试套,给测试套中连续增加两条测试用例,然后再调用TextTestRunner方法执行该测试用例,此时会按照加载用例的顺序进行执行用例,但这种方法有点土,不强大(不建议使用)
    
    运行方法五:
    suite = unittest.TestSuite()
    suite.addTests([test('test3'),test('test1'),test('test2')])
    unittest.TextTestRunner().run(suite)
    通过创建一个测试套,直接通过addTests()方法,添加一个用例列表进去,然后再调用TextTestRunner方法执行测试用例,此种方法能让unitest按照想要的执行顺序进行执行用例(对用例执行顺序有要求的此方法比较建议使用)
    
    运行方法六:
    def runTest(testcaseclass,testcase=[]):
        suite = unittest.TestSuite()
        for case in testcase:
            suite.addTest(testcaseclass(case))
        unittest.TextTestRunner().run(suite)
    runTest(test,['test2','test3','test1'])
    
    通过定义一个unitest运行方法,后面执行时直接调用该自定义方法,给上对应的赋值,程序就会按照想 要的执行程序进行执行(此种方法比较好,只要建立一个公共方法,后面在其它模块中直接调用,省去重复敲代码)

    本文摘自:

    http://www.cnblogs.com/51study/p/9284356.html


    如果想使用其它的测试报告:

    def suite():
        now = time.strftime("%Y-%m-%d %H_%M_%S")
        filename = './' + now + 'test_result.html'
        fp = open(filename,'wb')
        runner = HTMLTestRunner(stream = fp,   
                                       title = "快递查询接口测试报告",  
                                       description = "测试用例执行情况:")
    
    
        suite = unittest.TestSuite()
        suite.addTest(ExpressInquiry("test001_type_valid"))
        suite.addTest(ExpressInquiry("test002_type_invalid"))
        suite.addTest(ExpressInquiry("test003_id_valid"))
    
        #unittest.TextTestRunner().run(suite)
        
        runner.run(suite)
        fp.close()
        
    
    
    if __name__ == '__main__':
        suite()

    测试报告生成模版参考:

    自动化测试===unittest和requests接口测试案例,测试快递查询api(二)

  • 相关阅读:
    Table to List<object> C#
    Edge Beta 进入无痕模式 快捷方式
    C# 按行读取文件 从某行开始取
    Navicat连接oracle,出现Only compatible with oci version 8.1
    未能找到 System.Web.Helpers
    js json 排序
    使用 NPM 安装Vue并创建项目
    css3动效
    回忆向——诺宝RC机器人仿真
    javascript问题
  • 原文地址:https://www.cnblogs.com/botoo/p/9579509.html
Copyright © 2011-2022 走看看