【问题标题】:How can I divide test-lists based on time so each take almost same time? [duplicate]如何根据时间划分测试列表,以便每个测试列表花费几乎相同的时间? [复制]
【发布时间】:2017-03-05 23:07:57
【问题描述】:

我正在使用 Python Unittest 运行测试用例,它生成我已经解析并创建了如下字典的 nose.xml 报告:

{'abc_1': {'duration': 788, 'processed': 0}, 'abc_2': {'duration': 632, 'processed': 0}, 'abc_3': {'duration': 2652, 'processed': 0}, 'abc_4': {'duration': 454, 'processed': 0}, 'abc_5': {'duration': 21, 'processed': 0}, 'abc_6': {'duration': 15, 'processed': 0}, 'abc_7': {'duration': 1200, 'processed': 0}, 'abc_8': {'duration': 8243, 'processed': 0}, 'abc_9': {'duration': 34, 'processed': 0}, 'abc_10': {'duration': 10829, 'processed': 0}, 'abc_11': {'duration': 3879, 'processed': 0}, 'abc_12': {'duration': 121, 'processed': 0}, 'abc_13': {'duration': 684, 'processed': 0}, 'abc_14': {'duration': 1500, 'processed': 0}, 'abc_15': {'duration': 1517, 'processed': 0}, 'abc_16': {'duration': 186, 'processed': 0}, 'abc_17': {'duration': 2033, 'processed': 0}, 'abc_18': {'duration': 1243, 'processed': 0}}

这里, abc_* 是脚本名称,duration 是该特定脚本执行所花费的总时间。 (例如:- abc_18 总共运行了 1243 秒)。

现在,我想根据时间(持续时间)将所有脚本分成 4 个(或 5 个或 6 个或动态)不同的组,这样所有组的时间都相等。

喜欢:

Grp1 - abc_18,abc_1,abc_4
Grp2 - abc_17,abc_10,abc_11
Grp3 - abc_2,abc_3

python有什么算法可以做这个操作吗?

How to understand the dynamic programming solution in linear partitioning? 中给出的pythonic 解决方案正在运行,但不确定如何使用我的列表,因为我对 python 很陌生:my_list = [('abc_1', 15), ('abc_2', 21), ('abc_3', 34), ('abc_4', 121), ('abc_5', 186), ('abc_6', 332), ('abc_7', 454), ('abc_8', 456), (' abc_9', 632), ('abc_10', 684), ('abc_11', 1200), ('abc_12', 1243), ('abc_13', 1500), ('abc_14', 1517), ('abc_15' , 2033), ('abc_16', 2652), ('abc_17', 3879), ('abc_18', 8243), ('abc_19', 10829)]

如果有人可以帮助我重新编写该代码,那将是很大的帮助。

【问题讨论】:

  • equal 时间似乎非常现实,但您的意思是要设置多个组,比如 5 个,然后将脚本分组到五个组之一,这样最慢组和最快组的总运行时间之间的差异最小化(或任何其他此类良好分组的指标)?
  • 当我说 5 时,所有脚本必须分成 5 个(逻辑)组,这样所有组的执行时间几乎相等。我怎样才能使用相等的时间?你能给我一些参考吗?
  • stackoverflow.com/questions/7938809/… 正在工作,但不确定如何申请我的代码?任何帮助都会很棒。

标签: python algorithm python-2.7 python-3.x


【解决方案1】:

您的示例中的预期结果似乎与您想要的结果不符(abc_18、abc_1、abc_4 的持续时间不同)。你可以做的是使用字典理解

Python dict comprehension

因此,在您的情况下,基本上您可以通过指定字段“持续时间”的值来过滤成员(python 2.7 及更高版本):

>>> print {k : v for k, v in a.iteritems() if v['duration'] == 8243}

结果:

{'abc_8': {'duration': 8243, 'processed': 0}}

希望对你有帮助。

【讨论】:

  • 因为我必须手动进行分叉,所以我只是举了一个例子,对不起,这是我写的非常糟糕的例子。
  • 如果你认为这是答案,你可以用这个答案标记已解决:)
  • 例如,所有测试脚本的总时长为 35981 秒。现在如果我想从中创建 4 个组,这样它们应该花费几乎相似的时间( 35981 / 4 ~ 8996 )。那么,如何根据时间逻辑划分脚本呢?
  • 那么这变成了一个算法实现(与你所说的问题无关)。并且有很多组合取决于您的“相似条件”,实现此目的的一种方法是,您可以创建 4 个组,然后每次用一个键填充每个组(并记录每个组的总时间),一旦一个组有执行时间总和约为 8996,然后您开始填充下一组。
猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2013-07-13
  • 2012-06-20
  • 1970-01-01
  • 2012-02-29
相关资源
最近更新 更多