照常运行testing对docker集装箱或dockerizetesting?

我是Docker的新手,正在读Docker。 这是一个很好的方式来testing自包含和可重复的标准化configuration系统(如果正确的话)。

但是,在我读过的所有内容中,似乎并没有太在意Docker容器如何进行testing。 docker用于“包含”基础架构和应用程序(代码)以便于testing(以及部署)。 但是有时testing代码库会很大,而且也不是那么简单。 而且可以有APItesting的testing代码库,UI的另一个testing代码库等等。

什么是或应该(在某些时候确定)testingdocker集装箱/部署您的应用程序/基础设施的标准做法? 应该:

  • testing代码被部署为旧的常规方式,作为文件存储库你从某个地方拉,然后在Jenkins服务器/从属或一个本地主机上运行dev / QAtesting/debugging,testing的目标是在docker容器中的应用程序?
  • dockerize整个testing代码库作为一个自包含的容器,然后使用该容器来启动/执行testing对其他具有应用程序代码/系统基础设施的容器?
  • 结合testing作为单独的docker集装箱本身的一部分,以在需要时运行。 但是,我认为这只适用于真正与容器匹配的应用程序代码的unit testing。 集成,用户界面,系统级别testing与系统内的应用程序模块不同。

我能想到的唯一原因是使dockerizingtesting可能有用,它是一个包含所有您需要的testing和匹配testing基础设施(所有testing平台/语言依赖项)的容器,以便可以随时随地部署和运行testing匹配的应用程序代码容器。 使用户无需根据需要设置testing基础架构。 但似乎没有为docker化testing发表过这样的文章。

我更喜欢你的select(3),即在生产可部署的工件(泊坞窗图像)中包含testing代码

请参考我参加的GTAC 2015的 Alister Scott :

不要害怕向您的应用程序添加可testing性特定的function,而这些function不起作用。 我最近不得不在我的车上换上新的轮胎,并且意识到很多轮胎都具有称为胎面指示器的可测性特征。 这些不起作用

对于集成和e2etesting,即需要使用多于1个docker镜像的testing,我更喜欢CI工具 ,通过docker-compose和这些testing的单独git仓库,协调创build所需的所有容器更大的testing。 所使用的docker镜像应该与生产完全相同,除了使得testing指向testing数据和/或分段服务的configuration (例如环境variables) 不同之外。

我不认为你将dockerizetesting本身作为运行testing的过程。

例如,如果你需要使用phpunit在php中运行unit testing,你可以dockerize phpunit并使用它来运行你的代码testing,同样对于你使用的任何其他testing框架(即testng,junit等)

下面是一个用于封装Java / Maven / TestNG的Dockerfile的例子,用于包含一些seleniumtesting的Javatesting项目:

FROM maven:3-jdk-8 # Selectively add stuff we need COPY pom.xml /usr/src/testng/ # Get a clean build immediately after and 'go-offline' to improve subsequent builds RUN cd /usr/src/testng && mvn dependency:go-offline COPY src /usr/src/testng/src WORKDIR /usr/src/testng/ # Additional support files that's needed but not for the build COPY supportfiles /usr/src/testng/supportfiles CMD [ "mvn test" ]