python测试用例管理模块_Python的unittest模块如何检测测试用例?

博客内容展示了如何编写代码来遍历当前Python模块,寻找不是以'unittest'开头的模块,并检查其中的类是否为unittest.TestCase子类。对于找到的测试类,进一步查找以'test'开头的方法,将它们添加到测试列表中,最终构建测试套件并用unittest.TextTestRunner以详细级别2运行。示例代码中包含了几个测试用例的示例。
摘要由CSDN通过智能技术生成

我编写了一些代码,试图在下面执行与unittest.main()类似的操作。总之,我遍历模块,对于不以“unittest”名称开头的模块,我检查其成员。如果这些成员是一个类,并且是unittest.TestCase的子类,那么我将解析该类的成员。然后,如果这些类成员是以“test”开头的函数或方法,则将其添加到测试列表中。类对象的__dict__用于内省方法/函数,因为使用inspect.getmembers可能会显示太多。最后,这个测试列表被转换成一个元组并打包成一个套件。然后使用运行程序在详细级别2运行该套件。请注意,当然,如果您不需要此限制,可以删除在函数/方法名开头检查“test”的正则表达式,以便将bar_test()包含到测试列表中。#!/usr/bin/env python

import unittest

import inspect

import sys

import re

class Foo(unittest.TestCase):

@staticmethod

def test_baz():

pass

@classmethod

def test_mu(cls):

pass

def test_foo(self):

self.assertEqual('foo', 'foo')

def bar_test(self):

self.assertEqual('bar', 'bar')

class Bar:

pass

if __name__ == '__main__':

runner = unittest.TextTestRunner(verbosity=2)

tests = []

is_member_valid_test_class = lambda member: inspect.isclass(member) and \

issubclass(member, unittest.TestCase)

for module_name, module_obj in sys.modules.items():

if not re.match(r'unittest', module_name):

for cls_name, cls in inspect.getmembers(

module_obj, is_member_valid_test_class):

for methname, methobj in cls.__dict__.items():

if inspect.isroutine(methobj) and re.match(r'test', methname):

tests.append(cls(methname))

suite = unittest.TestSuite(tests=tuple(tests))

runner.run(suite)

结果是:test_foo (__main__.Foo) ... ok

test_baz (__main__.Foo) ... ok

test_mu (__main__.Foo) ... ok

----------------------------------------------------------------------

Ran 3 tests in 0.001s

OK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值