0
点赞
收藏
分享

微信扫一扫

【测试用例】运用unitest模块

王传学 2022-02-16 阅读 39

UnitTest框架

UnitTest是Python自带的一个单元测试框架,用它来做单元测试,是自带的框架,不需要单外安装,只要安装了python就可以使用。

第三方框架:想要使用 需要先安装后使用(pytest)

单元测试框架:主要用来做单元测试,一般是开发做的。
对于测试来说,unittest 框架的作用是 自动化脚本(用例代码)执行框架(使用unittest框架 来管理 运行 多个测试用例的

UnitTest框架的作用:

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

UnitTest的组成:

  1. TestCase(测试用例),是unittest框架的组成部分不是手工和自动化中所说的(Test Case)。每个TestCase 都是一个代码文件,在这个代码文件中用来书写真正的用例代码。
  2. TestSuite (测试套件),用来管理 组装(打包)多个 TestCase(测试用例)的
  3. TestRunner(测试执行,测试运行),用来 执行TestSuite的。
  4. TestLoader(测试加载),功能是对 TestSuite(测试套件)功能的补充,管理 组装(打包)多个TestCase。
  5. Fixture(测试夹具),书写在TestCase代码中,是一个代码结构,可以在每个方法执行前后都会执行的内容。

TestCase

代码学习目的:学习 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 将光标放在 方法名的后边 运行, 只会执行当前的方法

将光标放在 类名的后边 运行, 会执行类中的所有的测试方法在这里插入图片描述
将光标放在 方法名的后边 运行, 只会执行当前的方法

在这里插入图片描述

TestSuite和TestRunner

方法一:套件对象.addTest(测试类名(‘方法名’))

"""
学习 TestSuite 和 TestRunner 的使用
"""
# 1.导包(unittest)
import unittest
# 2.实例化(创建对象)套件对象,
from ceshi.模块unitest import TestDemo
suite = unittest.TestSuite()
# 3.使用套件对象添加用例方法
# 方式一,套件对象.addTest(测试类名('方法名')) #建议测试类名和方法名直接去复制,不要手写
suite.addTest(TestDemo('test_method1'))
suite.addTest(TestDemo('test_method2'))
# 4.实例化运行对象
runner = unittest.TextTestRunner()
# 5.使用运行对象去执行套件对象
# 运行对象.run(套件对象)
runner.run(suite)

注意实例化运行对象是TextTestRunner()

运行结果
在这里插入图片描述

方法二:套件对象.addTest(unittest.makeSuite(测试类名))

方式二,将已给测试类中的所有方法进行添加
#套件对象.addTest(unittest.makeSuite(测试类名))
#缺点: makeSuite() 不会提示

# 1.导包(unittest)
import unittest
# 2.实例化(创建对象)套件对象,
from ceshi.模块unitest import TestDemo

suite = unittest.TestSuite()
# 3.使用套件对象添加用例方法
# 方式二,将已给测试类中的所有方法进行添加
# 套件对象.addTest(unittest.makeSuite(测试类名))
# 缺点: makeSuite() 不会提示
suite.addTest(unittest.makeSuite(TestDemo))

# 4.实例化运行对象
runner = unittest.TextTestRunner()
# 5.使用运行对象去执行套件对象
# 运行对象.run(套件对象)
runner.run(suite)

运行结果:
在这里插入图片描述
运行结果中的 .. 表示 用例通过;F 用例不通过; error 用例代码有问题。

TestLoader(测试加载)

TestLoader(测试加载),作用和 TestSuite 的作用是一样的,对 TestSuite 功能的补充,用来组装测试用例的。
使用步骤:

  1. 导包
  2. 实例化测试加载对象并添加用例 ==》得到的是suite对象
  3. 实例化 运行对象
  4. 运行对象执行套件对象

在一个项目中 TestCase的代码,一般放在一个单独的目录中。

方法一

# 1.导包
import unittest

# 2.实例化加载对象并添加用例
# unittest.TestLoader().discover('用例所在的路径','用例的代码文件名')
# 用例所在的路径,建议使用相对路径,用例的代码文件名可以使用*(任意多个任意字符)通配符

suite = unittest.TestLoader().discover('../ceshi','unittest*.py')

# # 3.实例化运行对象
# runner = unittest.TextTestRunner()
#
# # 4.执行
# runner.run(suite)

# 可以将 3 4 步 变为一步
unittest.TextTestRunner().run(suite)


ceshi文件夹目录里以unittest开头的有两个:
在这里插入图片描述
运行结果都为:
在这里插入图片描述
运行TestLoader结果为:
在这里插入图片描述

方法二

# 1.导包
import unittest

# 2.使用默认的加载对象并加载用例
suite = unittest.defaultTestLoader.discover('ceshi','unittest*.py')

unittest.TextTestRunner().run(suite)

运行结果:
在这里插入图片描述

Fixture

一种代码结构
在某些特定情况下会自动执行
方法级别
在每个测试方法(测试用例)执行前后 都会自动调用的结构

# 方法执行之前
def setUp(self):
	每个测试方法之前都会执行
	pass

# 方法执行之后
def teardown(self):
	每个测试方法执行之后都会执行
	pass

类级别
在每个测试类中所有的方法执行前后 都会自动调用的结构(在整个类中 执行之前执行之后各一次)

# 类级别的Fixture方法,是一个类方法
# 类中所有方法之前
@classmethod
def setUpClass(cls):
	pass

# 类所有方法之后
@classmethod
def teardownClass(cls):
	pass

模块级别
模块:代码文件
在每个代码文件执行前后执行的代码结构

# 模块级别的需要写在类的外边直接定义函数即可
# 代码文件之前
def setUpModule():
	pass
# 代码文件之后
def tearDownModule():
	pass

方法级别和类级别的 前后方法不需要同时出现,根据用例代码的需要自行的选择使用。

代码举例:

import unittest
class TestLogin(unittest.TestCase):
    def setUp(self):
        """每个测试方法执行之前都会先调用的方法"""
        print('输入网址......')
    def tearDown(self) -> None:
        """每个测试方法执行之后都会调用的方法"""
        print('关闭当前页面......')
    @classmethod
    def setUpClass(cls) -> None:
        print('1.打开浏览器')
    @classmethod
    def tearDownClass(cls) -> None:
        print('5.关闭浏览器')
    def test_1(self):
        print('输入正确用户名密码验证码,点击登录1')
    def test_2(self):
        print('输入正确用户名密码验证码,点击登录2')

运行结果:
在这里插入图片描述

举报

相关推荐

0 条评论