执行unittest框架的三种方式,并用TextTestRunner生成测试报告

  • Post author:
  • Post category:其他




三种方式:

方式 简介
unittet.main() 依次执行当前类文件中的所有用例,按照test后第一个字母的ascall码顺序执行
unittet.TestSuite() 按照addTest()里加载的顺序执行测试用例。注意运行时要以python文件模式运行
unittest.defaultTestLoader.discover 指定某个目录下的某一类py文件进行运行,且运行所有测试用例



一、unittest.main()的运行原理

实现方法:直接在脚本下添加一下代码,执行脚本

if

name

== ‘

main

’:

unittest.main()

文件路径:G:\PycharmProjects\InterFaceFrame\test_case\test_MyCase.py

import unittest
class unit_test_3(unittest.TestCase):
    def setUp(self):
        print('初始化~~')
    def test_1_register(self):
        print('注册的~~~')
    def test_2_login(self):
        print('登录的~~~')
    def test_3_edit(self):
        print('编辑的~~~')
    def tearDown(self):
        print('释放~~')

if __name__ == '__main__':
    unittest.main()



二、unittest.TestSuite()测试套

文件路径:G:\PycharmProjects\InterFaceFrame\test_framework\test_run_suite.py

import unittest
from test_case.test_MyCase import unit_test_3
if __name__ == '__main__':
    #创建测试套件对象
    suite1 = unittest.TestSuite()
    #把测试用例加进测试套件,只加入一个测试用例
    suite1.addTest(unit_test_3("test_1_register"))
    #加入多个测试用例的方法:
    tests  = [unit_test_3("test_2_login"),unit_test_3("test_3_edit")]
    suite1.addTests(tests)
    #声明框架的运行对象
    runner = unittest.TextTestRunner()
    #runner对象调用run方法,执行测试套件
    runner.run(suite1)



三、unittest.defaultTestLoader.discover


注:


使用模块的方式执行测试用例,不能通过导入类库的方法。要通过读取指定目录下的模块的方式进行。因为这个执行一般放在独立的py文件中,指定某一类py文件需要运行,并且运行里面的所有测试用例。跟要运行的py文件里的执行函数main()没有关系,不会受执行函数main()影响


目标:


使用文件加载呃方法,执行测试用例。执行一个或多个测试文件,而不是测试用例方法


方法:


将执行文件保存在指定路径,通过unittest的discover方法,传入path,打开这个文件,再通过runner对象进行执行。

(1)py文件和runner放在同一个y文件或者同一个包中

import unittest
class unit_test_3(unittest.TestCase):
    def setUp(self):
        print('初始化~~')
    def test_1_register(self):
        print('注册的~~~')
    def test_2_login(self):
        print('登录的~~~')
    def test_3_edit(self):
        print('编辑的~~~')
    def tearDown(self):
        print('释放~~')

if __name__ == '__main__':
    #声明要执行的py文件路径
    dir_path = './' #执行的当前目录的文件,代表根目录
    discoverObj = unittest.defaultTestLoader.discover(dir_path,paras = "test_*.py")
    #创建运行对象
    runner = unittest.TextTestRunner()
    runner.run(discoverObj)

(2)py文件放在独立的包中:

文件路径:G:\PycharmProjects\InterFaceFrame\test_framework\test_run_loader.py
import unittest
if __name__ == '__main__':
    #声明要执行的py文件路径
    dir_path = r'G:\PycharmProjects\InterFaceFrame\test_case'
    discoverObj = unittest.defaultTestLoader.discover(str(dir_path),pattern = "test_*.py")
    #创建运行对象
    runner = unittest.TextTestRunner()
    runner.run(discoverObj)



四、生成测试报告:

(1)第一种

import unittest

if __name__ == '__main__':
    #声明要执行的py文件路径
    dir_path = r'G:\PycharmProjects\InterFaceFrame\test_case'
    discoverObj = unittest.defaultTestLoader.discover(str(dir_path),pattern = "test_*.py")
    #创建运行对象
    with open('output.html','a') as f:
        runner = unittest.TextTestRunner(stream = f,verbosity=1)
        runner.run(discoverObj)

测试报告如下,因为print不打印在测试报告中,所以输出没有内容

在这里插入图片描述

(2)第二种

    with open('output.html','a') as f:
    	#verbosity的参数改为“2”
        runner = unittest.TextTestRunner(stream = f,verbosity=2)
        runner.run(discoverObj)

测试报告格式,包含测试用例case的测试结果

在这里插入图片描述



版权声明:本文为weixin_42976139原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。