我有一个selenium测试,如下所示。我想从另一个python文件中调用此测试,并将其他参数传递给test。
from selenium import webdriver
import unittest, time, re
class Mytest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.verificationErrors = []
self.accept_next_alert = True
def my_test(self):
driver = self.driver
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
我看到几个类似的问题,但没有人回答我的确切要求
我知道如何使用参数从命令提示符调用此测试但是我不想使用子进程。
我知道如何从没有参数的另一个python文件调用test。但是我需要传递参数
答案 0 :(得分:0)
以下是教程,如何使用参数Dynamically generating Python test cases创建TestCase。 这是一个答案,如何从其他文件调用TestCase:Python unittesting: run tests in another module
现在我告诉你我的例子:
我的例子的结构是:
maintest.py
mytest
|-- __init__.py
|-- test1.py
<强> test1.py 强>
from selenium import webdriver
import unittest
class MyTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.verificationErrors = []
self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
def my_test_generator(a, b):
def my_test(self):
print "run test"
self.assertEqual(a, b, "a != b")
return my_test
def suite(a, b):
_suite = unittest.TestSuite()
test_func = my_test_generator(a, b)
setattr(MyTest, 'my_test', test_func)
_suite.addTest(unittest.makeSuite(MyTest, 'my_test'))
return _suite
函数my_test_generator
用于创建带参数的测试函数。您需要创建一个TestSuite来从其他文件中调用它。非常重要:在_suite.addTest(unittest.makeSuite(MyTest, 'my_test'))
my_test
行中,生成器my_test_generator
中的名称相同。因此,您可以使用参数创建TestSuite。你可以从其他文件中调用它来运行你的测试。
<强> maintest.py 强>
import unittest
from mytest import test1
def suite():
_suite = unittest.TestSuite()
_suite.addTest(test1.suite(2, 3))
return _suite
if __name__ == '__main__':
unittest.main(defaultTest='suite')
您可以通过调用子测试套件来提供参数。