Python测试模块学习笔记

本文介绍了Python的内置测试模块unittest,包括TestCase、TestSuite、TestLoader等关键类的解释,以及unittest的命令行使用方式。接着讲解了pytest的安装、基本使用,对比unittest的简化之处,如直接的断言机制、fixture功能、命令行接口,以及skip和xfail属性。最后,文章总结了unittest和pytest的特点,强调pytest的fixture特性和丰富的插件生态。
摘要由CSDN通过智能技术生成

Python测试模块的学习笔记


关于unittest模块

unittest是python发行版里面自带的一个模块,使用起来非常简单,为了能够更好的理解和使用unittest模块,必须了解一下一些基本的概念。
unittest模块是用来进行单元测试的一个模块。
关于该模块,有几个类必须理解。
TestCase类:该类是封装了一个测试用例,即每个测试用例对应于一个TestCase类。
TestSuite类:该类是一个测试集,即把相关的TestCase类集合到一起形成一个TestSuite
TestLoader类:该类负责搜索和装载TestCase到TestSuite中。
TextTestRunner类:该类负责运行测试用例。
TextTestResult类:该类负责存储测试用例的执行结果。
最后所有的以上类都集成在了unittest.main()模块中了。
理解了这些基本概念之后,来看一个很简单的例子(官方文档中的例子)

import unittest

class TestStringMethods(unittest.TestCase):

  def test_upper(self):
      self.assertEqual('foo'.upper(), 'FOO')

  def test_isupper(self):
      self.assertTrue('FOO'.isupper())
      self.assertFalse('Foo'.isupper())

  def test_split(self):
      s = 'hello world'
      self.assertEqual(s.split(), ['hello', 'world'])
      # check that s.split fails when the separator is not a string
      with self.assertRaises(TypeError):
          s.split(2)

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

上述这个例子很明确的告诉了我们unittest的使用方法。unittest中的测试函数必须作为某一个类的成员函数并通常以“test_”前缀开头,该类必须是TestCase的子类,之后执行unittest.main()函数,该模块就会自动封装每一个以“test_”前缀开头 的例子到一个TestCase类中,然后把所有的TestCase都装载到TestSuite中并由TextTestRunner负责执行。运行一下可以看到如下结果:

用例的运行结果

unittest模块还提供了一些命令行应用的简单命令,列举一些常用的如下:
测试特定模块:
python -m unittest Testmodule_name
测试特定模块中的某个类:
python -m unittest Testmodule_name.TestClass
测试特定模块某个类中的某个方法:
python -m unittest Testmodule_name.TestClass.TestMethod
列举可用的命令行选项:
python -m unittest -h
测试该模块,并显示执行了的测试方法:
python -m unittest -v Testmodule_name
测试当前目录下的所有测试用例:
python -m unittest

最后一个要提的就是unittest的skip和expectedFailure属性。可以看几个小例子。

跳过该测试函数,并且显示”demonstrating skipping”的提示

 @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

在满足特定的条件下跳过该测试用例:

@unittest.skipIf(mylib.__version__ < (1, 3),
                     "not supported in this library version")
    def test_format(self):
        # Tests that work for only a certain version of the library.
        pass

该测试用例标记为失败的,在计算测试不通过的测试用例的时候不用考虑:

@unittest.expectedFailure
    def test_fail
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值