无法在Python2.7中导入ddt

2024-09-25 00:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

import unittest

from ddt import  data, unpack
from selenium import webdriver
import ddt

@ddt

class searchddt(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()

        self.driver.get('https://magento.com/products/magento-commerce')

        @data(("phones",2))
        @unpack
        def test_search(self,search_val,expected_count):
            self.searchfield=self.driver.find_element_by_xpath("//I[@aria-hidden='true']/self::I")
            self.searchfield.clear()
            self.searchfield.send_keys(search_val)
            self.searchfield.submit()


        def tearDown(self):
            self.driver.quit()
    if __name__=='__main__':
        unittest.main(verbosity=2)



FAILED (errors=1)

导入ddt时出错,代码未执行

Error Traceback (most recent call last): File "C:\Python27\lib\unittest\case.py", line 329, in run testMethod() File "C:\Python27\lib\unittest\loader.py", line 32, in testFailure raise exception ImportError: Failed to import test module: ddt class searchddt(unittest.TestCase): TypeError: 'module' object is not callable

Process finished with exit code 1

Tags: fromimportselfsearchdatadefdriverunittest
2条回答

我认为问题在于你们进口所需的装饰器的方式

from ddt import  data, unpack
from selenium import webdriver
import ddt

如果您看最后一条语句,您将导入ddt,它是一个模块,这将导致装饰类时出现错误。您需要一个位于ddt模块内部的decorator-callable。在

我认为解决办法是像这样在第一行导入它

^{pr2}$

这里有两个问题。在

另一个答案涵盖了第一个问题:您需要from ddt import ddt,而不是{}。在

第二个是测试函数用@unpack修饰,因此传递给@data的元组将被ddt解包,创建两个函数调用:test_search_1("phones")和{}。这不是你想要的。在

你可能想要这样的东西:

@data([
    {"search_val": "phones", "expected_count": 2},
    {"search_val": "things", "expected_count": 3},
    {"search_val": "stuff", "expected_count": 4},
])
@unpack
def test_search(self, search_val, expected_count):

还有一个额外的第三个问题,那就是测试和拆卸函数的缩进,这不应该在设置中。在

相关问题 更多 >