`
顽石OK07
  • 浏览: 83853 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

悄然轻松构建和运转多线程的单元测试 转载

阅读更多

随着多核处置器成为主流,开发并行顺序随之成为一种肯定要求。但是我们都知晓并行顺序存在着很大的不确定性,这使得开发和测试并行顺序有必须的难度,因而关于并行顺序的单元测试变得尤为首要。但是,创立多线程的单元测试并不容易,测试须要思索测试线程间的同步,数据共享等。针对 Java 并行顺序的测试,结合扩展 JUnit 的多线程测试工具,本文引见了一种在集成开发环境中,创立契合用户要求的多线程单元测试用例的完壁流程,使得用户只用关心测试本身的逻辑和后果,而不用去明白测试用例并行执行的琐碎详细,从而将大大简约并行顺序员运转并行测试用例,提高并行顺序的开发效率和质量。
  背景
并行顺序
  并行顺序是指控制计算机系统中两个或多个辨别包含一系列指令序列的操作同时执行的顺序,是对处置机上多个操作、或许职务同时执行的一种“谋划”。处置机在运转并行顺序时将同时任务于同一顺序的不一样方面,同时控制和运转辨别包含一系列指令的两个或多个操作。并行顺序设计的首要目标是节省大型和庞杂疑问的处置时间。
  并行顺序设计技术的成长已有 20 多年的历史了,高功用并行计算机系统正在进入越来越多的使用范围。但是与硬件的成长相比,并行软件的成长则显得有些滞后,影响了硬件效率的发扬,限定了并行机系统的普遍使用,因而并行顺序的开发与揣摩也越来越多深化到如今软件的开发流程中。相比拟串行顺序的开发,现在并行顺序的开发与揣摩存在许多的难处,其中首要是由于缺乏有效的并行顺序设计办法和工具,使得编写正确并行顺序、明白并行顺序的行为、调试和优化并行顺序的功用都很难处。
单元测试
  单元测试是对顺序代码单元举行函数级的测试,是完成对最小软件设计单元的验证任务。
  单元测试贯穿于软件开发的整个流程中,关于保证软件质量的首要性不言而喻。作为一种白盒测试,单元测试许多时分是与开发同时举行的。关于单元测试的工具也许多,其中包含著名的 xUnit 系列。本文将触及到的多线程单元测试工具就是从 Java 单元测试工具 JUnit 中扩展而来的。

 

扩展 JUnit 完成多线程单元测试
  关于 Java 来说,JUnit 是备受开发人员喜好的单元测试工具。它甚至还影响了其他言语的测试框架。这点,我们从不单一的 xUnit 框架就能够看出来。随着多核时代的到来,开发人员将须要举行越来越多的并行顺序测试。得益于 JUnit 的可扩展性,我们能够运用 Annotation 让 JUnit 更好地支持并行测试。
  得益于 JUnit 良好的可扩展性,扩展 JUnit 完成多线程单元测试这里首要是议决生成完成多线程测试流程中所需 Annotation 的定义并完成运转自定义测试逻辑来完成的。
  关于扩展 JUnit 完成多线程单元测试,我们在另一篇文章《扩展 JUnit 测试并行顺序》里有专门的引见,下面我们将首要针对这一扩展标明如何在集成开发环境中创立和运转测试用例。
  在集成开发环境中装置并行单元测试插件
  在运用集成开发环境创立多线程的测试用例之前,最先须要在环境中装置扩展 JUnit 的插件,在本文中我们首要引见名为 Unit Test for Multi-Thread 的扩展 JUnit 在集成开发环境 Eclipse 下的装置与运用。
  Unit Test for Multi-Thread 是 IBM 多核软件开发工具 Multicore SDK 下开发的一款用于并行开发中构建多线程测试用例以此来对代码举行单元测试的插件,其是随同 Multicore SDK 一同揭晓的,我们能够议决 eclipse 插件装置的方式来装置它。须要留意的是 Unit Test for Multi-Thread 当前仅支持 Eclipse3.5.x ,其装置流程简述如下:
  最先运转开发工具 Eclipse3.5.x,在翻开界面上点击‘Help’>‘Install New Software...’>‘Add... ’,然后会跳出一个‘Add Site’对话框,在其上面的‘Location’文本框里添加将要装置插件的地址:http://awwebx04.alphaworks.ibm.com/ettktechnologies/updates,点击‘OK’,等候加载,挑选‘Multicore SDK’下的‘Unit Test for Multi-Thread’,点击‘Next’举行装置即可。

 

集成开发环境中创立测试用例
  下面将引见在集成开发环境 Eclipse 中创立多线程测试用例的流程,最先须要装置上文提到的 Eclipse 插件 Unit Test For Multi-Thread。
  详细将分为下面三个步骤来引见:测试环境配置、测试用例生成导游、测试用例的运转和后果搜集。
  测试环境配置
  Unit Test for Multi-Thread 装置好之后,还须要一些容易的配置才干运用,详细步骤能够议决 Eclipse 环境里对项目标 Build Path 下添加 add libraries 配置完成,详细如下所示:
第一步 : 添加 JUnit 到项目 Build Path 中,运用版本为 JUnit 4.5 以上

图 1:右键单击项目,在 Build Path 菜单下挑选 Add Libraries
悄然松松构建和运转多线程的单元测试[多图]图片1
  检查原图(大图)

图 2:挑选 JUnit,单击 Next 进入下一页面
悄然松松构建和运转多线程的单元测试[多图]图片2
  检查原图(大图)

图 3:选定 JUnit4,单击完成
悄然松松构建和运转多线程的单元测试[多图]图片3
  检查原图(大图)

第二步:类似地,添加 Unit Test for Multi-Thread library 到项目 Build Path 中

图 4: 选定 Unit Test for Multi-Thread,单击 Next 完成添加流程
悄然松松构建和运转多线程的单元测试[多图]图片4

 

 


图 5:配置完成后的页面
悄然松松构建和运转多线程的单元测试[多图]图片5
  测试用例生成导游
  Unit Test for Multi-Thread 为用户提供了测试用例生成导游,议决此导游,用户能够很简约地构建自己的多线程测试用例,详细运用流程如下:
  1. 在 Eclipse 中,挑选 File -> New -> Others,选定图中所示:Unit Test for Multi-Thread, 双击进入下一个界面
图 6:测试用例生成导游界面
悄然松松构建和运转多线程的单元测试[多图]图片6
  检查原图(大图)
  2. 将你须要测试的顺序类名填入对应位置,图中例子类名是 demo.CoverageDemo。点击 next,进入下一界面
图 7: 运用生成测试用例面板创立新的测试用例
悄然松松构建和运转多线程的单元测试[多图]图片7
  检查原图(大图)
  3. 在 Methods List 栏目下面挑选须要举行单元测试的办法;Threaded 栏目下面确定能不能运用多线程的方式举行测试,选中为生成多线程,不选则为生成单线程测试用例;在标题为 Thread Numbers for launching the Threaded methods 的文本框中能够配置测试将运用的线程数目列表,图中所示,该单元测试会辨别用 1、2、4、8、16、32 和 64 个线程执行须要并行测试的办法。
图 8:挑选须要举行多线程测试的办法和设定测试线程数
悄然松松构建和运转多线程的单元测试[多图]图片8

 

Unit Test for Multi-Thread 将依据配置导游自动生成测试用例的完壁代码框架,用户可依据被测试代码直接在此框架下添加所需测试的内容,以此提高编写测试用例的效率。
自动生成的测试用例方式如下:
  
 package test; 
 
import static  org.junit.Assert.*; 
 
import  org.amino.util.msdk.unit.Parallelized; 
import  org.amino.util.msdk.unit.annotation.CheckFor; 
import  org.amino.util.msdk.unit.annotation.InitFor; 
import  org.amino.util.msdk.unit.annotation.ParallelSetting; 
import  org.amino.util.msdk.unit.annotation.Threaded; 
import  org.junit.After; 
import org.junit.AfterClass; 
import  org.junit.Before; 
import org.junit.BeforeClass; 
import  org.junit.runner.RunWith; 
 
@RunWith(Parallelized.class) 
@ParallelSetting(threadNumber  = { 1, 2, 4, 8, 16, 32, 64 }) 
 
public class  TestUnitExtensionSample1 { 
 
  @BeforeClass 
  public static  void setUpBeforeClass() throws Exception {} 
 
  @AfterClass 
  public static void tearDownAfterClass() throws Exception {} 
 
   @Before 
  public void setUp() throws Exception {} 
 
  @After 
  public void tearDown() throws Exception {} 
 
   @InitFor("testAdd") 
  public void initfortestAdd(int threadNum){} 
 
  @CheckFor("testAdd") 
  public void checkfortestAdd(int threadNum){}  
 
  @Threaded 
  public void testAdd(int rank, int threadNum) { 
  } 
 
} 

 

测试用例的运转和后果搜集
  Unit Test For Multi-Thread 从 JUnit 扩展而来,保管了 JUnit 运转和后果显示的方式,其运转方式和后果显示如下所示:
图 9:运转 Unit Test For Multi-Thread
悄然松松构建和运转多线程的单元测试[多图]图片9
  检查原图(大图)
  和运转规范 JUnit 一样,运转 Unit Test for Multi-Thread 很容易,
图 10:测试后果无异常
悄然松松构建和运转多线程的单元测试[多图]图片10
  测试议决时将会以绿色标识,
图 11:测试后果存存在 Errors 或 Failures
悄然松松构建和运转多线程的单元测试[多图]图片11
  测试没有完全议决时将会以红色劝诫提示,
图 12:测试报出的失败信息
悄然松松构建和运转多线程的单元测试[多图]图片12
  并生成错误或失败报告给出,全体作风和规范 JUnit 一致,但是其具有独有的生成多线程的测试用例和单元测试的内容,关于熟识 JUnit 的用户来说运用此来举行并行顺序的单元测试将会很简约。
  结论
  随着多核处置器成为主流,并发顺序越来越多的要求运用到软件开发和揣摩中,开发人员不可防止地须要开发和测试并行顺序,本文引见了一种在集成开发环境 Eclipse 中,创立契合用户要求的多线程单元测试用例的流程,这样开发者能够只关心测试本身的逻辑和后果,而不用去明白测试用例并行执行的琐碎详细,从而大大降低开发人员手工创立线程和同步来举行测试的繁琐任务,提高开发效率。

 

 

 

分享到:
评论

相关推荐

    多线程测试(是多线程的测试,对学习多线程的朋友有用)

    在编程领域,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。...通过深入理解C#的多线程机制,并利用各种测试工具和方法,开发者可以构建出强大且可靠的多线程应用程序。

    WEBAPI多线程并发测试工具

    **标题与描述解析** ...以上是基于给定信息生成的API测试和多线程并发测试相关的详细知识点,涵盖了从理论基础到实践操作的多个层面。对于开发和维护高质量的Web API服务,这些知识都是必不可少的。

    有关Junit和多线程测试的问题

    它提供了额外的功能,帮助开发者有效地编写和执行多线程单元测试,以确保在并发环境下代码的正确性和稳定性。 首先,GroboUtils为JUnit提供了一种名为`ThreadControl`的接口,它允许开发者暂停、恢复或终止测试线程...

    多线程性能测试工具(服务器压力测试)

    在IT行业中,多线程性能测试和服务器压力测试是至关重要的环节,特别是在开发高并发、高性能的应用系统时。本文将详细解析如何利用“多线程性能测试工具”进行服务器压力测试,以及Refresher.exe这个可能的测试工具...

    QT+OPENGL 多线程测试

    QT+OpenGL多线程测试是将高性能图形渲染与Qt框架结合的一种技术应用,它通过利用多线程的优势来提升程序的运行效率。在本项目中,开发者采用了2D纹理贴图的方法,使得图像处理和显示更为高效。接下来,我们将深入...

    delphi7 多线程测试(40个线程)

    在编程领域,多线程是一种常见且强大的技术,它允许程序同时执行多个任务,从而提高效率和响应性。本主题聚焦于Delphi 7中实现的多线程测试,特别是涉及40个并发线程的情况。Delphi是Embarcadero开发的一款集成开发...

    VB单元线程模型实现多线程

    本项目"VB单元线程模型实现多线程"提供了一个简单的测试工程,帮助开发者了解如何在VB中创建和管理线程。 在VB中实现多线程主要依赖于`System.Threading`命名空间,这个命名空间包含了一些关键类,如`Thread`和`...

    Java多线程Junit测试GroboUtils-5.zip

    总的来说,GroboUtils-5.zip提供的工具集对Java开发者来说是极有价值的,它简化了多线程环境下单元测试的复杂性,提高了测试的可靠性和效率。理解和熟练使用其中的工具,将有助于提升你的Java多线程编程和测试能力。

    易语言多线程测试代理

    在IT行业中,多线程是一种...通过使用多线程,开发者可以构建一个高效、灵活的代理获取和测试系统,这在需要大量网络请求的应用场景中是非常有用的。理解并掌握这些知识点,对于提升编程技能和解决实际问题都至关重要。

    C#多线程互斥实例 多线程获取同一变量

    在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统...

    多线程测试组件groboutils

    groboutils的核心特性在于其对并发和多线程场景的深入理解和处理。在多线程环境中,线程间的交互可能导致复杂的并发问题,如数据竞争、死锁和活锁等。groboutils通过模拟多个线程并行执行,帮助开发者检测这些难以...

    libevent 多线程 HTTP post服务器

    7. **测试与调试**:"libeventTest"可能包含的测试代码用于验证服务器的正确性和性能,包括单元测试、集成测试和压力测试等。 通过学习这个主题,开发者可以深入理解如何利用libevent构建高并发、高性能的服务器,...

    基于LabVIEW 测试系统的多线程编程模拟

    通过对测试任务的有效分解,并利用队列技术实现多线程编程,可以在不增加硬件成本的前提下显著提高测试系统的实时性和效率。这对于那些需要处理大量数据和复杂运算的应用场景尤为重要。未来的研究可以进一步探索如何...

    .NET多线程实例

    "如何创建和删除多层文件夹"这个话题涵盖了文件系统操作和多线程的结合。创建和删除文件夹可能需要在多个线程间进行协调,以避免文件系统冲突。使用Mutex或Locking可以帮助确保线程安全。 "命名空间"在多线程编程中...

    C#多线程读写sqlite

    当多线程环境对SQLite进行读写操作时,可能会引发数据竞争和并发问题,因此必须采取适当的同步策略来确保数据的一致性和完整性。 标题"**C#多线程读写sqlite**"涉及的主要知识点包括: 1. **多线程编程**:C#中的`...

    C++面向对象多线程编程

    《C++面向对象多线程编程》共分13章,全面讲解构建多线程架构与增量多线程编程技术。第1章介绍了用于构建面向对象程序的不同类型C++组件,以及如何使用这些组件来构建多线程架构。第2、3、4章简要介绍进程、线程、多...

    基于mongoose实现Http Server(多线程)

    2. **线程同步**:由于多线程环境中可能存在共享资源,因此需要使用互斥锁(mutex)、条件变量等机制来确保数据的一致性和避免竞态条件。 3. **请求分发**:服务器接收到请求后,需要将它们分发到不同的线程进行...

    delphi多线程调用dll

    "ActionTest.exe"和"SAMPLE_DM"可能分别是一个测试应用和示例数据模块,用于演示如何在多线程环境中调用DLL。"delphi多线程调用dll.txt"可能包含更详细的步骤、注意事项或示例代码。 综上所述,Delphi多线程调用DLL...

Global site tag (gtag.js) - Google Analytics