unittest

初识

import unittest

class MyCase(unittest.TestCase):
    def runTest(self):
        print('我是runtest')

    def www(self):
        print('我是www')

if __name__ == '__main__':
    # mycase=MyCase()
    # mycase.run()  # 可以直接调用runtest()方法,因为在TestCase中默认反射了runtest到run中
    mycase=MyCase(methodName='www')  #  将www方法反射到TestCase中,调用run,实际调用的是www方法
    mycase.run()

setup 和 teardown

class MyCase(unittest.TestCase):

    def tearDown(self) -> None: # 自动联想,有无None都可以
        print('每条用例执行后要做的事情')    # 不分位置

    def setUp(self) -> None:
        print('每条用例执行前要做的事情')
    def runTest(self):
        print('我是runtest')

    def www(self):
        print('我是www')

if __name__ == '__main__':
    mycase=MyCase()
    mycase.run()

setupclass  和 teardownclass

 

import unittest

class MyUnitTest(unittest.TestCase):


    def test_add(self):
        print('test_add')

    def test_sub(self):
        print('test_sub')

    def setUp(self) -> None:
        '''每条用例执行前执行我'''
        print('敌军还有三十秒到达战场')

    def tearDown(self) -> None:
        '''每条用例执行后执行我'''
        print('act....')

    @classmethod
    def setUpClass(cls) -> None:
        print('所有用例执行前,我先执行一次')

    @classmethod
    def tearDownClass(cls) -> None:
        print('所有用例执行完后,我执行一次')



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

断言  main()方法

# python 自带断言
# assert 0

import unittest
unittest提供的断言方法

unittest 执行用例,是按照ascci码的顺序

class AssertMsg(unittest.TestCase):
    def tearDown(self) -> None:
        print('每条用例执行后要做的事情')    # 不分位置

    def setUp(self) -> None:
        print('每条用例执行前要做的事情')

    def test_assertEqual(self):
        self.assertEqual(1,2,msg='备注信息,方便查找,msg可以不写')

    def test_assertTrue(self):
        self.assertTrue(1)

    def test_assertIn(self):
        data={'code':200,'msg':'登录成功'}
        data=str(data)
        self.assertIn('登录成功',data,msg='备注信息')

    def test_assertIsInstance(self):
        a=[]
        self.assertIsInstance(a,list)


    def aaa(self):  # 不是test的方法,无法执行  unittest框架,只能识别test_开头的方法
        print('我是aaa')

if __name__ == '__main__':    #__main__当前文件
    unittest.main() # 执行当前文件下,所有test开头的方法



class AssertMsg(unittest.TestCase):
    def test_a(self):
        '''
        我是注释
        :return:
        '''
        print('test_a!!!!!!!!!',self._testMethodName)  # 返回用例名字
        print('test_a!!!!!!!!',self._testMethodDoc)# 返回用例的注释信息

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

TestSuit

# TestSuite是测试套件,是一个承载多个用例的集合,或者想象成一个盒子
# 步骤:
#     1.实例化所有用例
#     2.创建一个盒子(容器)
#     3.将用例添加到盒子中
#     4.收集用例完成后,使用执行器去执行盒子中的用例



import unittest

class MyCase(unittest.TestCase):

    def test_is_upper(self):
        self.assertTrue('Wsd'.isupper())

    def test_is_lower(self):
        self.assertTrue('sdfsd'.islower())
        print('1111111111111')

if __name__ == '__main__':
    #实例化用例
    case1=MyCase(methodName='test_is_upper')
    case2=MyCase(methodName='test_is_lower')
    #创建盒子
    suite=unittest.TestSuite()
    #用例添加到盒子里
    # suite.addTest(case1)
    # suite.addTest(case2)
    suite.addTests([case1,case2])
    #收集完毕后,用执行器执行
    runner=unittest.TextTestRunner()
    runner.run(suite)

TestLoader

import unittest
# unittest.TestLoader().loadTestsFromModule() # 发现其他目录中的脚本用例

# 1.目录必须是一个包
# 2.找到指定模块下面unittest.TestCase子类,获取其中以test开头的用例

from bao_day9 import test1

if __name__ == '__main__': # 只能点击三角绿色的运行
    suite=unittest.TestLoader().loadTestsFromModule(test1)
    unittest.TextTestRunner(verbosity=2).run(suite)

discover

import unittest
import os
#discover方法要求必须是包才能执行 

# discover批量执行用例

if __name__ == '__main__':
    ret=os.path.dirname(os.path.abspath(__file__))  # 只到目录的绝对路径
    print(ret)
    test_path=os.path.join(ret,'testcase')
    print(test_path)
    suite=unittest.TestLoader().discover(start_dir=test_path,pattern='test*.py')
    unittest.TextTestRunner(verbosity=2).run(suite)
    #verbosity 三种模式
    # 0  精简模式,通过后没提示
    # 1  默认模式,通过.,失败F
    # 2  详细模式,可以看到来自哪个用例,成功或失败

skip跳过

import unittest

# unittest.skip(reason) # reason 跳过用例的原因描述,无条件跳过
# unittest.skipIf(condition,reason) # 有条件跳过, 为真,跳过

class MyCase(unittest.TestCase):

    @unittest.skip('无条件跳过')
    def test_01(self):
        print('11111111111')

    def test_is_upper(self):
        self.assertTrue('Wsd'.isupper())

    def test_is_lower(self):
        self.assertTrue('sdfsd'.islower())

    @unittest.skipIf(condition=1<2,reason='有条件跳过')
    def test_02(self):
        print('22222222222')

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

生成测试报告

import unittest
from HTMLTestRunner import HTMLTestRunner

class MyCase(unittest.TestCase):

    def test_is_upper(self):
        self.assertTrue('Wsd'.isupper())

    def test_is_lower(self):
        self.assertTrue('sdfsd'.islower())

    @unittest.skipIf(condition=1<2,reason='有条件跳过')
    def test_02(self):
        print('22222222222')

if __name__ == '__main__':
    case1=MyCase(methodName='test_is_upper')
    case2 = MyCase(methodName='test_is_lower')
    case3 = MyCase(methodName='test_02')
    suite=unittest.TestSuite()
    suite.addTests([case1,case2,case3])
    f=open('../report/report_day14.html','wb')
    HTMLTestRunner(stream=f,verbosity=2).run(suite)

discover方法生成测试报告

import unittest
import os
from HTMLTestRunner import HTMLTestRunner

class MyCase(unittest.TestCase):

    def test_is_upper(self):
        self.assertTrue('Wsd'.isupper())

    def test_is_lower(self):
        self.assertTrue('sdfsd'.islower())

    @unittest.skipIf(condition=1<2,reason='有条件跳过')
    def test_02(self):
        print('22222222222')

if __name__ == '__main__':
    ret = os.path.dirname(os.path.abspath(__file__))  # 只到目录的绝对路径
    test_path = os.path.join(ret, 'testcase')
    suite = unittest.TestLoader().discover(start_dir=test_path, pattern='test*.py')
    f=open('../report/report_day14.html','wb')
    HTMLTestRunner(
        stream=f,
        title='WMS仓储项目测试报告',  # 标题
        verbosity=2,
        description='通过率不错'   #  描述
    ).run(suite)

 

posted @ 2022-08-10 17:57  爱coding的果妈  阅读(30)  评论(0编辑  收藏  举报