为什么要用unittest

'''为什么要使用单元测试框架?:
1.当用例很多的时候用来组织用例和执行用例
2.提供丰富的比较方法
3.提供丰富的日志'''

import unittest
import HTMLTestRunner
import os

path = os.getcwd()
class Test_baidu(unittest.TestCase):
    def setUp(self):
        print('每一个开始了-----------')

    def test_1(self):
        print('test_1')
        self.assertEqual('1','2',msg='1!=2')

    def test_2(self):
        print('test_2')
        self.assertIsInstance([1,2],list)

    @unittest.skip    #虽然这个方法不执行,但是setup和teardown还要执行的
    def test_3(self):
        print('test_3')
        self.assertIs('1','1')

    def tearDown(self):
        print('每一个结束了----------')

    @classmethod
    def setUpClass(cls):
        print('大项目开是啦+++++++++')

    @classmethod
    def tearDownClass(cls):
        print('大项目结束了+++++++++++')


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(Test_baidu('test_2'))   #先把要执行的顺序,一个一个添加进去  ---就是组织用例
    suit.addTest(Test_baidu('test_1'))
    suit.addTest(Test_baidu('test_3'))   #有了skip的存在,加进去也没有用的
    runner = unittest.TextTestRunner()  #把要执行的案例添加到suit之后,用TextTestRunner()对象就可以运行了  --组织好用例一键执行
    # discover = unittest.TestLoader().discover(path)
    # runner1 = HTMLTestRunner.HTMLTestRunner()
    # runner1.run(discover)
    runner.run(suit)

上面是个 test*.py,,这个是main.py

'''当用例很少的时候可以用suit一个一个的添加。
我们要把所有的用例都放在TEST_Case作用,里面有很多test*.py,   现在只有一个u1.py'''

import unittest,os
path = os.getcwd()
print(path)


discover = unittest.defaultTestLoader.discover(path,pattern='u*.py') #discover 返回的就是suit,所以Testloader就是把所有的案例加载到suit中。

runner = unittest.TextTestRunner()
runner.run(discover)


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

skip跳过测试用例

import unittest
import HTMLTestRunner
import os

path = os.getcwd()
class Test_baidu(unittest.TestCase):
    def setUp(self):
        print('每一个开始了-----------')

    def test_1(self):
        print('test_1')
        self.assertEqual('1','2',msg='1!=2')

    def test_2(self):
        print('test_2')
        self.assertIsInstance([1,2],list)

    @unittest.skip    #虽然这个方法不执行,但是setup和teardown还要执行的
    def test_3(self):
        print('test_3')
        self.assertIs('1','1')


    @unittest.skipIf(3<2,'当条件为真时跳过测试,条件为假的时候执行案例')
    def test_4(self):
        print('test_4')
        self.assertIs('1','1')

    @unittest.skipUnless(3<2,'当条件为假的时候不执行测试用例')  #unless 除非
    def test_5(self):
        print('test_5')
        self.assertIs('1','1')


    def tearDown(self):
        print('每一个结束了----------')

    @classmethod
    def setUpClass(cls):
        print('大项目开是啦+++++++++')

    @classmethod
    def tearDownClass(cls):
        print('大项目结束了+++++++++++')


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

生成html文件

import unittest,os
from HTMLTestRunner import HTMLTestRunner
path = os.getcwd()
print(path)


discover = unittest.defaultTestLoader.discover(path,pattern='u*.py') #discover 返回的就是suit,所以Testloader就是把所有的案例加载到suit中。

htmlpath = path+r'\report.html'
print(htmlpath)

f = open(htmlpath,'wb')
runner = HTMLTestRunner(stream=f,verbosity=2,title='测试报告',description='这个是自己的的测试结果')  #htmltestrunner 就是对testrunner的封装

runner.run(discover)
f.close()




if __name__ == '__main__':
    unittest.main(verbosity=1)
import time
now = time.strftime("%Y-%m-%d %H-%M-%S")
'''原来的html文件名是写死的,重新生成就会覆盖,所有让每次名字不一样加入时间(文件名好像不能用:一直报错)'''
htmlpath = 'F:/asus/auto_file/unittest_html'+'/'+now+'report.html'

f = open(htmlpath,'wb')

runner = HTMLTestRunner(stream=f,verbosity=2,title='测试报告',description='这个是自己的的测试结果')  #htmltestrunner 就是对testrunner的封装

runner.run(discover)
f.close()

猜你喜欢

转载自www.cnblogs.com/tarzen213/p/11108860.html