2017-07-26 120 views
1

上很慢,我有一个到位桶CI管道安装和运行SBT测试运行CI服务器

sbt "project api" "testOnly core.entities.UserSpec" 

它运行顺利在我的笔记本电脑,并花了大约2秒。但是当我尝试在CI服务器上运行它时,大约需要4分钟来运行一半的测试。

UserSpec用Spec2编写,它没有任何数据库或大量计算。这里是大多数测试是这样的:

def addCredential_nonConfirmedEmail_notAllowed = { 
    val emailAddress: EmailAddress = Fixture.emailAddress("unconfirmed") 
    val user: User = Fixture.user().copy(emailAddresses = Set(emailAddress)) 
    val result = user.addCredential(emailAddress, Fixture.password()) 

    val exception = result.failed.get.asInstanceOf[DomainException] 
    exception.code mustEqual DomainExceptionType.Validation 
    exception.message mustEqual "Email address must be confirmed before it can be used as part of credential" 
} 

的CI使用泊坞窗上运行 “bigtruedata/SBT:0.13.15-2.11.11” 的形象。 为了解决这个问题,我在墙上敲了两天头。首先,我指责CI,并尝试用:

  • gitlab CI
  • wercker

,仍然没有运气。

你能帮我解决这个问题吗?这就是我的设置看起来像

val projectSettings = Seq(
version := "1.0-SNAPSHOT", 
scalaVersion := "2.11.11", 
resolvers ++= Dependencies.resolvers, 
fork in Test := false, 
parallelExecution in Test := false) 

回答

1

最后,我找到了罪魁祸首!这是我,而不是CI,码头工人或SBT。

我在测试中使用了SecureRandom.getInstanceStrong中的Fixture.password()方法,如val salt = BCrypt.gensalt(10, SecureRandom.getInstanceStrong)。根据this reference,如果没有足够的随机性,将会阻塞该线程。一旦我删除SecureRandom.getInstanceStrong,它现在照常工作。

在使用它之前,我应该学会Random和SecureRandom之间的差异,并因此浪费了3天时间。很难学习:-D

相关问题