UnitTest框架-1

框架

说明 :
1. 框架英⽂单词 framework 2. 为解决⼀类事情的功能集合
> 需要按照框架的规定 ( 套路 ) 去书写代码

一、什么是UnitTest框架?

概念 : UnitTest Python ⾃带的⼀个单元测试框架,⽤它来做
单元测试。
----
⾃带的框架 ( 官⽅ ) : 不需要单外安装 , 只要安装了 Python ,
就可以使⽤
random , json , os , time
第三⽅框架 : 想要使⽤ 需要先安装后使⽤ ( pytest )
selenium , appium , requests
----
单元测试框架 : 主要⽤来做单元测试 , ⼀般单元测试是开发做
.
对于测试来说 , unittest 框架的作⽤是 ⾃动化脚本 ( ⽤例代
) 执⾏框架 ( 使⽤ unittest 框架 来 管理 运⾏ 多个测试
⽤例的 )

二、为什么使用UnitTest框架?

1. 能够组织多个用例去执⾏
2. 提供丰富的断言⽅法 ( 让程序代码代替人工自动的判断预期
结果和实际结果是否相符 )
3. 能够⽣成测试报告

三、UnitTest核心要素(unitest 的组成部分)

1. TestCase(最核心的模块)

TestCase ( 测试⽤例 ) , 注意这个测试⽤例是 unittest
架的组成部分 , 不是⼿⼯和⾃动化中我们所说的⽤例 ( Test
Case )
主要作⽤ : 每个 TestCase ( 测试⽤例 ) 都是⼀个代码⽂
, 在这个代码⽂件中 来书写 真正的⽤例代码

2. TestSuite

TestSuite ( 测试套件 ) , ⽤来 管理 组装 ( 打包 ) 多个
TestCase ( 测试⽤例 )

3. TestRunner

TestRunner ( 测试执⾏ , 测试运⾏ ) , ⽤来 执行
TestSuite ( 测试套件 )

4. TestLoader

TestLoader ( 测试加载 ) , 功能是对 TestSuite ( 测试套
) 功能的补充 ,
管理 组装 ( 打包 ) 多个 TestCase ( 测试⽤例 )

5. Fixture

Fixture ( 测试夹具 ) , 书写在 TestCase ( 测试⽤例 ) 代码
, 是⼀个代码结构 , 可以在每个⽅法执⾏前后都会执⾏
的内容
举例 :
登录的测试⽤例 , 每个⽤例中重复的代码就可以写在
Fixture 代码结构中 , 只写⼀遍 , 但每次⽤例⽅法的执
, 都会执⾏ Fixture 中的代码
1. 打开浏览器
2. 输⼊⽹址

四、TestCase(测试例)

1. 是⼀个代码⽂件 , 在代码⽂件中 来书写真正的⽤例代码
2. 代码⽂件的名字必须按照标识符的规则来书写 ( 可以将代码的
作⽤在⽂件的开头使⽤注释说明 )
步骤
1. 导包 ( unittest )
2. ⾃定义测试类
3. 在测试类中书写测试⽅法
4. 执⾏⽤例
代码
"""
代码的⽬的: 学习 TestCase(测试⽤例)模块的书写⽅法
"""
# 1, 导包
import unittest
# 2, ⾃定义测试类, 需要继承 unittest 模块中的
TestCase 类即可
class TestDemo(unittest.TestCase):
 # 3, 书写测试⽅法, 即 ⽤例代码. ⽬前没有真正的⽤
例代码, 使⽤ print 代替
 # 书写要求, 测试⽅法 必须以 test_ 开头(本质是以
test 开头)
 def test_method1(self):
 print('测试⽅法 1')
 def test_method2(self):
 print('测试⽅法 2')

# 4, 执⾏⽤例(⽅法)
# 4.1 将光标放在 类名的后边 运⾏, 会执⾏类中的所有的测试⽅法
# 4.2 将光标放在 ⽅法名的后边 运⾏, 只执⾏当前的⽅法
问题1 代码文件的命名不规范
1. 代码⽂件的名字以数字开头
2. 代码⽂件名字中有空格
3. 代码⽂件名字有中⽂
4. 其他的特殊符号
( 数字 , 字⺟ , 下划线组成 , 不能以数字开头 )
问题 2 代码运行没有结果
右键运⾏没有 unittests for 的提示 , 出现的问题
解决⽅案 :
⽅案 1. 重新新建⼀个代码⽂件 , 将写好的代码复制进去
⽅案 2. 删除已有的运⾏⽅式
问题 3 没有找到用例
测试⽅法中不是以 test _ 开头的 , 或者单词写错了

五、TestSuite & TestRunner

TestSuite ( 测试套件 ) : 管理 打包 组装 TestCase ( 测试⽤例 )
⽂件的
TestRunner ( 测试执⾏ ) : 执⾏ TestSuite ( 套件 )
步骤
1. 导包 ( unittest )
2. 实例化 ( 创建对象 ) 套件对象
3. 使⽤套件对象添加⽤例⽅法
4. 实例化运⾏对象
5. 使⽤运⾏对象去执⾏套件对象
TestSuite ( 测试套件 ) : 是⽤来管理多个 TestCase ( 测试⽤
) ,
先创建多个 TestCase ( 测试⽤例 ) ⽂件
方式一 代码
"""
学习 TestSuite 和 TestRunner 的使⽤
"""
# 1. 导包(unittest)
import unittest
from hm_07_testcase1 import TestDemo1
from hm_07_testcase2 import TestDemo2
# 2. 实例化(创建对象)套件对象,
suite = unittest.TestSuite()
# 3. 使⽤套件对象添加⽤例⽅法
# ⽅式⼀, 套件对象.addTest(测试类名('⽅法名')) #
建议测试类名和⽅法名直接去复制,不要⼿写
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method2'))
# 4. 实例化运⾏对象
runner = unittest.TextTestRunner()
# 5. 使⽤运⾏对象去执⾏套件对象
# 运⾏对象.run(套件对象)
runner.run(suite)

方式二 代码

import unittest
from UnitTest.testcase1 import TestDemo1
from UnitTest.testcase2 import TestDemo2
# 2. 实例化(创建对象)套件对象
suite = unittest.TestSuite()
# 3. 使⽤套件对象添加⽤例⽅法
# ⽅式⼀, 套件对象.addTest(测试类名('⽅法名'))
# 建议测试类名和⽅法名直接去复制,不要⼿写
# ⽅式⼆ 将⼀个测试类中的所有⽅法进⾏添加
# 套件对象.addTest(unittest.makeSuite(测试类名))
# 缺点: makeSuite() 不会提示

# suite.addTest(unittest.makeSuite(TestDemo1))
"""
unittest.makeSuite() 在新版unittest中已被弃用,
将在Python 3.13中删除,Python3.13版本后,
unittest的makeSuite方法无法使用的替代解决方案,
官方推荐使用新的TestLoader来装载测试用例
"""
# 创建一个用例装载器对象
loader = unittest.TestLoader()
# 将测试用例装载到测试套件中
suite.addTest(loader.loadTestsFromTestCase(TestDemo1))
suite.addTest(loader.loadTestsFromTestCase(TestDemo2))
# 4. 实例化运⾏对象
runner = unittest.TextTestRunner()

# 5. 使⽤运⾏对象去执⾏套件对象
# 运⾏对象.run(套件对象)
runner.run(suite)
练习
1. tools 模块中定义 add 函数 , 对两个数字进⾏求和计算
2. 书写 TestCase 代码对 add () 进⾏测试
⽤例 1 : 1 , 2 , 3
⽤例 2 : 10 , 20 , 30
⽤例 3 : 2 , 3 , 5
用例代码
"""案例练习"""
# 1,导包
import unittest
from tools import add
# 2, ⾃定义测试类
class TestAdd(unittest.TestCase):
 # 3. 书写测试⽅法, 就是测试⽤例代码
    def test_method1(self):
 # 1, 2, 3 判断实际结果和预期结果是否相符
        if add(1, 2) == 3:
            print('测试通过')
        else:
            print('测试不通过')
    def test_method2(self):
        if add(10, 20) == 30:
            print('测试通过')
        else:
            print('测试不通过')
    def test_method3(self):
 # 1, 2, 3 判断实际结果和预期结果是否相符
        if add(2, 3) == 5:
            print('测试通过')
       else:
            print('测试不通过')
套件和执行的代码
import unittest
# 实例化套件对象
from hm_08_test import TestAdd
suite = unittest.TestSuite()
# 添加测试⽅法
suite.addTest(unittest.makeSuite(TestAdd))
# 实例化执⾏对象
runner = unittest.TextTestRunner()
runner.run(suite)

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值