运行自动发现的python单元测试的子集

Ada*_*wis 5 python unit-testing

简短问题
在Python的unittest模块中使用自动发现方法时,是否可以在运行时选择要运行的单元测试.

背景
我正在使用unittest模块在外部系统上运行系统测试.请参阅下面的示例sudo-testcase.unittest模块允许我创建一个可以使用unittest的testrunner运行的任意数量的测试用例.我一直在使用这种方法大约6个月的持续使用,它运作得非常好.

在这个时候,我想尝试使这更通用和用户友好.对于我现在运行的所有测试套件,我已经硬编码了每个系统必须运行的测试.这对于未经测试的系统来说很好,但是当测试失败时(用户连接到错误的测试点等等),他们必须重新运行整个测试套件.由于一些完整的套房可能需要20分钟,这不是理想的选择.

我知道可以创建自定义 testsuite构建器,可以定义要运行的测试.我的问题是,有数百个测试用例可以运行和维护如果测试用例名称改变等,这将成为一场噩梦......

我的希望是使用,或内置的单元测试模块来实现这一目标.对于这两个选项,发现部分看起来非常简单,但我的问题是,选择要运行的测试用例子集的唯一方法是定义测试用例名称中存在的模式.这意味着我仍然需要硬编码模式列表来定义要运行的测试用例.因此,如果我必须对此列表进行硬编码,那么使用自动发现有什么意义(请注意这是修辞问题)?

我的最终目标是使用通用方法选择在执行期间运行的单元测试,以复选框的形式或用户可以编辑的文本字段.理想情况下,解决方案将使用Python 2.7,并且需要在Windows,OSX和Linux上运行.

编辑
为了帮助澄清,我不希望该工具生成选项列表或复选框.理想情况下,该工具将返回目录中所有测试的列表,包括完整路径以及测试用例属于哪个Suite(如果有).使用此列表,我将构建用户与之交互的复选框或组合框,并将这些测试传递到运行中的测试套件中.

示例测试用例

test_measure_5v_reference 
    1) Connect to DC power supply via GPIB
    2) Set DC voltage to 12.0 V
    3) Connect to a Digital Multimeter via GPIB
    4) Measure / Record the voltage at a given 5V reference test point
    5) Use unittest's assert functions to make sure the value is within tolerance
Run Code Online (Sandbox Code Playgroud)

D K*_*ger 1

将测试的每个子集存储在其自己的模块中。正如您所说,通过让用户使用复选框或文本输入来选择模块名称来获取模块名称列表。获得模块名称列表后,您可以构建相应的测试套件,执行类似于以下操作的操作。

testsuite = unittest.TestSuite()
for module in modules:
  testsuite.addTest(unittest.defaultTestLoader.loadTestsFromModule(module))
Run Code Online (Sandbox Code Playgroud)