以自动方式在Jenkins / Hudson中运行单元测试,从dev到构建服务器

时间:2012-10-24 19:10:06

标签: continuous-integration jenkins hudson automated-tests

我们目前正在运行Jenkins(Hudson)CI服务器来构建和打包我们的.net Web项目和数据库项目。一切都很好但我想开始编写单元测试,然后只有在单元测试通过时才传递构建。我们使用内置的msbuild任务来构建Web项目。使用以下参数......

MsBuild Version           .NET 4.0
MsBuild Build File    ./WebProjectFolder/WebProject.csproj  
Command Line Arguments    ./target:Rebuild /p:Configuration=Release;DeployOnBuild=True;PackageLocation=".\obj\Release\WebProject.zip";PackageAsSingleFile=True

我们需要对我们的代码运行自动化测试,这些代码在我们的机器上构建时可能会自动运行(可能是构建后事件),但是当Jenkins为该项目构建时也会运行。

如果你像这样运行它不会构建单元测试项目,因为web项目不引用测试项目。测试项目将引用Web项目,但我很确定这将是我们的自动构建,因为它们主要用于构建和打包我们的部署。运行这些测试应该是自动构建和打包过程中的一个步骤。

选项......

  1. 创建两个Jenkins作业。一个运行测试...如果测试通过另一个构建被触发,它构建和打包Web项目。将post build事件放在测试项目上。
  2. 构建解决方案而不是项目(确保解决方案包含所需的测试)并将post构建事件放在任何将运行nunit控制台以运行测试的测试项目上。然后使用命令行将每个bin和content目录中的所有必需文件复制到一个包中。
  3. 只需在jenkins中构建测试项目,而不是在jenkins中构建Web项目。测试项目将引用Web项目(取决于您正在测试的内容)并构建它。
  4. 问题......

    1. 有两个工作,而不是一个。调试两件事而不是一件。一个是看测试是否通过,一个是构建和编译Web项目。测试可以通过,但如果你正在测试的内容没有使用它,那么构建可能会失败......
    2. 这要求我们确切地知道构建的内容。现在,msbuild为我们做了一切。如果每次创建额外的文件夹时有多个团队正在处理项目,则必须担心可能会发生脆弱的命令行语句。
    3. 这似乎是我们主要目的的腐败。测试应该是这个过程中的一个步骤,而不是这个过程中最重要的事情。我也不是100%确定触发的构建与普通构建相同,它是否与普通构建完全相同。以相同的方式移动所有正确的文件将它们全部移动到相同的目录等。
    4. 最初的问题。

      我们希望在构建主项目时运行测试。但是,对于针对测试项目运行的Web项目添加后期构建事件不起作用,因为Web项目不引用测试项目并且不会触发此项目的构建。我可以继续...但这就够了......

      我们花了大约一个星期试图让这项工作很好但没有成功。如果您觉得可以得到更好的回复,请随意编辑它......

1 个答案:

答案 0 :(得分:9)

在詹金斯/哈德森,有很多工作是很好的。一些用于编译触发版本控制更改,一些用于由成功构建触发的运行(单元)测试,一些用于执行更多测试(整合)由成功的早期测试划分,一些用于部署,通过成功通过所有测试触发。

查看连接,构建管道,参数化触发器等插件,以帮助解决这个问题。

通过使用多个节点,这也可以使事情并行发生。试图在一份工作中塞满所有东西是不可取的。