利用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()
测试报告生成模版参考: