我有一个长期运行的项目,它被编译为发布模块,但测试套件可能会为每个模块运行所有测试。
这个项目非常庞大 - 目前大约有1250个测试用例(类),总共大约有4000个类。这是一个asunit3项目,因此所有测试用例都列在一个AllTests.as文件中。
显然我不会一直运行所有测试 - 套件需要几分钟才能运行,所以大部分时间我都在运行集中测试但是每天运行几次我运行完整套件,其中包括集成测试等等。
从我最近几个小时的工作开始,我不再能够成功构建和运行整个套件。我们有一个脚本允许我们使用包名或类名过滤测试,所以我可以testpackage ['modules']或testpackage ['com']等。我也可以排除包 - testallexcept ['utils']等等上。
我能够运行测试的任何和所有子集,但如果我尝试测试整个集合,我会得到:
Warning: Failed to parse corrupt data.
如果我只过滤掉几个类,那么我就可以让swf进行编译和打开,但它只是一个白色的盒子而且实际上没有运行测试。如果我过滤一些,那么一切都很好。我过滤哪一个似乎并不重要 - 只要我拿出大约15个测试用例,一切都很好(虽然我没有找到确切的数字,这是ok / not ok之间的界限。)
我正在使用-benchmark
进行编译并获得以下输出:
Initial setup: 34ms
start loading swcs 7ms Running Total: 41ms
Loaded 45 SWCs: 253ms
precompile: 456ms
Files: 4013 Time: 16087ms
Linking... 91ms
SWF Encoding... 833ms
/Users/me/Documents/clients/project/bin/ProjectShellRunner.swf (4888318 bytes)
postcompile: 927ms
Total time: 17312ms
Peak memory usage: 413 MB (Heap: 343, Non-Heap: 70)
mxmlc finished compiling bin/ProjectShellRunner.swf in 18 seconds
由于峰值内存使用量超过mxmlc中的默认堆,我将其增加到
VMARGS="-Xmx1024m -Dsun.io.useCanonCaches=false "
这似乎没有帮助。
asunit3和projectsprouts的设置方式将所有测试集中在一个AllTests.as文件中。现在已超过2500行,并导入所有1250个测试用例。
对于课程数量,班级长度,一个班级的进口数量等方面的硬性限制,我有什么遗漏吗?或者除了VM的VM堆之外我能改变的任何设置?我正在使用Flex 4.2 mxmlc编译器。
显然我可以通过脚本来解决这个问题,而不是单个套件来运行一系列子集,但我想了解为什么会发生这种情况。
任何线索?
基于来自Twitter的Qs的一些额外信息: