问题描述
正在使用Teamcity自动化部署项目,并希望自动化测试。项目是一个Angular前端项目,其中包含一些Protractor测试。用户希望将这些测试作为构建配置的一部分运行。用户希望在Docker容器中运行这些测试,而不是在Teamcity代理中运行。用户已经成功使用Docker容器运行其他步骤,所以Teamcity和Docker的配置都正常。用户的主要问题是如何在Docker容器中运行这些测试。用户希望有一个容器,能够独立运行测试,并在测试完成后停止。用户尝试了一些Docker容器,但发现它们都依赖于外部的Selenium实例。用户希望能够在Docker容器中实现与本地开发工作站相同的运行方式,而不需要依赖外部的Selenium服务器实例。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户提供的信息,我们可以通过对Protractor配置文件进行一些更改来实现在Docker容器中运行测试。首先,我们需要删除配置文件中的Selenium服务器设置,因为Docker容器会在每次运行时启动一个Selenium服务器,并自动使用它。其次,我们需要添加useAllAngular2AppRoots
选项,否则测试将会失败。下面是修改后的配置文件示例:
// conf.js
var spec_files = "tests/*.specs.js";
exports.config = {
framework: 'jasmine',
specs: [spec_files],
useAllAngular2AppRoots: true,
multiCapabilities: [{
browserName: 'chrome'
}],
restartBrowserBetweenTests: true,
params: {
sleepTime: 0
}
}
在上面的示例中,我们删除了seleniumAddress
选项,并添加了useAllAngular2AppRoots
选项。这样配置文件就可以在Docker容器中运行了。
方案2
根据用户提供的信息,我们可以在Teamcity的构建步骤中设置一个Docker命令来运行Protractor测试。由于需要在运行命令的末尾注入一些参数,所以不能直接在Docker容器中执行命令行步骤。以下是设置构建步骤的示例:
1. 在Teamcity中创建一个构建步骤。
2. 在构建步骤中选择Docker命令。
3. 在Docker命令中输入以下命令:
protractor conf.js --baseUrl="http://[替换为环境域名]:8080"
请注意,上面的命令中的[替换为环境域名]
应该替换为实际的环境域名。
通过以上步骤,我们可以在Teamcity中设置一个Docker命令来运行Protractor测试,并将参数注入到命令中。
方案3
根据用户提供的信息,我们可以尝试使用其他的Docker容器来运行Protractor测试,而不是使用用户提到的那两个容器。以下是一些可能的选择:
– https://hub.docker.com/r/angular/protractor
– https://hub.docker.com/r/alexeyraspopov/protractor
– https://hub.docker.com/r/andresriancho/protractor
请注意,这些容器可能需要根据用户的具体需求进行配置和调整。
总结
根据用户的需求,我们提供了几种在Docker中通过Teamcity运行Protractor测试的解决方案。用户可以根据自己的情况选择适合的方案,并根据需要进行配置和调整。希望以上解决方案对用户有所帮助。