unittest+discover批量处理自动化脚本

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

输出结果:


猜你喜欢

转载自blog.csdn.net/rhx_qiuzhi/article/details/80322430