当前位置: 首页 > 知识库问答 >
问题:

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

邹斌
2023-03-14

我们目前正在运行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项目,但我很确定这会破坏我们的自动化构建,因为它们主要是为了构建和打包我们的部署而存在的。运行这些测试应该是自动化构建和打包过程中的一个步骤。

    < li >创建两个Jenkins工作。一个去做测试...如果测试通过,将触发另一个构建,该构建将构建并打包web项目。将后期生成事件放在测试项目上。 < li >生成解决方案而不是项目(确保解决方案包含所需的测试),并将后期生成事件放在任何将运行nunit控制台来运行测试的测试项目上。然后使用命令行将所有需要的文件从每个bin和content目录复制到一个包中。 < li >只需在jenkins中构建测试项目,而不是在jenkins中构建web项目。测试项目将引用web项目(取决于您测试的内容)并构建它。
  1. 有两份工作,而不是一份。调试两件事不是一件。一个用于查看测试是否通过,另一个用于构建和编译 Web 项目。测试可能会通过,但如果它是您正在测试的内容未使用的内容,则构建可能会失败...
  2. 这要求我们确切地知道构建中的内容。现在,msbuild为我们完成了这一切。如果每次创建额外文件夹时都有多个团队在处理一个项目,则必须担心可能易碎的命令行语句。
  3. 这似乎是我们在这里的主要目的的腐败。测试应该是这个过程中的一个步骤,而不是这个过程中最重要的事情。我也不是100%确定触发构建与普通构建相同,它是否与普通构建执行所有相同的操作。以相同的方式移动所有正确的文件,将它们全部移动到相同的目录中,等等。

每当我们的主项目构建时,我们都希望运行我们的测试。但是向针对测试项目运行的Web项目添加构建后事件是不起作用的,因为Web项目不引用测试项目,也不会触发该项目的构建。我可以继续......但这就足够了......

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

共有1个答案

丌官昊天
2023-03-14

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

查看诸如加入,构建管道,参数化触发器等插件来帮助您。

通过使用多个节点,这也将允许并行进行。试图把所有的东西都塞进一份工作是不可取的。

 类似资料:
  • 目前,开发人员正在处理多个OSGi包,这些包也通过OSGi导入/导出相互使用。Eclipse用于开发和测试。 现在,我们要建立一个CI-server(Jenkins),它应该通过使用Maven构建所有osgi包(来自repo)。因此,只有在CI-server中才需要Maven。这也意味着,开发人员在他们的工作站上进行开发时,既不会看到也不会关心pom.xml,因为他们没有接触到Maven。 我的第

  • 我有一个Cucumber测试套件,由Jenkins在一个服务器池上执行,该服务器池有时在服务器池中并发运行。 当服务器a上的测试运行更改了数据库存储的设置时,我遇到了竞争情况,这会导致服务器B上的测试运行失败,因为它正在寻找处于不同状态的设置 有没有办法将cucumber tests或Jenkins配置为在服务器B上运行场景,等待服务器a上运行的场景完成后再继续?

  • 问题内容: 我正在设置一个简单的图像:包含Riak(一个NoSQL数据库)的图像。该映像以CMD形式启动Riak服务。现在,如果我使用将该程序作为守护程序运行,它将启动Riak进程(我可以在日志中看到它)。但是,它会在几秒钟后自动关闭。如果我使用riak进程未启动运行它(更新:对此的解释,请参见答案)。实际上,根本没有任何服务在运行。我可以使用终端手动启动它,但是我希望Riak自动启动。我认为其他

  • 我在曼宁的练习中练习docker。 技术配方是关于配置jenkins从站,即docker容器。 以下是jenkins_slave 我使用命令构建docker映像 然后,我使用命令将docker映像作为容器运行 然后,我使用下面的docker命令运行jenkins服务器 以下是节点配置详情 - 然后,我收到一条错误消息,说这个代理处于脱机状态,因为Jenkins未能在其上启动代理进程 下面是错误堆栈

  • 我是否遗漏了任何配置等? 事先非常感谢

  • 问题内容: 我的项目中有一个包含一堆JUnit测试的目录。到目前为止,我已经为每个单元测试使用了单独的目标。例如: 此方法要求我每次添加单元测试时都更改构建文件。 我希望能够使用单个Ant构建器目标来运行项目中的所有单元测试。 有可能吗? 问题答案: 是的,您需要查看文件集标记,例如: 重要的部分是使用文件集和通配符/通配符模式来匹配测试名称。有关junit任务的完整文档,包括以下示例: http