`
woody_420420
  • 浏览: 42060 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

让测试并行起来吧

    博客分类:
  • TDD
阅读更多
    一天又一天,随着我们不断增加测试代码,运行整个项目的测试耗时也越来越长, 2,30分钟成了家常便饭. 怎么样才能提高测试的速度,真正发挥持续集成的作用呢?并行测试!下面介绍两个我最近了解的比较cool的并行测试lib. 有这方面更好经验的同学,希望能给点意见.

    deep-test
    http://github.com/qxjit/deep-test/tree/master
    貌似出自ThoughtWorks同学们之手. 从readme里可以看出,这是一个十分强悍的并行测试库.以下两点功能挺诱人:
    1. 只需一行配置, 便可以为每个测试Agent自动生成测试数据库(从test库dump), Agent运行完毕,自动删除相应的数据库.
DeepTest::TestTask.new "task_name" do |t|
  t.listener = "DeepTest::Database::MysqlSetupListener"
end

    2. 并行测试不仅仅能在一台机器的不同进程运行,还可以进行分布式处理(使用druby),用多台机器来同时运行测试.
    一切看起来都十分好,不过,由于deep-test对rspec的版本依赖问题,我修改了很多地方,但还是没有在项目中跑起来. 以后空了再仔细研究. 有使用过的同学希望能够分享.

    parallel_specs
    http://github.com/grosser/parallel_specs/tree/master
    这是一个十分简单的plugin.也是我最终采用的.他的原理是使用Process.fork, 分配出一些子进程, 将所有的spec文件平均的分配到各个进程, 然后运行"script/spec"命令. 这种方式的好处就是没有任何额外的依赖. parallel_specs使用也十分简单:
    首先修改database.yml:
    test:
      adapter: mysql
      database: xxx_test<%= ENV['TEST_ENV_NUMBER'] %>
      username: root

    这个TEST_ENV_NUMBER是根据并行测试的进程数来指定的. 这里,注意的是,如果并行进程数是1的话, TEST_ENV_NUMBER是"". 行进程数是2的话, TEST_ENV_NUMBER是"2".
    接下来,就是为并行进程手动创建数据库, xxx_test, xxx_test2, xxx_test3......
    That's all~:)现在,我们就可以使用rake来调用并行测试任务
    
    rake spec:parallel[1]
    rake spec:parallel    #(default = 2)
    rake spec:parallel[3]
    ...

    下面是我在项目中实际测试的结果:(测试有320个*_spec.rb文件, 3429个examples)
并行测试进程数 测试耗时
11603 秒
2682 秒
3487 秒
4405 秒

    测试机器是扣肉双核,从结果可以很明显的看出,增加到2个并行测试进程对测试速度的提升十分明显. 由于只有两个物理运算单元,所以3,4...更多的并行对速度并没有太多的改进. 如果继续增加CPU的数量,测试速度还能得到更高的提升.
    不过,使用parallel_specs存在一个问题--CI上无法做覆盖率测试. 后来想干脆CI上分成两个project来跑,但似乎这种方法太土了,而且也没有必要使用parallel_specs了. 有待研究...
分享到:
评论
5 楼 gigix 2009-07-20  
woody_420420 写道
rainchen 写道
几时cucumber也能并发跑scenario就爽了,期待下。

有人在做这个事情--http://github.com/brynary/testjour/tree/master
写道

It parallelizes Cucumber runs over SSH and handles MySQL database management

这是假设数据库是服务器端唯一有状态的部件
如果不是的话,比如说如果还有个共享文件夹什么的,就SUI掉了
其实还是构建级的并发比较靠谱
4 楼 woody_420420 2009-07-20  
rainchen 写道
几时cucumber也能并发跑scenario就爽了,期待下。

有人在做这个事情--http://github.com/brynary/testjour/tree/master
写道

It parallelizes Cucumber runs over SSH and handles MySQL database management
3 楼 rainchen 2009-07-20  
有时为了保证测试环境和开发、生产的特性一致,减少非必要的环境差异问题发生,就放弃了sqlite+mem dir的组合 ,直接接用mysql来做testing,并发就真的很符合需求了。
几时cucumber也能并发跑scenario就爽了,期待下。
2 楼 woody_420420 2009-07-19  
是的。耗时主要在数据库访问上。
内存数据库,我倒真没想过用这个方案,不过貌似有不少额外的工作。
研究研究。谢谢提醒。
1 楼 night_stalker 2009-07-18  
我觉得测试里比较耗时的是数据库 …… 用内存数据库效果更好

相关推荐

    并行自动测试软件架构建模

    在现代自动测试系统领域,尤其是并行自动测试系统(ATS)中,软件架构的设计和构建是整个测试系统开发中的关键一环。并行测试系统的开发难度较大,主要因为测试过程的复杂化和多样化,以及测试任务的并行执行要求。...

    并行程序测试的关键技术研究

    华中科技大学博士论文,对并行测试的多种技术进行分析,条例清晰,便于大家理解和掌握。

    libudf_并行串行测试区别_libudf_

    《并行串行测试在LibUDF中的应用与差异》 在计算机科学和工程领域,尤其是在高性能计算(HPC)和数值模拟中,利用并行计算能力已经成为提升运算效率的关键手段。Fluent作为一款广泛使用的流体动力学仿真软件,其...

    [示例][PHP]Unit的并行测试PHP类库.zip

    并行测试技术是把并行技术引入到测试领域中所 形成的方法和技术。就是可以较好地完成同时测 试多个被测对象(UUTs)任务的一种先进测试方法 和技术。并行测试是建立在并行概念基础之上的。 并行测试 的核心是可以同时...

    并行flash FPGA读写测试,Verilog语言

    并行Flash FPGA读写测试是嵌入式系统设计中的一个重要环节,特别是在开发基于FPGA(Field-Programmable Gate Array)的系统时。Verilog是一种硬件描述语言,用于设计、验证和实现数字系统的逻辑功能。在本场景中,...

    ParaTestPHPUnit的并行测试库

    通过并行化执行,ParaTest 可以有效地减少整体的测试时间,加快开发迭代速度。 ParaTest 的核心功能是利用多进程或多线程来并发执行测试,它可以同时运行多个 PHPUnit 实例,每个实例处理一部分测试用例。这使得...

    PHPUnit的并行测试库.zip

    而“PHPUnit的并行测试库”则是一个扩展功能,它允许你利用多核处理器的能力,同时运行多个 PHPUnit 测试,从而显著提高测试的执行速度。 **并行测试的重要性** 在软件开发中,单元测试是确保代码质量的关键步骤,...

    fluent_fluent_fluentudf测试_fluentUDF并行_源码

    《Fluent FluentUDF并行测试与源码解析》 Fluent是一款强大的计算流体动力学(CFD)软件,广泛应用于工程领域的流体力学、热传递和化学反应等复杂问题的模拟。在进行大规模计算时,为了提高计算效率,往往需要利用...

    串口并行测试程序,适用于对串口与通讯设备和通讯测试

    串口并行测试程序是一种专为测试多个串行通信接口设计的应用软件,它允许用户同时对多个串口进行通讯测试,以确保设备之间的数据传输准确无误。在现代电子设备和自动化系统中,串口通信仍然是连接不同硬件设备的重要...

    mpi/omp 并行测试程序(fortran)

    mpi/omp 并行测试程序(fortran)编写的,已经在单机和工作站测试过

    Verigy 93000中直流参数的并行测试方法

    摘要:本文阐述了一种在Verigy 93000 上进行直流参数测试的测试方法,并与传统方法进行了比较分析,结果表明该方法在测试中能完全并行使用硬件资源,使测试时间有效降低。  1 引言  在当前SoC 快速发展及半导体...

    并行计算性能评测---并行计算相关理论

    并行计算性能评测是评估计算机系统在执行多任务或数据并行处理时效率的重要方法。在这一领域,Sun-Ni定理是其中的关键概念之一,它对于理解和优化并行计算系统的性能至关重要。本文将深入探讨并行计算的基本性能指标...

    人工蜂群算法在并行测试任务调度中的应用

    【测试任务调度】是并行测试的核心问题,涉及到如何在有限的测试资源(如测试设备、人员、时间等)下,合理安排测试任务的顺序和执行方式,以达到最小化测试时间、最大化资源利用率或优化其他性能指标的目标。...

    Unit的并行测试PHP类库.zip

    &lt;?... class ParaTestApplication extends Application { ...但每个被测对象内部测试过程还是按顺序测试的,因此说,这种并行测试方式对测试系统的测试性能和仪器利用率提高有限,其提升余地还很大

    TestNG系列教程并行执行测试Java开发Java经验技

    TestNG是一款功能强大的Java测试框架,它在JUnit和NUnit的基础上进行了扩展,提供了更丰富的功能,特别是对于并行测试执行的支持。本系列教程主要聚焦于如何利用TestNG进行并行测试,这对于提升测试效率,尤其是在大...

Global site tag (gtag.js) - Google Analytics