分享unittest单元测试框架中几种常用的用例加载方法

  unittest模块是Python自带的一个单元测试模块,我们可以用来做单元测试。unittest模块包含了如下几个子模块:

  • 测试用例:TestCase
  • 测试集:TestSuite
  • 加载用例:TestLoader
  • 执行用例:TextTestRunner

  首先编写一个简单的加减乘除数学方法类:

class MathCalculate:
 '''
 加减乘除的计算类
 '''
 def __init__(self, first_num, second_num):
  self.first_num = first_num
  self.second_num = second_num

 def add(self):
  '''
  加法
  :return:
  '''
  return self.first_num + self.second_num

 def subtract(self):
  '''
  减法
  :return:
  '''
  return self.first_num - self.second_num

 def multiply(self):
  '''
  乘法
  :return:
  '''
  return self.first_num * self.second_num

 def divide(self):
  '''
  除法
  :return:
  '''
  try:
   return round(self.first_num / self.second_num, 2)
  except ZeroDivisionError:
   return '∞'

  接下来我们利用unittest中的TestCase类来编写测试用例,编写之前,要先知道TestCase类以及类方法的用法:

  1. 要引用TestCase类,需要引入unittest模块
  2. 引用TestCase是编写一个测试类,所以要新建一个类
  3. 测试类里面的方法名都是以test_开头,这样unittest才能识别到用例并去执行

  新建一个模块,编写一个简单的测试用例类:

import unittest
from python_for_unittest_testsuite.MathCalculate import MathCalculate as MC

class TestMathCalculate(unittest.TestCase):
 '''
 测试加减乘除类
 '''

 def test_add(self):
  actual = MC(1, 1).add()
  self.assertEqual(2, actual, msg='两数相加测试失败')

 def test_subtract(self):
  actual = MC(1, 1).subtract()
  self.assertEqual(0, actual, msg='两数相减测试失败')

 def test_multiply(self):
  actual = MC(1, 1).multiply()
  self.assertEqual(1, actual, msg='两数相乘测试失败')

 def test_divide(self):
  actual = MC(1, 1).divide()
  self.assertEqual(1, actual, msg='两数相除测试失败')

if __name__ == '__main__':
 unittest.main()

  我们运行代码之后,得到如下结果:

  但是这样远远达不到我们的要求,还需要继续优化,接下来进入正题......

  上面我们看到的是利用unittest.main()执行所有的用例,但是有的时候我们不需要执行所有的测试用例,并且可以按照自己的需求去添加用例,这时我们就要使用TestSuite来帮助我们更好地去实现单元测试

  方法一:加载测试用例,直接使用addTest()方法添加测试用例,代码示范如下:

import unittest
from python_for_unittest_testsuite.test_math_calculate import TestMathCalculate

suite = unittest.TestSuite()
# 增加一条用例 addTest()方法传入:类名(测试方法名)
suite.addTest(TestMathCalculate('test_add'))
suite.addTest(TestMathCalculate('test_subtract'))
suite.addTest(TestMathCalculate('test_multiply'))
suite.addTest(TestMathCalculate('test_divide'))

# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

  方法二:加载测试类,通过TestLoader里面的loadTestsFromTestCase来加载测试类,代码示范如下:

import unittest
from python_for_unittest_testsuite.test_math_calculate import TestMathCalculate

suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 加载测试类
suite.addTest(loader.loadTestsFromTestCase(TestMathCalculate))

# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

  方法三:加载测试模块,通过TestLoader里面的loadTestsFromModule来加载测试类,代码示范如下:

import unittest
from python_for_unittest_testsuite import test_math_calculate

suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 加载测试模块
suite.addTest(loader.loadTestsFromModule(test_math_calculate))

# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

  方法四:自动搜寻测试用例,根据传入的测试模块的所属目录路径自动去查找测试用例,代码示范如下:

import unittest

