在测试用例中运行所有selenium测试

时间:2014-12-29 21:49:53

标签: python selenium selenium-webdriver webdriver

我在一个测试用例中有多个测试,但我注意到它只运行第一个测试

import unittest
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait

class Test(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.base_url = "http://www.example.com/"
    def test_Google(self):
        driver = self.driver
        driver.implicitly_wait(10)
        driver.get(self.base_url)
    def fill_contact(self):
        driver.find_element_by_xpath('//a[contains(.,"Contact")]').click()
        driver.implicitly_wait(10)
        driver.find_element_by_xpath('//input[@type="submit"][@value="Send"]').click()

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

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

每当我运行它时它只运行

def test_Google(self)
之后什么都没有。我做错了什么?

2 个答案:

答案 0 :(得分:3)

方法必须以'test'开始自动运行。

Per the docs

  

通过继承unittest.TestCase创建测试用例。他们三个   单个测试使用名称以。开头的方法定义   字母test此命名约定告知测试运行员   哪些方法代表测试。(我的重点)


TestLoader负责加载测试并将其包裹在TestSuite中。它使用this method to identify tests

class TestLoader(object):
    testMethodPrefix = 'test'
    def getTestCaseNames(self, testCaseClass):
        """Return a sorted sequence of method names found within testCaseClass
        """
        def isTestMethod(attrname, testCaseClass=testCaseClass,
                         prefix=self.testMethodPrefix):
            return attrname.startswith(prefix) and \
                hasattr(getattr(testCaseClass, attrname), '__call__')
        testFnNames = filter(isTestMethod, dir(testCaseClass))
        ...

因此,attrname.startswith(prefix)检查方法名称是否以'test'开头。

答案 1 :(得分:1)

作为@unubtu指出的替代方案:

您可以使用nose test runner并使用@istest decorator标记方法:

from nose.tools import istest

class Test(unittest.TestCase):
    ...

    @istest
    def fill_contact(self):
        driver.find_element_by_xpath('//a[contains(.,"Contact")]').click()
        driver.implicitly_wait(10)
        driver.find_element_by_xpath('//input[@type="submit"][@value="Send"]').click()

此外,这里有一个非常好的概述unittest测试发现: