框架
说明
:
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)