从HPN上的SVN自动测试二进制文件

时间:2009-06-26 14:05:51

标签: linux svn testing fortran hpc

我想在SVN存储库中根据需要或使用Cron作业在Fortran二进制文件上设置一些测试用例的自动测试。为了使问题稍微复杂化,测试用例将在计算集群上运行,因此每个测试用例都需要生成PBS脚本。 (Linux环境)

有很多网络测试和单元测试解决方案,但是,我找不到任何直接测试二进制文件的东西。比如说,提供输入,并将输出与预期的解决方案进行比较。

有关应该如何处理的任何建议?

3 个答案:

答案 0 :(得分:1)

可能有一个更好的答案,更多预先打包,但我相信Buildbot是可配置的,只要你可以编写一个python脚本来运行你的二进制文件,它应该适合你想要的。

http://buildbot.net/

答案 1 :(得分:1)

对于简单的输入/输出测试,您可以自己敲一个脚本来执行此操作...

e.g。

for each program
    compile
    submit to queue
    wait for finish
    check output

实际上,您可能希望向队列提交多个作业,但想法是一样的。

以下是关于如何完成每一步的一些想法。

提交

您可以使用模板PBS脚本,并在提交之前使用sed查找/替换带有程序输入值的intput令牌

等待完成

您可以反复为您的作业ID输入qstat的输出,等待它完成

检查输出

根据预期输出检查作业的输出文件。您可以将预期输出保存到文件并使用diff,或者具有必须与每次运行匹配的正则表达式列表

答案 2 :(得分:1)

我同意这是脚本非常简单的事情。根据二进制文件的配置方式以及程序之间的差异,您甚至可以将测试脚本作为SVN存储库的一部分包含在内。

由于您处于批处理系统中,因此您可以自由地安排测试。您可能希望有一个通用的“验证”作业,您可以提供设置参数(例如,预期和实际程序输出输出的位置)。 Nick提到使用grep检查qstat输出的作业ID,但您可以告诉PBS保留作业直到另一个作业完成。这意味着你有类似的东西:

...
#PBS -N run_test_1
#PBS -a 200906270000
...
<compile test>
<run test>
<save output>

提交时,保存qsub返回的作业ID(如何执行此操作取决于您的平台 - 通常类似job_id=$(qsub $JOB_FILE)就足够了)。然后,将该值插入另一个脚本:

...
#PBS -N verify_test_1
#PBS -W depend=afterany:$job_id
<run comparison>
...

这将(当插入job_id的正确值时)执行测试运行直到2009年6月27日午夜,并保持执行验证作业直到测试作业完成({ {1}}指令表明它应该总是在第一个作业之后运行 - 而不仅仅是它成功了。)

根据您的群集的周转时间,您可以将所有这些放在一个脚本中,尽管您仍然可以使用PBS基于时间的保留仅在特定时间运行。我最近开始使用Python而不是shell脚本来处理这些与系统相关的工作 - 我昨天测试过使Python脚本可执行并将PBS指令直接添加到源代码中 - 它似乎工作得非常好。