我想在SVN存储库中根据需要或使用Cron作业在Fortran二进制文件上设置一些测试用例的自动测试。为了使问题稍微复杂化,测试用例将在计算集群上运行,因此每个测试用例都需要生成PBS脚本。 (Linux环境)
有很多网络测试和单元测试解决方案,但是,我找不到任何直接测试二进制文件的东西。比如说,提供输入,并将输出与预期的解决方案进行比较。
有关应该如何处理的任何建议?
答案 0 :(得分:1)
可能有一个更好的答案,更多预先打包,但我相信Buildbot是可配置的,只要你可以编写一个python脚本来运行你的二进制文件,它应该适合你想要的。
答案 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指令直接添加到源代码中 - 它似乎工作得非常好。