我想在 SVN 存储库中,按需或使用 Cron 作业在 Fortran 二进制文件上设置一些测试用例的自动化测试。为了使问题稍微复杂化,测试用例将在计算集群上运行,因此每个测试用例都需要生成一个 PBS 脚本。(Linux环境)
有很多 Web 测试和单元测试解决方案,但是,我找不到任何可以直接测试二进制文件的东西。说,提供输入,并将输出与预期的解决方案进行比较。
关于如何处理的任何建议?
可能有更好的预打包答案,但我相信 Buildbot 的可配置性足够高,只要您可以编写 python 脚本来运行二进制文件,它就可以满足您的需求。
似乎对于简单的输入/输出测试,您可以自己敲出一个脚本来执行此操作...
例如
for each program
compile
submit to queue
wait for finish
check output
在实践中,您可能希望向队列提交多个作业,但想法是相同的。
这里有一些关于如何完成每一步的想法。
您可以使用模板 PBS 脚本,并使用 sed 在提交之前使用程序的输入值查找/替换输入标记
您可以重复 grep qstat 的输出作为您的作业 ID,等待它完成
根据预期输出检查作业的输出文件。您可以将预期的输出保存到文件并使用 diff,或者有一个必须为每次运行匹配的正则表达式列表
我同意这是非常简单的脚本。根据二进制文件的配置方式以及程序之间的差异,您甚至可以将测试脚本作为 SVN 存储库的一部分。
由于您在批处理系统中,因此您可以自由安排测试。您可能希望有一个通用的“验证”作业,您可以向其提供设置参数(例如,预期和实际程序输出输出的位置)。 Nick提到使用grep
来检查qstat
您的作业 ID 的输出,但您可以告诉 PBS 保留一份作业,直到另一份作业完成。这意味着你有类似的东西:
...
#PBS -N run_test_1
#PBS -a 200906270000
...
<compile test>
<run test>
<save output>
提交后,保存返回的作业 ID qsub
(您如何执行此操作取决于您的平台 - 通常类似job_id=$(qsub $JOB_FILE)
就足够了)。然后,将该值插入另一个脚本:
...
#PBS -N verify_test_1
#PBS -W depend=afterany:$job_id
<run comparison>
...
这将(当job_id
插入适当的值时)保持测试运行的执行直到 2009 年 6 月 27 日午夜,并保持验证作业的执行直到测试作业完成(该afterany
指令指示它应该始终在第一份工作——不仅仅是成功)。
Depending on your cluster's turnaround time, though, you could put all of this in one script, though you could still use the PBS time-based holds to only run at a particular time. I've recently started using Python instead of shell scripts to handle even this system-related jobs - I tested yesterday making the Python script executable and adding the PBS directives straight into the source - it seemed to work very well.