python - 如果测试方法驻留在所有测试通用的类中,如何记录测试类的名称?
问题描述
我有以下项目结构:
/root
/tests
common_test_case.py
test_case_1.py
test_case_2.py
...
project_file.py
...
每个测试test_case_...
都继承自unittest.TestCase
和common_test_case.CommonTestCase
。类CommonTestCase
包含应该由所有测试执行的测试方法(尽管使用每个测试唯一的数据,在测试中存储和访问self.something
)。如果某个特定的测试用例需要一些特定的测试,它们会被直接添加到那个特定的类中。
目前我正在努力将日志记录添加到我的测试中。除其他外,我想记录运行该方法的类(因为上面的方法意味着不同类的相同测试方法名称)。我想坚持使用内置的日志记录模块来实现这一点。
我尝试了以下LogRecord属性:%(filename)s
、、、%(module)s
。%(pathname)s
但是,对于其中定义的方法,common_test_case.py
它们都返回路径/名称,common_test_case.py
而不是它们实际运行的测试模块。
我的问题是:
- 有没有办法实现我想要的,只使用内置
logging
模块? - 使用一些第三方/其他模块(我在想可能是一些“hacky”解决方案
inspect
)? - 有可能实现(在 Python 中)吗?
解决方案
您的问题与此类似,并通过以下方式解决:
self.id()
请参阅此处的函数定义,它调用self.__class__
被实例化的TestCase
类的实例。鉴于您正在使用多重继承,来自 Python 的多重继承规则适用:
对于大多数目的,在最简单的情况下,您可以将搜索从父类继承的属性视为深度优先、从左到右,而不是在层次结构中有重叠的同一类中搜索两次。
这意味着common_test_case.CommonTestCase
它将被搜索unittest.TestCase
。如果事物中没有 id 函数,common_test_case.CommonTestCase
则它应该像仅从unittest.TestCase
. 如果你觉得需要向 中添加一个id
函数CommonTestCase
,像这样(如果真的有必要的话):
def id(self):
if issubclass(self,unittest.TestCase):
return super(unittest.TestCase,self).id()
推荐阅读
- javascript - 正则表达式检测带有 2+ 数字和 2+ 字符的单词
- python - 基于 CSV 的登录系统问题
- protractor - E/launcher - 进程退出,错误代码为 100
- php - 我的 ajax 调用得到了正确的响应,但没有做任何事情
- python - 在 Python 中对“命令式外壳,功能核心”进行单元测试时遇到问题
- makefile - 生成文件到 CodeLite
- cakephp - Cake : 未能打开 stream() 权限
- python - 在 python 中执行代码时如何更改 URL 中的脚本名称
- c# - 访问类库中的文件
- android - 使用 NDK r17c 将 VTK 添加到 Android Studio 3.3 项目