gpt4 book ai didi

Python 单元测试整个模块设置

转载 作者:行者123 更新时间:2023-12-01 02:03:57 25 4
gpt4 key购买 nike

我正在尝试使用 Selenium 和 Python 测试 Web 应用程序。该应用程序有一个非常方便的数据库备份实用程序。目前我有一大类RegressionTest(unittest.TestCase)它利用 setUpClass()tearDownClass()进行测试前的数据库备份和测试结束后的恢复。这一切都工作得很好,但我真的很想将这些测试分成多个类(每个测试类都有自己的文件),但我找不到一种在不重复备份的情况下执行此操作的好方法/恢复操作。

让事情变得更加复杂的是,我想添加以下限制:

这需要在我的 TeamCity CI 服务器上(当前使用 python3 -m teamcity.unittestpy ,但只要我继续获得测试报告,我就很灵活)和通过 PyCharm 的标准单元测试运行配置来调用。不幸的是,当通过 PyCharm 调用时,'__main__' == __name__似乎评估为 False ,这就排除了像这样的上下文管理器的可能性:

if '__main__' == __name__:
with BackupManager():
if seleniumutils.is_running_under_teamcity():
runner = TeamcityTestRunner()
else:
runner = unittest.TextTestRunner()
unittest.main(testRunner=runner)

这是 PyCharm 正在执行的行: /usr/bin/python3 /Path/To/PyCharm/Installation/helpers/pycharm/_jb_unittest_runner.py --path /Path/To/Project/Test/Code/testregression.py这是 _jb_unittest_runner.py 的确切版本在我现在使用的 PyCharm 版本中:https://github.com/JetBrains/intellij-community/blob/3486b93168677dbc2519a78f472039bc50ca78be/python/helpers/pycharm/_jb_unittest_runner.py

我想不出有什么可以让我做到这一点。我想也许多重继承会有所帮助,尽管那会很丑陋。但是,我脑子里想不出任何场景不会让每个测试至少被调用两次。

那么,谁能想出一个解决方案,让我在测试之前和之后只执行一次操作?

最佳答案

如果您希望每个测试模块运行一次数据库备份,您可以考虑使用 setUpModule()tearDownModule() 函数。

当在模块级别声明这些函数时,Python 的 unittest 将为每个模块执行一次 setUpModule()tearDownModule() 函数。

PyCharm 在配置了 unittestrunner 后将运行这些,我想 TeamCity 也会运行它们,因为它在幕后使用 unittest

关于Python 单元测试整个模块设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49260833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com