如何在Python Selenium中实现类似TestNG的功能或在一个测试套件中添加多个单元测试?

假设我有两个nosetest ExampleTest1.py和ExampleTest2.py

 ExampleTest1.py
 class ExampleTest1(TestBase):
            """
            """

        def testExampleTest1(self):
            -----
            -----

    if __name__ == "__main__":
        import nose
        nose.run()

---------------
ExampleTest2.py
class ExampleTest2(TestBase):
        """
        """

        def testExampleTest2(self):
            -----
            -----

    if __name__ == "__main__":
        import nose
        nose.run()

现在我想从单个套件中运行这样的数百个测试文件.

我正在寻找像下面的testng.xml这样的TestNG功能,我可以添加我应该逐个运行的所有测试文件

 <suite name="Suite1">
      <test name="ExampleTest1">
        <classes>
           <class name="ExampleTest1" />          
        </classes>
      </test>  
      <test name="ExampleTest2">
        <classes>
           <class name="ExampleTest2" />          
        </classes>
      </test>  
    </suite> 

如果python中没有类似功能的te​​stng.xml,那么创建测试套件的其他替代方法是什么,并在那里包含我所有的python测试?谢谢

最佳答案
鉴于您可能需要多种不同的原因
构建测试套件,我会给你几个选择.

只需从目录运行测试

让我们说有mytests目录:

mytests/
├── test_something_else.py
└── test_thing.py

从该目录运行所有测试都很容易

$> nosetests mytests/

例如,您可以将烟雾,单位和集成测试放入
不同的目录,仍然能够运行“所有测试”:

$> nosetests functional/ unit/ other/

按标签运行测试

鼻子有
attribute selector plugin.
通过这样的测试:

import unittest

from nose.plugins.attrib import attr


class Thing1Test(unittest.TestCase):

    @attr(platform=("windows", "linux"))
    def test_me(self):
        self.assertNotEqual(1, 0 - 1)

    @attr(platform=("linux", ))
    def test_me_also(self):
        self.assertFalse(2 == 1)

您将能够运行具有特定标记的测试:

$> nosetests -a platform=linux tests/

$> nosetests -a platform=windows tests/

运行手动构建的测试套件

最后,nose.main支持suite参数:如果传递,
discovery is not done.
在这里,我为您提供了如何手动构建的基本示例
测试套件然后用Nose运行它:

#!/usr/bin/env python

import unittest

import nose


def get_cases():
    from test_thing import Thing1Test
    return [Thing1Test]


def get_suite(cases):
    suite = unittest.TestSuite()
    for case in cases:
        tests = unittest.defaultTestLoader.loadTestsFromTestCase(case)
        suite.addTests(tests)
    return suite


if __name__ == "__main__":
    nose.main(suite=get_suite(get_cases()))

正如您所看到的,nose.main获得了常规的单元测试套件
并由get_suite返回. get_cases函数是测试用例的地方
您选择的是“已加载”(例如上面的案例类刚刚导入).

如果你真的需要XML,get_cases可能就是你返回case的地方
你从模块中获得的类(通过__import__或
您从解析的XML文件中获取的importlib.import_module.
在nose.main调用附近,您可以使用argparse获取XML文件的路径.

转载注明原文:如何在Python Selenium中实现类似TestNG的功能或在一个测试套件中添加多个单元测试? - 代码日志