自动化的目的就是批量执行脚本代替手动测试的繁重劳动,单个脚本的执行较为容易,但是事实上自动化脚本时很多的,因此需要批量执行,这个时候需要用到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())
输出结果: