用于测试不同客户端和服务器版本的最佳Git策略

时间:2012-11-09 18:41:24

标签: git testing maven versioning

我希望能够为Java客户端/服务器运行集成测试(使用嵌入式jetty)。此外,我希望能够在集成测试期间混合和匹配不同的服务器和客户端源代码版本。

我想知道最好的git或maven版本策略是什么来实现这个目标:

  1. 对客户端和服务器使用相同的git存储库,很难签出各种服务器版本的代码,并根据各种客户端版本的代码进行测试。

  2. 使用单独的git存储库(第一个存储库与客户端src和集成测试,第二个存储库与服务器src) - 它还需要检出两个存储库以运行集成测试,并假设它们之间的相对路径。

  3. 仅针对maven-version服务器WAR测试客户端src代码,可能会导致开发人员针对与签出的服务器源代码不匹配的服务器WAR运行测试的诚实错误。

2 个答案:

答案 0 :(得分:4)

我将指出第三个挑战:集成测试可能存在错误,因此您可能希望独立控制测试版本。

我使用git的子模块功能来协调多个存储库。创建一个新的存储库,其中包含对客户端存储库和服务器存储库的引用。您也可以在此父级仓库中放置基本测试驱动程序。

当新开发人员加入团队时,他们可以克隆此父repo,然后运行git submodule update --init来克隆客户端和服务器子模块。这样他们就可以像其他人一样设置任何相对路径。

但是,我不喜欢让客户回购假设服务器位于../server/。所以我处理这个问题的方法是让父repo将任何所需的路径传递给子模块。例如,您可以在运行

的父仓库中拥有test.sh
make -C client SERVER_PATH=$(pwd)/server test

在您的情况下,您还可以将所有测试代码放在父仓库中。然后它可以安全地假设子模块的相对路径。

这种安排的一个有趣的附带好处:您可以创建记录特定版本组合的git提交,因为在父级仓库中提交时会记录在子模块中签出的版本。您可以使用它为已通过测试的版本组合创建分支或标记集合。

答案 1 :(得分:1)

我建议保持这个过程简单,因为你已经有足够的变量,而不会引入潜在的git管理问题。为此,我会避免使用子模块。我会给开发人员明确的分支/标签配对,以测试测试矩阵中的客户端和服务器存储库。

使用标签,以便将来可以更轻松地重复使用并在矩阵中重复相同的测试,尤其是在第一轮修复错误之后。

简而言之,我推荐您的解决方案#2。相对路径假设优于子模块引入的潜在混淆。

相关问题