【问题标题】:Unittest tearDown() method depends on finished testUnittest tearDown() 方法取决于完成的测试
【发布时间】:2015-05-29 10:13:22
【问题描述】:

我编写 Selenium 测试,但遇到了问题。在每次测试之前,我都会为每个测试上传不同的文件,并且在测试完成后,即使测试失败,我也想从应用程序中删除这些文件。有两种方法setUptearDown。每次测试之前和之后都会调用它们,但是我如何定义在 tearDown 方法中完成了哪个测试?这对我来说很重要,因为每次测试后我都想从应用程序中删除不同的文件,具体取决于完成的测试。

我想要类似的东西:

def tearDown(self):
    if test1_is_finished():
       remove_test1_files
    if test2_is_finished():
       remove_test2_files
    # and so on

我是 Python 和 Selenium 测试的新手,也许有更好的方法在测试完成后做一些工作,即使它失败了。

【问题讨论】:

  • 如果您需要为每个测试做不同的事情 (setUp/tearDown),那么您不应该在测试中自己做吗?
  • 感谢您的回答,一分钟前我已经编辑了这个问题。即使测试失败,我也需要删除文件。也许 tearDown 不能解决我的问题,但也许存在另一种方法
  • 它们在每次测试之前和之后被调用 我相信它们只在一次被调用时被调用:在该文件中的所有测试运行之前和之后
  • @TimCastelijns 不,那是setUpClass/setUpModuletearDownClass/tearDownModule
  • 你能把测试用例分成不同的类,用它们自己的setUp/tearDown吗?如果setUp 始终相同,您可以从某个基类/mix-in 继承它。

标签: python unit-testing selenium


【解决方案1】:

setUp 方法中(在每次测试之前运行),创建一个列表to_be_removed

def setUp(self):
    self.to_be_removed = []

在每个单元测试中,将文件名附加到to_be_removed

def test1(self):
    ...
    self.to_be_removed.append(filename)

然后,在tearDown 中,删除to_be_removed 中列出的所有文件:

def tearDown(self):
    for filename in self.to_be_removed:
        os.unlink(filename)

这样,您可以以相同的方式处理所有tearDowns。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多