随着运行完成PHPUnit套件所需的时间增加,我们的团队开始怀疑是否有可能并行运行单元测试.最近我读了一篇关于Paraunit的文章,Sebastian Bergman也写道,他将在PHPUnit 3.7中添加并行性.
但是,集成测试仍然存在问题,或者更常见的是与DB交互的测试.为了保持一致性,必须重置testDB并在每次测试后加载夹具.但是在并行测试中,竞争条件存在问题,因为所有进程都使用相同的DB.
因此,为了能够并行运行集成测试,我们必须为每个进程分配自己的数据库.我想问一下,如果有人对如何解决这个问题有一些想法.也许在另一个xUnit实现中已经实现了这个问题的解决方案.
在我的团队中,我们使用的是MongoDB,因此一个解决方案是以编程方式为每个PHPUnit进程创建一个配置文件,并生成数据库名称(对于此过程),在setUp()方法中我们可以将主TestDb克隆到此临时数据库中.但在我们开始实施这种方法之前,我想问一下你对这个主题的看法.
php phpunit integration-testing unit-testing parallel-testing
我正在测试Jenkins以确定它是否适合我们的构建和测试框架.我发现Jenkins及其可用的插件符合我们的大部分需求.除了我似乎无法找到如何做一个特定类型的任务的帮助.
我们正在为嵌入式设备创建应用程序 我们有100个需要在这些设备上运行的测试.如果我们在构建之后在一个设备上运行所有测试,那么将需要几个小时才能获得结果.但是,如果我们并行运行100个设备上的测试,那么我们可以在更短的时间内获得结果.
所有测试都有非常相似的起点.使用设备的IP地址调用测试脚本以运行测试和用户名/ pw.该脚本将对设备进行必要的测试,并报告每个测试项目的通过/失败.
我认为这样做的漫长/痛苦的方法是在Jenkins中编写100个作业,每个作业将直接使用不同的测试脚本(使用上述参数)并使用可用的插件并行运行.但是,从长远来看,保持所有这些工作将是非常困难的.
因此,更好的方法是创建一个Job(让我们称之为child_tester),它可以采用以下参数:测试脚本名称,设备的IP地址,用户名/ pw等.然后使用另一个作业(让我们打电话)它mother_tester)使用不同的IP地址调用child_tester作业100次并且并行运行它们.我需要一些方法来累积child_tester作业的每个单独运行的所有测试结果,并将它们报告给mother_tester.
我的问题是有一个插件或任何方式在詹金斯完成这个?我查看了名为"Build Flow","Parallel Test Executor"和"Parameterized Trigger"的插件信息.但是,它们似乎不符合我的需要.
使用Maven surefire,我无法分叉并行测试执行.也就是说,我的每个测试用例都要在serapate JVM中运行,因此就是分叉.另外,我希望我的测试用例并行运行.第一部分工作没有问题:我能够在自己的JVM中运行每个测试用例.第二部分,对我来说仍然是一个挑战.我还没有设法让测试用例的并行执行工作.以下是我的插件声明的样子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<parallel>methods</parallel>
<forkMode>always</forkMode>
<argLine>-Xms512m -Xmx512m</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了两种方法和类,但没有看到任何并行化.我的JUnit版本是4.7,如依赖性声明所示:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
任何帮助都会得到很多批评.
格雷瓜尔.
它们共享相同的 UDID 吗?它们是如何在幕后实施的?
场景是我有 4 个并行运行 UI 测试的克隆。我需要一个干净的模拟器来进行一些测试(但想保持随机测试顺序)
我正在开发一个使用 Maven 构建和maven-surefire-plugin运行在 Scalatest 中编写的测试的 Scala 项目。
测试是这样的:
import org.scalatest.ParallelTestExecution
@RunWith(classOf[org.scalatest.junit.JUnitRunner])
class MyTest extends FunSuite with ParallelTestExecution {
// some tests
}
Run Code Online (Sandbox Code Playgroud)
从一些问题中,我知道如果我们给-Pscalatest一个参数,它将并行运行测试。
但是我不确定如何使用 配置它maven-surefire-plugin,我尝试添加 -P,但这导致 JVM 无法启动:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-P</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?如果我们不能用 maven surefire 插件来做,是否可以只在测试中配置它?
我正在通过capybara-webkit驱动程序上的parallel_tests运行我的规范.我有以下ruby环境:
ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.4.2]
Run Code Online (Sandbox Code Playgroud)
在包含以下内容的gemset上运行rvm(截取for capybara,rails,rspec和parallel_tests以获得相关性.如果看到更大的gemset会有所帮助,请告诉我们):
*** LOCAL GEMS ***
...
capybara (1.1.2)
parallel_tests (0.8.12)
rails (3.2.11)
rspec (2.11.0)
Run Code Online (Sandbox Code Playgroud)
当我在一个进程上运行我的测试套装时rake spec,我的所有测试都会运行完成.但是,当通过parallel_tests运行时,会发生以下情况:
8 processes for 220 specs, ~ 27 specs per process
Run Code Online (Sandbox Code Playgroud)
之后这些流程最终会开始回归:
Finished in 11 minutes 15.76 seconds
Finished in 11 minutes 28.89 seconds
Run Code Online (Sandbox Code Playgroud)
但是,在前6个进程返回后,parallel_spec将无限期挂起,永不终止,并且永远不会为剩余的2个进程打印输出.
我在运行OS X Lion的MacBook Pro上使用2.4GHz Intel i7.
所以我的问题很简单:为什么它会挂起,我该如何调试它挂起的原因,以及如何阻止它挂起并允许parallel_tests运行完成?
几年前为 VisualStudio2010 提出了类似的问题,但从未在这里回答:
如何在 Visual Studio 2010 中并行化数据驱动的单元测试?
我希望这个功能现在可能存在于 VS2012 中。
我的情况和上面一样,我有一个数据驱动的登录测试,它为多个客户端运行相同的测试。
我通过在 ClassInitialize 和 TestInitialize 中触发线程,并在清理之前等待所有测试完成,尝试了不同的线程解决方案。我尝试过的任何方法都不适用于这些数据驱动的测试。
我担心尝试这与 MSTest 与 dd 测试的工作方式从根本上是错误的。基本上,我发现下一个数据集在 TestCleanup 完成之前不会运行,并且 TestCleanup 不会在没有完成测试并记录测试结果的情况下完成。所以基本上,在记录了之前的测试结果之前,不能开始下一个测试。真的吗?或者有没有办法使用 MSTest 框架并行化这些?
谢谢!
c# mstest data-driven-tests parallel-testing visual-studio-2012
我正在使用parallel_tests框架并行运行一堆 rspec 测试。在并行化测试之前,我将测试结果输出到一个 html 文件中,如下所示:
rspec --format html --out tmp/index.html <pattern>
Run Code Online (Sandbox Code Playgroud)
现在它看起来更像这样:
parallel:spec --format html --out tmp/index.html <pattern>
Run Code Online (Sandbox Code Playgroud)
然而,现在测试并行运行,每个测试都生成自己的 html 文件,并且由于它们都使用相同的路径 (tmp/index.html),最后一个完成的测试覆盖输出 html 文件,我只留下了那一项测试的报告。如何生成包含所有测试的汇总结果的单个 html 文件(这将是理想的)?如果这是不可能的,我如何将每个测试输出到它自己的输出 html 文件,这样它们就不会互相覆盖?
我尝试在 parallel_test 项目(ParallelTests::RSpec::RuntimeLogger、ParallelTests::RSpec::SummaryLogger 和 ParallelTests::RSpec::FailuresLogger)中使用内置记录器,但这些都只生成简单的文本文件而不是好的像 rspec 这样的 html 文件。我也在这里看到了这个问题,但我没有使用黄瓜,所以这并不适用于我。我尝试放入--format html --out tmp/report<%= ENV['TEST_ENV_NUMBER'] %>.html我的.rspec_parallel文件,但这没有任何效果。
我的问题是关于如何在 JUnit 5 测试类中并行运行。
例如,我有两个简单的测试类,它们代表两个独立的测试管道,它们应该并行运行。然而,课堂上的内部测试应该按顺序运行。
public class TestClass1 {
@Test
public void test1() {
System.out.println("Executing test 1 in Class 1");
System.out.println(Thread.currentThread().getId());
try {
Thread.sleep(5000);
Assert.assertTrue(false,"Assertion error in Test 1 Class 1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Test
public void test2() {
System.out.println("Executing test 2 in Class 1");
Assert.assertTrue(false,"Assertion error in Test 2 Class 1");
System.out.println(Thread.currentThread().getId());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class TestClass2 {
@Test
public void test2() {
System.out.println("Executing …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 rspec 和 Rails 6 进行并行测试。根据他们的文档,只需要添加 PARALLEL_WORKERS=15 ,其中 15 是工作人员的数量。但是,这适用于测试用例而不适用于 rspec。
有人找到了让它与 rspec 一起使用的解决方案吗?
https://edgeguides.rubyonrails.org/testing.html#parallel-testing