# 根据传入的测试模块的所属目录路径自动去查找
suite = unittest.defaultTestLoader.discover("G:\pycharm\PycharmProjects\python_class\python_for_unittest_testsuite")

# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

以上就是unittest单元测试框架中常用的几种用例加载方法的详细内容,更多关于unittest单元测试框架 用例加载的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python Unittest自动化单元测试框架详解

    本文实例为大家分享了Python Unittest自动化单元测试框架的具体代码,供大家参考,具体内容如下 1.python 测试框架(本文只涉及 PyUnit) 参考地址 2.环境准备 首先确定已经安装有Python,之后通过安装PyUnit,Python版本比较新的已经集成有PyUnit(PyUnit 提供了一个图形测试界面UnittestGUI.py) 参考:查看地址 3.代码实例 使用的IDE为 PyCharm,DEMO结构如图 1.简单地一个实例 # Test002_Fail.py #

  • python单元测试unittest实例详解

    本文实例讲述了python单元测试unittest用法.分享给大家供大家参考.具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单元测试可以帮助我们很快准确的定位到问题的位置,出现问题的模块和单元.所以这是一件很愉快的事情,因为我们知道其它修改或没有修改的地方仍然是正常工作的,而我们目前的唯一问题就是搞定眼前这个有点问题的"家伙&qu

  • Python unittest单元测试框架的使用

    一.测试模型 下面这部分来自于某书籍资料,拿过来,按需参考一下: 测试模型 (1)线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本.单纯的来模拟用户完整的操作场景.(操作,重复操作,数据)都混合在一起. 2.优点:每个脚本相对独立,且不产生其他依赖和调用.任何一个测试用例脚本拿出来都可以单独执行. 3.缺点:开发成本高,用例之间存在重复的操作.比如重复的用户登录和退出. 维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改. 4.线性测试实例:用户

  • 利用Python中unittest实现简单的单元测试实例详解

    前言 单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西.但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样

  • Django使用unittest模块进行单元测试过程解析

    Django测试框架非常简单,首选方法是使用python标准库中的unittest模块. Writing tests Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试.类名为django.test.TestCase,继承于python的unittest.TestCase. from django.test import TestCase from myapp.models import Animal class AnimalTestCase(Tes

  • Python单元测试工具doctest和unittest使用解析

    Python标准库包含两个测试工具. doctest:一个简单的模块,为检查文档而设计,但也适合用来编写单元测试. unittest:一个通用的测试框架. 一.使用doctest进行单元测试 创建文件mymath.py,内容 def square(x): ''' 计算平方并返回结果(下面是单元测试的格式) >>> square(2) >>> square(3) ''' return x * x if __name__ == '__main__': import doct

  • Python unittest单元测试框架总结

    什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入相同 (2)输入复数,比如-1.-1.2.-0.99,期待返回值与输入相反 (3)输入0,期待返回0 (4)输入非数值类型,比如None.[].{}.期待抛出TypeError 把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试  unittest工作原理 unittest中最核心的四部分

  • Python单元测试unittest的具体使用示例

    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架. unittest有四个比较重要的概念是test fixture, test case, test suite, test runner, . 在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例

  • 详解python单元测试框架unittest

    一:unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的. 基本用法如下: 1.用import unittest导入unittest模块 2.定义一个继承自unittest.TestCase的测试用例类,如 class abcd(unittest.TestCase): 3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法. 4.定义测试用例,

  • unittest+coverage单元测试代码覆盖操作实例详解

    基于上一篇文章,这篇文章是关于使用coverage来实现代码覆盖的操作实例,源代码在上一篇已经给出相应链接. 本篇文章字用来实现代码覆盖的源代码,整个项目的测试框架如下: 就是在源代码的基础上加了一个CodeCover.py文件,执行该文件会在目录CoverageReport生成相应的覆盖报告.如下是CodeCover.py的源码: #coding=utf8 import os import time def findTestWithPath(): current_dir=os.getcwd()

随机推荐