自动化的目的就是批量执行脚本代替手动测试的繁重劳动,单个脚本的执行较为容易,但是事实上自动化脚本时很多的,因此需要批量执行,这个时候需要用到unittest模块里的discover方法进行多个自动化脚本的加载了。 首先建立一个工程。
在Mytest工程下创建一个case的package,并依次在case下创建baidu、blog和report的package
在baidu和blog两个包(package)下建立测试用例,命名为test_01.py到test_04.py,4个脚本中唯一不同的是在脚本中序号依次递增,以test_01.py为例
#test01.py #coding:utf-8 import unittest import time class Test1(unittest.TestCase): @classmethod #def setUp(self): def setUp(cls): print "startup" @classmethod #def tearDown(self): def tearDown(cls): time.sleep(1) print "endup" def test01(self): print "执行测试用例01" def test03(self): print "执行测试用例03" def test02(self): print "执行测试用例02" if __name__ == '__main__': unittest.main()
这里实用类方法初始化数据,避免了每次在调用测试用例时频繁的初始化环境和环境恢复,使用类级别的方法初始化数据,使得各个测试方法共享这些初始化数据。在test_02.py中的类为Test2,相应的用例为test04,test06,test05,在模块blog中相应的为Test3,相应的用例为test07,test09,test08.依次类推。
#test03.py #coding:utf-8 import unittest import time class Test3(unittest.TestCase): def setUp(self): print "startup" def tearDown(self): time.sleep(1) print "endup" def test07(self): print "执行测试用例07" def test09(self): print "执行测试用例08" def test08(self): print "执行测试用例08" if __name__ == '__main__': unittest.main()
这样两个模块中共有12个测试用例
在模块report下建立一个执行所有脚本的模块run_all_case.py
#coding:utf-8 import unittest import os #测试用例的路径 case_path = os.path.join(os.getcwd(),"case") #报告存放路径 report_path = os.path.join(os.getcwd(),"report") def call_case(): discover = unittest.defaultTestLoader.discover(case_path,pattern="test*.py",top_level_dir=None) print discover return discover if __name__ == '__main__': runner = unittest.TextTestRunner() runner.run(call_case())
发现输出结果为:
ImportError: Start directory is not importable
说这个目录不能导入,其实发现,要导入的是目录\case而不是\case\case,所以存在问题,这里先查看一下目录
case_path = os.path.join(os.getcwd(),"case") print case_path
其实我们想获取的是目录:D:\\Python2.6.6\\Project\\imooc\\case\,因此这里使用方法如下:
#coding:utf-8 import unittest import os #测试用例的路径 case_path = os.path.dirname(__file__) print case_path #报告存放路径 report_path = os.path.join(os.getcwd(),"report") def call_case(): discover = unittest.defaultTestLoader.discover(case_path,pattern="test*.py",top_level_dir=None) print discover return discover if __name__ == '__main__': runner = unittest.TextTestRunner() runner.run(call_case())
输出结果: