测试多线程软件并发冲突的方法技术

技术编号:2848450 阅读:321 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种测试多线程软件并发冲突的方法,包括以下步骤:在测试逻辑中调用待测试的应用程序接口前插入同步申请点;开始运行至少两个测试线程;所述测试线程运行到同步申请点时,发出同步申请;判断是否接受所述测试线程的同步申请,如果否,继续执行所述发出同步申请的测试线程;如果是,则若其他测试线程并未都处于等待状态,将所述发出同步申请的测试线程置于等待状态;若当前运行中的其他测试线程都处于等待状态,则所有的所述测试线程继续执行;进行所述测试线程的并发冲突测试。本发明专利技术有针对性地对多线程并发冲突进行测试,有效缩短了并发测试的周期,对提高并发测试效率和测试质量有显著的效果。

【技术实现步骤摘要】

本专利技术涉及软件测试领域,尤其涉及一种。
技术介绍
目前大量的应用软件采用多线程技术,这样的应用程序可以更好地利用系统资源。多线程技术的主要优势在于充分利用了CPU(Central Process Unit,中央处理器)的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得软件的整体运行效率得到较大提高,同时增强了应用软件的灵活性。但是,多线程技术在增强软件功能的同时也带来了设计和测试上的复杂性。由于多线程软件中API(Application Program Interface,应用程序接口)函数的实现体会对共享数据进行互斥保护,当彼此的互斥保护逻辑出现错误时就会产生并发冲突。因此,应用多线程技术的软件通常总是当程序同时调用API接口时,发生并发冲突。在测试中,因为多线程并发冲突造成的错误,从表象上看,基本上都是无规律的重现,而且难以定位。现有技术中,对应用软件进行测试的常用方法是长时间的压力测试,以促使多线程并发冲突出现。而针对API接口进行的测试,主要是通过启动多个测试线程频繁调用可能出现并发冲突的API接口,来发现并发冲突问题。现有的测试方法无法主动制造最有可能出现多线程并发冲突的环境,可能出现并发冲突的API接口在各个线程中的调用时机是不可预测的,只能在操作系统对多线程进行调度时恰巧出现同时调用API接口时才有可能对并发冲突问题进行测试,而何时出现这种机会是测试人员和测试工具无法控制的。这样的测试方法相当的盲目,测试效率很低,测试质量无法保证。
技术实现思路
本专利技术要解决的技术问题是现有技术无法控制对API接口的同时调用。本专利技术所述包括以下步骤a)在测试逻辑中调用待测试的应用程序接口前插入同步申请点;b)开始运行至少两个测试线程,所述测试线程中执行所述测试逻辑;c)所述测试线程运行到同步申请点时,发出同步申请;d)判断是否接受所述测试线程的同步申请,如果否,继续执行所述发出同步申请的测试线程;如果是,执行步骤e);e)判断是否当前运行的除所述发出同步申请的测试线程外的其他测试线程都处于等待状态,如果否,将所述发出同步申请的测试线程置于等待状态;如果是,则所有的所述测试线程继续执行;f)进行所述测试线程的并发冲突测试。优选地,所述步骤e)与步骤f)之间包括所述发出同步申请的线程提示操作系统进行线程切换。优选地,所述步骤a)与步骤b)之间包括设置运行线程记录,在运行线程记录中存储当前正在运行的测试线程的线程标识;所述步骤b)与步骤c)之间包括bc1)在运行线程记录中增加所述测试线程。优选地,所述步骤bc1)之后包括bc2)所述测试线程准备测试环境;bc3)所述测试线程开始执行其测试逻辑;所述步骤f)之后还包括 g)当所述测试线程执行完其测试逻辑后,恢复测试环境。优选地,所述步骤g)之后还包括h)判断是否接到该测试线程的退出指令,如果是,执行步骤i);如果否,转步骤bc2);i)从运行线程记录中删除该测试线程;判断是否当前运行中的其他所述测试线程都处于等待状态,如果是,令其他所述测试线程继续执行,该测试线程退出;如果否,则该测试线程退出。优选地,在所述测试线程第一次执行所述测试逻辑时统计所述测试逻辑中同步申请点的数量。优选地,所述步骤a)与步骤b)之间还包括建立所调用的应用程序接口与所述同步申请之间的对应关系。优选地,所述测试线程执行相同的测试逻辑,所述测试逻辑中调用所有待测试的应用程序接口。优选地,步骤d)所述判断是否接受同步申请的条件为相同同步申请的数量不超过(m-1)除以n所得的整数部分时,接受所述同步申请;其中m为正在运行的所述测试线程的总数,n为当前统计所得的所有所述测试逻辑中同步申请点数量的最大值。优选地,不同的所述测试逻辑中调用不同的待测试应用程序接口;步骤d)所述判断是否接受同步申请的条件为接受所有的同步申请。本专利技术通过在测试逻辑中调用API接口前进行同步申请,使各个线程中的API接口被同时调用,从而对有针对性地对多线程并发冲突进行测试,有效缩短了并发测试的周期,对提高并发测试效率和测试质量有显著的效果。附图说明图1所示为应用本专利技术所述方法的两个测试线程的测试逻辑示意图; 图2所示为本专利技术所述测试方法的流程图;图3所示为本专利技术中测试线程的运行流程图;图4所示为本专利技术第一个实施例的测试线程及测试逻辑示意图;图5所示为本专利技术第二个实施例的测试线程及测试逻辑示意图;图6所示为应用本专利技术的测试程序的结构图;图7所示为图6中测试程序中线程类Thread中Svc()函数的流程图。具体实施例方式以下以启动两个测试线程的测试程序为例,说明本专利技术的测试逻辑。图1所示为应用本专利技术所述方法的两个测试线程的测试逻辑。第1个测试线程中要对第1个API接口、第2个API接口进行调用,第2个测试线程中要对第3个API接口、第4个API接口进行调用。假设需要对每一个API接口调用进行并发冲突测试,则在上述4个对API接口的调用前插入同步申请点。当各个测试线程执行到同步申请点时,会向测试程序发出同步申请。例如,测试程序在接受第1个测试线程的同步申请后,令第1个测试线程处于等待状态,直到接受第2个测试线程发出的同步申请后,再同时唤醒两个测试线程,令其继续执行。由于同步申请点后每个测试线程都调用对应的API接口,这样通过同步申请点,测试程序即可实现两个测试线程对两个API接口的同时调用,在本文中称之为一次同步。从理论上讲,每个测试线程在被唤醒之后的API接口调用是最有可能同步执行的,特别是在多CPU的机器上。这样每次同步都可以制造并发冲突的机会。在测试程序中,可以启动更多的测试线程,每个测试线程中执行的测试逻辑可以相同,也可以不同。同时,测试程序接受测试线程同步申请的条件可以根据测试的具体内容设置。在最简单的实施例中,可以设置为接受所有的同步申请。还可以建立所调用的API接口与发出同步申请的对应关系,例如令图1中的第1个测试线程在调用第2个API接口前发出的同步申请中包括此同步申请为第2个同步申请的信息,则测试程序可以区分出每个同步申请后调用的是哪个API接口,这样如果只想对不同API接口的并发冲突进行测试,可设置接受同步申请的条件为该同步申请与本次同步过程中其他测试线程已被接受的同步申请不同,换言之,该测试线程同步申请后所调用的API接口,与其他处于等待状态的测试线程即将调用的API接口不同;若只希望测试相同API接口的并发冲突,则可设置接受同步申请的条件为该同步申请与本次同步过程中其他测试线程已被接受的同步申请相同。图2所示为本专利技术所述测试方法的流程图。在步骤S210,在测试逻辑中待测试的API接口前插入同步申请点;在步骤S220,测试程序启动至少两个执行所述测试逻辑的测试线程;在步骤S230,测试线程执行到同步申请点时,向测试程序发出同步申请;在步骤S240,测试程序根据设定的条件判断是否接受该测试线程的同步申请;如果接受,执行步骤S250;如果不接受,执行步骤S260,该发出同步申请的测试线程继续执行;在步骤S260,测试程序判断是否当前运行中的除所述发出同步申请的线程外的其他测试线程都处于等待状态,如果否,则执行步骤S270,将该发出同步申请的测试线程置于等待状态;如果是,则执行步骤S2本文档来自技高网...

【技术保护点】
一种测试多线程软件并发冲突的方法,其特征在于,包括以下步骤:a)在测试逻辑中调用待测试的应用程序接口前插入同步申请点;b)开始运行至少两个测试线程,所述测试线程中执行所述测试逻辑;c)所述测试线程运行到同步申请点时, 发出同步申请;d)判断是否接受所述测试线程的同步申请,如果否,继续执行所述发出同步申请的测试线程;如果是,执行步骤e);e)判断是否当前运行的除所述发出同步申请的测试线程外的其他测试线程都处于等待状态,如果否,将所述发出同步 申请的测试线程置于等待状态;如果是,则所有的所述测试线程继续执行;f)进行所述测试线程的并发冲突测试。

【技术特征摘要】
1.一种测试多线程软件并发冲突的方法,其特征在于,包括以下步骤a)在测试逻辑中调用待测试的应用程序接口前插入同步申请点;b)开始运行至少两个测试线程,所述测试线程中执行所述测试逻辑;c)所述测试线程运行到同步申请点时,发出同步申请;d)判断是否接受所述测试线程的同步申请,如果否,继续执行所述发出同步申请的测试线程;如果是,执行步骤e);e)判断是否当前运行的除所述发出同步申请的测试线程外的其他测试线程都处于等待状态,如果否,将所述发出同步申请的测试线程置于等待状态;如果是,则所有的所述测试线程继续执行;f)进行所述测试线程的并发冲突测试。2.按照权利要求1所述测试多线程软件并发冲突的方法,其特征在于,所述步骤e)与步骤f)之间包括所述发出同步申请的线程提示操作系统进行线程切换。3.按照权利要求2所述测试多线程软件并发冲突的方法,其特征在于,所述步骤a)与步骤b)之间包括设置运行线程记录,在运行线程记录中存储当前正在运行的测试线程的线程标识;所述步骤b)与步骤c)之间包括bc1)在运行线程记录中增加所述测试线程。4.按照权利要求3所述测试多线程软件并发冲突的方法,其特征在于,所述步骤bc1)之后包括bc2)所述测试线程准备测试环境;bc3)所述测试线程开始执行其测试逻辑;所述步骤f)之后还包括g)当所述测试线程执行完其测试逻辑后,恢复测试环境。5.按照权利要求4所述测试多线...

【专利技术属性】
技术研发人员:韩霆军
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1