如何向Selenium RC TestSuite输入参数?
我需要测试几个卖同样东西的网站,但它们的模板不同。
所以我想要运行每个MainTestClass,并给它一些输入参数,比如:
java -jar SeleniumServerStandalone-2.0b2.jar -port 5555 (template_id=5)
这样做可以吗?
class MainTestCases(unittest.TestCase):
def setUp(self):
#self.template_id=template_id I want something like that
self.verificationErrors = []
self.selenium = selenium("localhost", 5555, "*chrome", "http://www.google.com/")
time.sleep(5)
self.selenium.start()
def test_test1(self):
if self.template_id==1:
...
elif self.template_id==2:
...
def test_test2(self):
if self.template_id==1:
...
elif self.template_id==2:
...
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
2 个回答
试着给 MainTestCases 添加一个 init 方法,像这样:
class MainTestCases(unittest.TestCase):
def __init__(self, methodName, template_id):
super(MainTestCases, self).__init__(self, methodName)
self.template_id = templateId
def setUp(self):
... and so on...
因为有了这个自定义,你需要手动构建你的测试套件,因为每个测试用例都必须用 template_id 来实例化,像这样--
def suite(template_id):
testcasenames = unittest.defaultTestLoader.loadTestsFromTestCase(MainTestCases)
suite = []
for case in testcasename:
suite.append(MainTestCases(case, template_id)
return suite
然后在 main 中,不要使用 unittest.main(),而是这样做:
- 解析命令行参数。你可以考虑使用 argparse(2.7 及以上版本)或 optparse(2.6 及以下版本)模块。它们功能强大,但通过查看示例很容易上手。
- 创建并运行测试套件:unittest.TextTestRunner().run(suite(template_id))
现在,我使用这个解决方案:
- 创建一个测试套件来运行测试用例:
首先,导入一些需要的模块:
import unittest # 导入单元测试模块
from Flights.FlightsTestCases import FlightsTestCases # 从Flights文件夹中导入FlightsTestCases类
import sys # 导入系统模块
from Flights.FlightTemplate import FlightTemplate # 从Flights文件夹中导入FlightTemplate类
接下来,定义一个测试套件的函数:
def suite():
testSuite= unittest.TestSuite()
testSuite.addTest(FlightsTestCases('test_test1'))
FlightsTestCases.www_address='http://testpage.pl/'
FlightsTestCases.flight_template=FlightTemplate.Test
#FlightsTestCases.www_address='http://productionpage.pl/'
#FlightsTestCases.flight_template=FlightTemplate.Production
return testSuite
if __name__ == "__main__":
result = unittest.TextTestRunner(verbosity=2).run(suite())
sys.exit(not result.wasSuccessful())
然后,把set_up改成类似这样的内容:
class FlightsTestCases(unittest.TestCase): # 创建一个名为FlightsTestCases的测试类,继承自unittest.TestCase
www_address = None # 定义一个变量,用来存储网址,初始值为None
flight_template = None # 定义一个变量,用来存储航班模板,初始值为None
xml_report_generator = None # 定义一个变量,用来存储XML报告生成器,初始值为None
def setUp(self):
self.verificationErrors = []
if self.www_address == None:
self.selenium = selenium("localhost", 5555, "*chrome", "http://testpage.pl/")
else:
self.selenium = selenium("localhost", 5555, "*chrome", self.www_address)