如何向Selenium RC TestSuite输入参数?

1 投票
2 回答
1052 浏览
提问于 2025-04-16 13:40

我需要测试几个卖同样东西的网站,但它们的模板不同。

所以我想要运行每个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 个回答

1

试着给 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(),而是这样做:

  1. 解析命令行参数。你可以考虑使用 argparse(2.7 及以上版本)或 optparse(2.6 及以下版本)模块。它们功能强大,但通过查看示例很容易上手。
  2. 创建并运行测试套件:unittest.TextTestRunner().run(suite(template_id))
0

现在,我使用这个解决方案:

  1. 创建一个测试套件来运行测试用例:

首先,导入一些需要的模块:

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)

撰写回答