本文大纲截图:
-
UnitTest框架:
- PyTest框架:
框架: 框架英文单词 framework,为解决一类事情的功能的集合。需要按照框架的规定(套路)去书写代码。
一、UnitTest框架介绍【文末分享自动化测试学习资源】
1、什么是UnitTest框架?
- 概念:UnitTest是python自带的一个单元测试框架,用它来做单元测试
- 自带的框架:不需要单独按照,只要安装了 python就可以用
- 第三方框架:想要使用 需要先安装后使用(如:pytest)
- 单元测试框架:主要用来做单元测试,一般单元测试是开发做的。对于测试来说,UnitTest 框架的作用是自动化脚本(用例代码)执行框架(使用UnitTest框架来管理 运行多个测试用例的)
2、为什么使用UnitTest框架?
-
1)能够组织多个用例去执行
-
2)提供丰富的断言方法(让程序代码代替人工自动的判断预期结果和实际结果是否相符)
-
3)能够生成测试报告
-
4)UnitTest框架对于测试来说的作用是:自动化脚本执行框架(使用 UnitTest框架来管理运行多个测试用例的脚本)
3、UnitTest框架核心组成要素
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、输入网址
4、UnitTest框架实践
4.1 TestCase(测试用例)
介绍:
-
1)每个 TestCase(测试用例)都是一个代码文件,在这个代码文件中 来书写真正的用例代码
-
2)代码文件的名称必须按照标识符的规则来书写(可以将代码的作用在文件的开头又多行注释说明)
注意:
-
1)代码文件的命名规范
-
1>代码文件名字不能以数字开头
-
2>代码文件名字中不能有空格
-
3>代码文件名字不能有中文
-
4>代码文件名字由字母、数字、下划线组成,且不能以数字开头
-
-
2)代码运行没结果
-
原因:右键运行没有
unittest for xxx
的提示 而出现的问题 -
解决方案1:重新建一个代码文件,将写好的代码复制进去
-
解决方案2:删除已有的运行方式
-
- 3)没有找到用例:测试方法中不是以 test_ 开头的,或者单词写错了
步骤:
-
1)导包 import unittest
-
2)自定义测试类
-
3)在测试类中书写测试方法
-
4)执行用例
代码:
# 1、导包
import unittest
# 2、新建测试类,需要继承 unittest 模块中的 TestCase类 即可
class TestDemo1(unittest.TestCase):
# 3、书写测试方法(即 用例代码,目前没有真正的用例代码,使用 print 代替)
# 注意:书写要求;测试方法 必须以 test_ 开头(本质以 test 开头)
def test_method1(self):
print("测试方法1")
def test_method2(self):
print("测试方法2")
class TestDemo2(unittest.TestCase):
def test_method3(self):
print("测试方法3")
def test_method4(self):
print("测试方法4")
# 4、执行用例(方法)
# 4.1 将光标放在 类名后边 运行,会执行类中的 所有测试方法
# 4.2 将光标放在 方法名后边 运行,只执行当前的方法
4.2 TestSuite & TestRunner(测试套件&运行)
介绍:
-
1)TestSuite(测试套件):管理、打包、组装 多个 TestCase(测试用例) 文件
-
2)TestRunner(测试执行):执行 TestSuite(测试套件)
步骤:
-
1)导包 import unittest
-
2)实例化套件对象(创建套件对象)
-
3)使用套件对象 添加 用例方法
-
4)实例化运行对象(创建运行对象)
-
5)使用运行对象 去执行 套件对象
实例化套件对象并添加测试用例:
# 导包
import unittest
from UnitTest_study.hm01_unittest import TestDemo
# 实例化套件对象
suite = unittest.TestSuite()
# 方法1:单个添加测试用例(需要导包TestDemo)
suite.addTest(TestDemo('test_001'))
suite.addTest(TestDemo('test_002'))
# 方法2:批量添加测试用例(需要导包TestDemo)
suite.addTest(unittest.makeSuite(TestDemo))
实例化运行对象:
# 导包
import unittest
# 实例化运行对象
runner = unittest.TextTestRunner()
# 运行测试套件
runner.run(suite)
查看测试执行结果的方法:
- 说明: .运行通过;F用例不通过;E用例代码有问题
代码:
方法一:使用套件对象单个(单个方法)添加用例并运行
- 添加用例基本格式:unittest.TestSuite().addTest(类名('方法名'))
- 特点:逐条添加测试用例
- 运行用例基本格式:unittest.TextTestRunner().run(测试用例集)
# 1、导包
import unittest
from unittest_testcase import TestDemo1, TestDemo2
# 2、实例化套件对象(创建套件对象)
suite = unittest.TestSuite()
# 3、使用套件对象 添加 用例方法
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)
方法二:使用套件对象批量(单个类)添加用例并运行
- 添加用例基本格式:unittest.TestSuite().addTest(unittest.makeSuite(类名))
- 特点:批量添加测试用例
- 运行用例基本格式:unittest.TextTestRunner().run(测试用例集)
# 1、导包 import unittest from unittest_testcase import TestDemo1, TestDemo2 # 2、实例化套件对象(创建套件对象) suite = unittest.TestSuite() # 3、使用套件对象 添加 用例方法 suite.addTest(unittest.makeSuite(TestDemo1)) suite.addTest(unittest.makeSuite(TestDemo2)) # 4、实例化运行对象(创建运行对象) runner = unittest.TextTestRunner() # 5、使用运行对象 去执行 套件对象 # 格式:运行对象.run(套件对象) runner.run(suite)
4.3 TestLoader(测试加载)
介绍: TestLoader(测试加载),和 TestSuite 的作用一样,是对 TestSuite 功能的补充,用来管理组装(打包)多个 TestCase。在一个项目中 TestCase(测试用例)的代码,一般放在一个单独的目录(case)中
步骤
- 1)导包 import unittest
- 2)实例化测试加载对象并添加用例(得到的是 suite 对象)
- 3)实例化 运行对象
- 4)运行对象执行套件对象
代码:
- 基本格式一:suite = unittest.TestLoader().discover('case', 'test_*.py')
- 基本格式二:suite = unittest.defaultTestLoader.discover('case', 'test_*.py')
# 导包
import unittest
# 方法1:实例化对象并添加测试用例
suite = unittest.TestLoader().discover('case', 'test_*.py')
# 方法2:实例化对象并添加测试用例(说明:插件代码中有一句:defaultTestLo