【使用unittest框架】unittest框架简介:测试用例,测试套件,测试运行器,测试加载器

前言

一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210418。

 

5、使用unittest框架

  1. unittest框架简介

  2. unittest中类方法和实例方法

  3. 测试用例和测试套件

  4. 使用unittest重构测试用例

  5. 为项目生产测试报告

 

unittest框架简介:测试用例,测试套件,测试运行器,测试加载器

 

一、什么是unittest

1、unittest是Python单元测试框架,类似于JUnit框架。

2、unittest中有5个重要的概念:test fixture, test case,tesloader, test suite, test runner

  • Testcase:一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码 (run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。
  • Test suite:多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
  • Testloader:是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。
  • Test runner:是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。
  • Test fixture:对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大。

 

二、使用unittest编写python的单元测试代码,包括如下几个步骤:

  • 1、编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类。
  • 2、在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。
  • 3、执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。

 

三、基本用法(unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的)

  • 1.用import unittest导入unittest模块
  • 2.定义一个继承自unittest.TestCase的测试用例类,如class xxx(unittest.TestCase):
  • 3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。
  • 4.定义测试用例,名字以test开头,unittest会自动将test开头的方法放入测试用例集中。
  • 5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符。
  • 6.调用unittest.main()启动测试
  • 7.如果测试未通过,则会显示e,并给出具体的错误(此处为程序问题导致)。如果测试失败则显示为f,测试通过为.,如有多个testcase,则结果依次显示。

四、unittest模块的常用方法/TestCase类常用属性

方法描述
setUp()

用于测试用例执行前的初始化工作。如测试用例需要访问数据库,可以在setUp()中建立数据库连接并初始化,需要登录web,可以先实例化浏览器等。

tearDown()

用于测试用例执行之后的善后工作,比如关闭数据库连接,关闭浏览器等。

assertEqual(a, b, [msg=测试失败时打印的信息])

断言a,b两个值是否相等,相等则测试通过。msg为可选参数,用于失败时打印信息

assertNotEqual(a, b, [msg])

断言a,b两个值是否相等,不相等则测试通过.

assertTrue(x, [msg])

断言x是否True,true则测试通过

assertFalse(x, [msg])

断言x是否False,False则测试通过

assertIs(a, b, [msg])

断言a是否是b,是则测试通过

assertNotIs(a, b, [msg])

断言a是否是b,不是则测试通过

assertIsNone(x, [msg])

断言x是否是None,是None则测试通过

assertIsNotNone(x, [msg])

断言x是否是None,是None则测试通过

assertIn(a, b, [msg])

断言a是否在b中,是则测试通过

assertNotIn(a, b, [msg])

断言a是否在b中,不在则测试通过

assertIsInstance(a, b, [msg])

断言a是否是b的一个实例,是则测试通过

assertNotIsInstance(a, b, [msg])

断言a是否是b的一个实例,不是则测试通过

五、实例运用方法

  • 1、打开python,在testcase下新建一个名为unittert的python-package文件。如下图所示:

  • 2、新建test01.py
import unittest

# 需要调用unittest下面的TestCase方法
# 注意方法名必须是test开头
class MyTestCase(unittest.TestCase):
    # setup开始的准备工作
    # tearDown:结束的收尾工作

    def setUp(self) -> None:
        print("setup....")

    def test01(self):
        print("test01")
        #自带的断言 1+2=3
        self.assertEqual(1+2,3)

    def test02(self):
        print("test02")
        #自带的断言5>=4
        self.assertGreater(5,4)

    def aaa(self):  # 这个方法有问题,方法名必须是test开头
        print("aaa")

    def tearDown(self) -> None:
        print("teaarDown....")

# 先用一个简单的方法来运行
if __name__ == '__main__':
    unittest.main()
  • 3、运行结果如下:

大家可以动手试试其他的方法~

“永不放弃,总有希望在前面等待!”送给自己,也送给正在阅读文章的博友们~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小慌慌

感谢博友的鼓励,快乐分享~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值