硒测试 - 无论如何,一切都会被打印出来

时间:2015-02-24 21:53:23

标签: python testing selenium printing unit-testing

这可能听起来像一个非常愚蠢的问题,但现在是:

我在python中编写selenium测试,基本上我的基础测试类看起来像这样:

chromedriver = "../selenium-tests/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver

class TestsFoo(unittest.TestCase):
    base_url = None
    language = None

    def setUp(self):
        self.driver = webdriver.Chrome(chromedriver)
        self.verificationErrors = []
        self.accept_next_alert = True
        self.driver.set_window_size(1100, 800)

然后我的所有其他测试类都从该类扩展。例如:

class TestsFooChild(TestsFoo):
    def test_something(self):
        driver = self.driver
        driver.get("{}{}/myurl.html".format(
            self.base_url,
            self.language)
        )
        # do stuff

        print driver.current_url
        self.assertTrue(somethingTrue)

    def tearDown(self):
        self.driver.close()
        self.driver.quit()

languageurl的定义归功于:

if __name__ == "__main__":
    TestsFoo.base_url = os.environ.get('URL')
    TestsFoo.language = os.environ.get('LANGUAGE')
    unittest.main()

对于一个非常微小的问题,这是很多信息: 在进行单元测试时,如果你在某个地方放一个print,那么只有在测试失败时才会打印出来。

那么为什么在我的情况下,无论测试结果如何,都会打印print个?我只想在测试失败时打印current_url

另外,我只是在看它为什么这样做。当我的测试失败时,我正在积极寻找一种只打印它的方法。所以那个部分得到了照顾。但我很好奇......

1 个答案:

答案 0 :(得分:1)

我几乎从不单独使用unittest,但就我所知,print导致输出到控制台是unittest的默认行为。这是一个示例文件:

import unittest

class Test(unittest.TestCase):

    def test_one(self):
        print "Foo"

if __name__ == "__main__":
    unittest.main()

如果您将其保存为test.py并使用python test.py运行,则会在控制台上打印Foo

但是,如果您使用像nosetests test.py这样的鼻子运行它(或者甚至只是文件目录中的nosetests),那么您将无法看到Foo安慰。您必须使用-s--nocapture运行它才能看到Foo