Python单元测试整个模块安装

时间:2018-03-13 16:09:48

标签: python pycharm python-unittest

我正在尝试使用Selenium和Python测试webapp。该应用程序有一个非常方便的数据库备份实用程序。目前,我有一个大类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 以下是我现在正在使用的PyCharm版本中_jb_unittest_runner.py的确切版本:https://github.com/JetBrains/intellij-community/blob/3486b93168677dbc2519a78f472039bc50ca78be/python/helpers/pycharm/_jb_unittest_runner.py

我无法想到任何可以让我这样做的事情。我想也许多重继承可能有所帮助,就像那样丑陋。但是,我无法想出任何可能导致每次测试被调用至少两次的情况。

那么,任何人都可以提出一个解决方案,允许我在测试之前和之后完成一次动作吗?

1 个答案:

答案 0 :(得分:2)

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

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

PyCharm将在使用unittestrunner进行配置时运行它们,我会想象TeamCity也将使用unittest