1

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

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

关于如何处理的任何建议?

4

3 回答 3

1

可能有更好的预打包答案,但我相信 Buildbot 的可配置性足够高,只要您可以编写 python 脚本来运行二进制文件,它就可以满足您的需求。

http://buildbot.net/

于 2009-06-26T14:37:08.507 回答
1

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

例如

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

在实践中,您可能希望向队列提交多个作业,但想法是相同的。

这里有一些关于如何完成每一步的想法。

提交

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

等待完成

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

检查输出

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

于 2009-06-26T14:54:07.410 回答
1

我同意这是非常简单的脚本。根据二进制文件的配置方式以及程序之间的差异,您甚至可以将测试脚本作为 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.

于 2009-06-26T15:51:06.287 回答