我正在我的机器上开发一个java程序。当我想测试时,我首先在我的机器上尝试小测试用例,但后来我想用真实数据运行这个程序。一个小测试是从linux内核查看一个文件,“真正的”测试是查看整个内核......
但是我想同时运行多个“真正的”测试(在不同版本的内核上),所以我有5个相同的测试机器(运行linux fedora)。如何在数据和程序方面同步这5台机器(我有时会使用yum来安装程序)?
我怎样才能确定我在任何时候都拥有完全相同的环境?
现在我主要使用scp,我的代码在svn ...
答案 0 :(得分:2)
我建议使用像VMware这样的虚拟化技术将一个实例克隆成多个。这样做的好处是可以在测试后始终回到相同的起点,并且能够运行比物理盒更多的场景。
答案 1 :(得分:0)
您可以使您的基准测试工具通过 http 或其他一些常用协议获取程序的新版本和testdata。如果您不想使用http,可以考虑使用网络文件系统( NFS 和 GlusterFS 是一些示例)。
我看到它的方式,你可以在一个'主'服务器上启动你的脚本然后它会产生5个bash进程。他们中的每一个都将登录到远程“从属”服务器并执行基准测试工具。基准测试工具将从某些(可能是“主”)服务器获取新程序和数据,然后执行它,测量时间/内存/等并在标准输出上返回这些值,因此ssh会将其传递回主服务器服务器和它的bash过程。然后,您可以将bash会话输出重定向到文件。
testmaster.sh -> 5*(testnode.sh -> ssh
-> fetch_and_benchmark -> output -> (ssh) -> testnode.sh -> file)
testmaster.sh必须检查所有文件是否已经存在f.e.每秒然后阅读并比较结果。这可能听起来很糟糕,但相信我,如果你不想手动完成所有操作并且脚本相对容易编写,那就更好了。
关于确保您在所有方框上拥有相同的环境......不要让任何人靠近您的测试节点,也不要对它们做任何事情。
我不建议虚拟化,因为它会以您无法预测的方式改变您的测试结果。虚拟化机器不能像纯机一样快,它不仅仅是“它慢了20%”。有些事情要慢得多,有些则不是那么多。如果您不介意,请使用虚拟化和快照,但您说您在多个节点上测试各自具有不同内核的东西,所以我想你非常认真地对待它。
啊,还有一件事。 Linux有一种释放内存的有趣方式(就像“在某人需要它之前不要释放它”)。有些东西被缓存了。可以肯定的是,您必须在每次测试后重启测试机器。