我的团队正在开发自动化测试,我们面临以下问题:当开发人员提交影响应用程序UI的更改时,自动化测试失败。
有没有办法,在Git中,只要特定文件类型(在我的情况下为.jsp
)发生变化,我就会通过电子邮件收到通知?
请注意,此处设置电子邮件通知不是问题;我知道如何使用钩子。相反,问题是关于如何检测给定类型的文件(在我的情况下为.jsp
)已经改变。有什么想法吗?
答案 0 :(得分:2)
使用简单的post-receive挂钩会很容易,但它不是解决最终问题的好方法。
当开发人员提交对UI的更改时,他们还应该更新测试,以便它们在同一次提交中或至少在同一次提交中再次传递。这意味着测试应该与代码位于同一个存储库中。好吧,因为它们与用户界面的工作方式密切相关,所以应该这样做。
然后,只需使用持续集成(我习惯Jenkins;还有其他选项)和/或自动将更改部署到测试运行的测试环境(见例如Deploy a project using Git push)。
那就是说,你可以用钩子来做。
首先,要查看在您调用的修订*.jsp
和$old
之间是否更改了任何$new
个文件:
git diff --exit-code --quiet $old..$new -- '*.jsp'
如果以 false (非零)状态退出,则有些内容已更改(没有--quiet
它会显示更改,--name-status
会列出更改文件)。
所以现在你只需要输入像
这样的东西while read old new ref
do
if !git diff --exit-code --quiet $old..$new -- '*.jsp'
then
git diff --name-status $old $new | \
mail -s "*.jsp files changed in $ref" \
you@company.com
fi
done
到您的存储库中的post-receive hook。
或者您可以调整命令以防止开发人员将*.jsp
文件直接推送到master
(例如通过gitolite)以强制他们将此类更改推送到某个临时分支,其中自动化将由其他团队更新,然后由其他团队或指定的看门人整合。
答案 1 :(得分:0)
我终于创建了这个钩子,作为post-receive钩子:
for file in $(git show --pretty="format:" --name-only $1..$2 $3 | grep -i .jsp)
do
git diff $1..$2 -- $file | \
mail -s "A '*.jsp' file has changed in the Repo" \
sample1@israel.com,sample2@israel.com
exit
done