1-UnitTest框架

1-什么是UnitTest框架

概念:UnitTest框架是专门用来进行执行代码测试的框架

2-为什么要使用UnitTest框架?

  • 能够组织多个用例去执行
  • 提供丰富的断言方法
  • 提供丰富的日志与测试结果

3-UnitTest核心要素

  1. TestCase
  2. TestSuite
  3. TextTestRunner
  4. Fixture

3.1-TestCase

点击查看代码
说明:(翻译:测试用例)一个TestCase就是一条测试用例;
使用:
    1. 导包:import unittest             --> 导入unitest框架
    2. 继承:unittest.TestCase             --> 新建测试类继承unittest.TestCase

提示:
    1). 测试用例:在自动化测试中,一条用例就是一个完整的测试流程;                
    2). 测试方法名称命名必须以test开头;
       (原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法)

 

3.2-TestSuite (翻译:测试套件)

点击查看代码
说明:多条测试用例集合在一起,就是一个TestSuite;
使用:
    1. 实例化:     suite = unittest.TestSuite()           ——>(suite:为TestSuite实例化的名称)          

    2. 添加用例:suite.addTest(ClassName("MethodName"))    ——>(ClassName:为类名;MethodName:为方法名)         
                 

    3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName))
                 (搜索指定ClassName内test开头的方法并添加到测试套件中)

提示:
    1). 一条测试用例(.py)内,多个方法也可以使用测试套件
    2). TestSuite需要配合TextTestRunner才能被执行

3.3-TextTestRunner    (翻译:执行测试用例)

点击查看代码
说明:是用来执行测试用例套件
使用:
    1. 实例化: runner=unittest.TextTestRunner()    ——>(runner:TextTestRunner实例化名称)

    2. 执行:    runner.run(suite)                  ——>(suite:为测试套件名称)

3.4-Fixture

点击查看代码
说明:是一个概述,对一个测试用例环境的搭建和销毁就是一个Fixture;

使用:
    1. 初始化(搭建):def setUp(self)            --> 首先执行
       (setUp:此方法继承于unittest.TestCase)   
       
    2. 结束(销毁):    def tearDown(self)        --> 最后执行
       (tearDown:此方法继承于unittest.TestCase)
       
提示:
    1. 必须继承unittest.TestCase类,setUp、tearDown才是一个Fixture;
    2. setUp:一般做初始化工作,比如:实例化浏览器、浏览器最大化、隐式等待设置
    3. tearDown:一般做结束工作,比如:退出登录、关闭浏览器
    4. 如果一个测试类有多个test开头方法,则每个方法执行之前都会运行setUp、结束时运行tearDown

 4-defaultTestLoader

点击查看代码
说明: 
    使用unittest.defaultTestLoader()类,通过该类下面的discover()方法自动搜索指定目录下指定开头
    的.py文件,并将查找到的测试用例组装到测试套件;

用法:
    test_dir = '../'
    disconver = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
    ——>(test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 ;test:代表文件开头是test,*:通配符,匹配所有)
    
运行:
    runner=unittest.TextTestRunner()
    runner.run(disconver)

 5-defaultTestLoader与TestSuite区别

点击查看代码
1. TestSuite可以添加TestCase中所有test开头的方法和添加指定的test开头方法;
2. defaultTestLoader搜索指定目录下指定开头.py文件,并添加TestCase内所有test开头的方法,不能指定添加方法;

提示:defaultTestLoader属于TestSuite另一种实现方式;

使用案例

结构目录介绍

unittest_07.py

点击查看代码
import unittest


def add(a, b):
    return a + b


class TestCase01(unittest.TestCase):
    def testcase_01(self):
        print('testcase_01')
        print('1 + 1 =', add(1, 1))

    def testcase_02(self):
        print('testcase_02')
        print('6 + 8 =', add(6, 8))

unnittest_08.py

点击查看代码
import unittest

from untest_07 import TestCase01

suite = unittest.TestSuite()
# 以测试用例类里的每一种方法为单位添加
suite.addTest(TestCase01("testcase_01"))
suite.addTest(TestCase01("testcase_02"))

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



-----------------------------------------运行结果---------------------------------------------------------------------------------
C:UsersXXXXXXScriptspython.exe D:/XXX/自动化测试/案例演示/unittest_08.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
testcase_01
1 + 1 = 2
testcase_02
6 + 8 = 14

Process finished with exit code 0

unnittest_08.py

点击查看代码
import unittest

from untest_07 import TestCase01

suite = unittest.TestSuite()

# 以测试用例类为单位添加
suite.addTest(unittest.makeSuite(TestCase01))

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


-------------------------运行结果---------------------------------------------------

C:UsersXXXXXXScriptspython.exe D:/XXX/自动化测试/案例演示/unittest_08.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
testcase_01
1 + 1 = 2
testcase_02
6 + 8 = 14

Process finished with exit code 0

 defaultTestLoader方法案例

test01.py

点击查看代码
import unittest


def add(a, b):
    return a + b


class TestCase01(unittest.TestCase):
    def testcase_01(self):
        print('test01.py里面的testcase_01方法')
        print('1 + 1 =', add(1, 1))

    def testcase_02(self):
        print('test01.py里面的testcase_02方法')
        print('6 + 8 =', add(6, 8))

test02.py

点击查看代码
import unittest

def add(a, b):
    return a + b

class TestCase01(unittest.TestCase):
    def testcase_01(self):
        print('test02.py里面的testcase_01方法')
        print('3 + 1 =', add(3, 1))

    def testcase_02(self):
        print('test02.py里面的testcase_02方法')
        print('10 + 7 =', add(10, 7))


demo_1.py

点击查看代码
import unittest

discover = unittest.defaultTestLoader.discover('./cases', pattern="test*.py")
runner = unittest.TextTestRunner()
runner.run(discover)



-------------------运行结果-----------------------------

C:UsersXXXXXXScriptspython.exe D:/XXX/自动化测试/demo_09.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK
test01.py里面的testcase_01方法
1 + 1 = 2
test01.py里面的testcase_02方法
6 + 8 = 14
test02.py里面的testcase_01方法
3 + 1 = 4
test02.py里面的testcase_02方法
10 + 7 = 17

Process finished with exit code 0
坚持,坚持,坚持…… 在你选择不放弃的那一刻, 成功其实已经在向你走近 我们无法得知什么时候会来临 但我们可以选择用自强的双手敲开幸福的门。
原文地址:https://www.cnblogs.com/bronyaa/p/14919936.html