重复的全局变量并尝试除python单元测试外

时间:2017-09-29 08:56:59

标签: python unit-testing selenium

我已经开始使用Python Selenium并编写了如下所示的脚本。

这将打印链接到失败的测试的返回代码(test01,test02,test03,..)。

忽略每项测试都检查相同的事情。

我只是想了解是否有更简洁的方法来编写测试,因为每个人都重复声明keyWordList.push("ad"); // first element keyWordList.push("ad-block"); // second element keyWordList.push("ad-container"); keyWordList.push("ad-div"); // last Element ,然后有global res阻止。

有人可以就如何改善这一点提出一些建议吗?

try/except

3 个答案:

答案 0 :(得分:4)

根本不需要全局变量。你在课堂上;始终使用self.res

答案 1 :(得分:2)

这正是setUp实例方法的用途,非常类似于每个测试类运行一次的setUpClass方法。

def setUp(self):
    # this code will be executed before each and every test
    self.res = 0

def tearDown(self):
    # this code will be executed post each and every test.

顺便问一下,为什么要使用全局变量?没有必要。事实上,使用全局变量很少有正当理由。此外,测试需要孤立和独立,使用全局变量将违反该规则。

答案 2 :(得分:0)

感谢上面的提示。我已将代码缩减到此版本,希望看起来更清晰,更标准:

class Login(unittest2.TestCase):

    @classmethod
    def handleError(self, e, res):
        print ("Test failed with exception: %s" % e)
        self.result = res
        sys.exit()

    @classmethod
    def setUpClass(self):
        binary = FirefoxBinary('C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe')
        self.driver = webdriver.Firefox(firefox_binary=binary)
        self.base_url = "https://stackoverflow.com"
        self.result = 0

    def test01(self):
        driver = self.driver
        try:
            self.assertEqual("Ask a Question", driver.title)
        except Exception,e:
            self.handleError(e, 1)

    def test02(self):
        driver = self.driver
        try:
            self.assertEqual("Ask a Question", driver.title)
        except Exception,e:
            self.handleError(e, 2)

    def test03(self):
        driver = self.driver
        try:
            self.assertEqual("Ask a Question", driver.title)
        except Exception,e:
            self.handleError(e, 3)

    @classmethod
    def tearDownClass(self):
        self.driver.quit()
        print ("res=%s") % self.result

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