CN101937387B - 一种测试参数的生成方法和系统 - Google Patents
一种测试参数的生成方法和系统 Download PDFInfo
- Publication number
- CN101937387B CN101937387B CN200910151312.1A CN200910151312A CN101937387B CN 101937387 B CN101937387 B CN 101937387B CN 200910151312 A CN200910151312 A CN 200910151312A CN 101937387 B CN101937387 B CN 101937387B
- Authority
- CN
- China
- Prior art keywords
- parameter
- array
- queue
- shared drive
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 238000012360 testing method Methods 0.000 title claims abstract description 47
- 238000005516 engineering process Methods 0.000 claims abstract description 18
- 230000015572 biosynthetic process Effects 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 8
- 230000007717 exclusion Effects 0.000 claims description 5
- 230000000153 supplemental effect Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 8
- 238000011056 performance test Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种测试参数的生成方法和系统,包括:为用户统一设置的共享内存;从数据文件中读取全部参数,加载入共享内存;若需要进行随机抽取处理,每个用户通过互斥量MUTEX技术对共享内存中的参数进行顺序但不重复的读取,作为测试参数。本发明提供的测试参数生成方法,在多进程、多线程并发环境下实现参数取值的唯一、互斥、随机等特性,解决资源锁定和共享的问题。
Description
技术领域
本发明涉及计算机性能测试和性能评估技术,特别是指一种唯一和互斥参数的生成方法和系统。
背景技术
目前软件性能测试越来越受到重视,性能测试中模拟的业务压力如何尽可能地贴近软件实际负载及满足软件的业务逻辑,是测试人员需要重点关注和较难实现的地方。
软件性能测试开发过程中最重要的工作之一就是设计循环运行的测试代码中需要不断变化的参数,例如业务受理、搜索关键词、电话充值等。现有的商业性能测试工具均把参数功能作为重要功能之一,包括HP LoadRunner(简称LR)、Rational Performance Tester(简称RPT)、一般能提供内置的日期/虚拟用户ID/迭代次数等参数功能,并提供加载文件方式的用户自定义参数,文件加载参数的取值策略包括顺序、随机、唯一,基本能满足一般的性能测试参数化要求。
然而,对于需要长时间运行、参数需求数量大、并发用户数大并有唯一性、互斥性、随机性等特殊数据要求的应用情况,目前的商用性能测试软件在参数功能上仍存在缺陷。LR的唯一参数功能(unique)要预先指定每个并发用户分配的参数数据段(block)大小,无法适应长时间测试迭代次数未知的情况,在并发用户不断增加的测试场景(压力测试)中,也容易发生系统错误造成整个测试场景终止。RPT文件加载类型参数的取值方式则只有顺序取值一种。
另外参数的唯一性和随机性要求常常是需要同时满足,在软件实际运行中参数的取值通常是随机的,参数取值的随机性对软件性能测试的质量起关键作用,因为数据的顺序访问和随机访问对软件系统产生的压力有数量级的差异。目前的测试工具均未能提供同时满足参数取值的唯一性和随机性的功能。
在电信软件系统的性能测试中,常常需要唯一性、互斥性使用的参数,例如电信营业系统的电话开通功能,号码的选取需要保证唯一性,不能对同一个号码做重复的开通操作。在电信生产环境中做性能测试时,受管理限制只能对小批量的样本对象进行循环方式的测试,对某些业务例如充值操作,在对一个用户进行充值尚未完成的时候,不允许对该用户再次发出充值请求,即除了获取参数有唯一性需求外,对参数的使用还有互斥性需求。
因此对电信软件系统等的性能测试均需要使用并发方式来发送业务请求,并且并发方式下参数的唯一性、随机性、互斥性需要在多进程、多线程的环境中实现。
发明内容
有鉴于此,本发明的目的在于提出一种基于共享内存和互斥量技术的性能测试参数生成方法和系统,解决在目前的测试工具下参数唯一性、互斥性的问题。
基于上述目的本发明提供的一种测试参数的生成方法,包括:
为测试参数设置统一的共享内存;
从数据文件中读取全部参数,加载入共享内存;
若需要进行随机抽取处理,每个用户通过互斥量MUTEX技术对共享内存中的参数进行顺序但不重复的读取,作为测试参数。
可选的,该方法所述从数据文件中读取全部参数,加载入共享内存后进一步包括:通过洗牌算法将所述全部参数随机打散。
可选的,该方法所述洗牌算法包括:
(1)将全部参数组成为数组,设置当前数组下标为0;
(2)生成一个适应较大长度的数组的随机数,用加载到共享内存的数组长度取余,用于在该数组内随机选取一个数组下标;
(3)当前数组下标与随机选取的数组下标所指向的数组项做值交换;
(4)当前数组下标往后移一位,重复执行(2)-(3)操作,直至移至数组最末,洗牌结束。
可选的,该方法所述每个并发用户通过互斥量技术对共享内存中的参数进行顺序但不重复的读取过程包括:
把特定唯一参数的当前值及用当前值作为下标所指向的共享数组元素通过API赋给输出参数;
B、把特定唯一参数的当前值递增1。
可选的,该方法在每个用户通过互斥量MUTEX技术对共享内存中的参数进行顺序但不重复的读取后还包括:在参数可选值数组上应用先进先出FIFO和循环折返队列算法,把在使用参数值保存在队列中,使用完毕后退出队列。
可选的,该方法所述在参数可选值数组上应用先进先出FIFO和循环折返队列算法,把在使用参数值保存在队列中,使用完毕后退出队列步骤包括:
A、把参数指向的数据数组当为先进先出FIFO的队列,队列头和队列尾初始位置均为数组起始;
B、参数获取方法被调用时,返回队列尾指向的值,队列尾加一,当队列尾移至数组最后时,将折返至数组起始;
C、参数释放方法被调用时,把释放的值赋给队列头指向的数组位置,队列头加一;
D、若队列尾折返递增后到达队列头,则当前全部参数数据均被使用且未释放,后续的参数使用调用将处于等待状态,直至参数释放方法被调用为止。
可选的,该方法所述全部参数用数组方式保存。
基于上述目的,在上述方法的基础上本发明还提供了一种测试参数的生成系统,包括:
用于统一存储测试参数的共享内存;
数据读取单元,用于从数据文件中读取全部参数,加载入共享内存;
测试参数生成单元,用于通过互斥量MUTEX技术对共享内存中的参数进行顺序但不重复的读取,作为测试参数发送给每个并发用户。
可选的,该系统还包括参数随机处理单元,用于对加载入共享内存的全部参数通过洗牌算法随机打散。
可选的,该系统还包括互斥和循环处理单元,用于在参数可选值数组上应用先进先出FIFO和循环折返队列算法,把在使用参数值保存在队列中,使用完毕后退出队列。
从上面所述可以看出,本发明提供的测试参数生成方法和系统,在多进程、多线程并发环境下实现参数取值的唯一、互斥、随机等特性,解决资源锁定和共享的问题,并能在目前应用最广的性能测试工具HP LoadRunner 8.1(LR)上使用。
本发明相对于现有方法,具有以下优点和效果:
本发明解决了目前软件性能测试商业工具中无法生成大规模唯一参数值、无法同时满足参数取值唯一性、随机性、互斥性的问题;
本发明使用了各类操作系统中均提供的共享内存和互斥量技术,算法简单,计算机资源开销小,采用标准C编程和微软WIN32系统调用平台,略加调整便可移植到其他操作系统。
附图说明
图1为本发明实施例系统结构示意图;
图2为本发明实施例测试参数的生成方法流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
本发明提供的测试参数生成方法主要包括:为测试参数设置统一的共享内存;从数据文件中读取全部参数,加载入到共享内存;若需要进行随机抽取处理,每个用户通过互斥量MUTEX技术对共享内存中的参数进行顺序但不重复的读取,读取出的参数作为测试参数。
另外,本发明还可以根据不同需要进一步包括:
若参数取值需要随机性,则测试参数使用前还进一步先进行洗牌方式的随机打散处理。
若参数取值需要互斥和循环方式使用,则在参数可选值数组上应用先进先出(FIFO)和循环折返队列算法,把在使用参数值保存在队列中,使用完毕后退出队列,保证在使用的参数取值的互斥属性。
本发明实施例的逻辑组成如图1所示,本实施例中MUTEX句柄和共享参数均用数组方式保存,以实现同时使用多个唯一参数的功能。多进程间共享的唯一参数保存于共享内存中,共享唯一参数数组为数据结构体数组,数据结构体包括如下的数据项:
●唯一参数ID:并行使用的多个共享参数的唯一ID,例如多个省份的充值卡数据中的某省份充值卡数据;
●当前值:共享参数的当前整数值,可作为关联的外部加载数据数组的下标;
●最大值:根据业务逻辑设置的共享参数的最大值,或关联的外部数据的记录个数;
●外部加载数据存储位置:全局性的共享缓存中,当前共享参数所关联的外部数据数组的起始位置;
●先进先出(FIFO)队列头和队列尾下标:共享参数需要互斥性循环使用时,在关联的外部数据数组上实现先进先出(FIFO)队列已保存在使用中的参数数值,队列头和队列尾下标用于标注队列当前位置。
假设电信运营商对某地的充值系统做性能测试,使用测试工具对该系统进行大并发充值请求测试,每次充值请求中均需要指定一个未被使用的充值卡ID。
通过本专利实现性能测试要求的步骤,参见图2所示,包括如下步骤:
事先为测试参数统一设置共享内存数据结构体数组及外部数据缓存。
步骤201,在测试开始阶段,从数据文件中读取全部充值卡ID数据,加载入共享内存。
步骤202,若需要进行随机抽取处理,可以选择使用洗牌算法将充值卡ID数据随机打散。
洗牌算法举例如下:
(1)将所述全部充值卡ID数据组成为数组,设置当前数组下标为0;
(2)生成一个最大为2的32次方随机数(适应较大长度的数组),用加载到共享内存的数组长度取余,用于在该数组内随机选取一个数组下标;
(3)当前数组下标与随机选取的数组下标所指向的数组项做值交换;
(4)当前数组下标往后移一位,重复执行(2)-(3)操作,直至移至数组最末,洗牌结束。
步骤203,每个并发用户通过互斥量(MUTEX)技术对共享内存中的数组下标、加载的充值卡ID数据进行顺序但不重复的读取,作为充值请求中的参数,实现测试要求的并发、随机、唯一的参数取值要求。
A、把特定唯一参数的当前值、及用当前值作为下标所指向的共享数组元素通过API赋给输出参数;
B、把特定唯一参数的当前值递增1。
上述步骤A-B中用MUTEX技术保证代码执行的同步唯一性。
步骤204,若参数的使用过程也有唯一性需求和互斥性需求,即从参数值获取到参数值使用完毕期间,不能用该参数值再次发出请求(参数循环使用、参数使用时间长、参数样本小的时候会发生此情况),则增加唯一参数的两个调用方法,一个为参数获取,一个为参数释放。
上述步骤204中,实现参数互斥性使用的算法如下:
A、把参数指向的数据数组当为先进先出(FIFO)的队列,队列头和队列尾初始位置均为数组起始。
B、参数获取方法被调用时,返回队列尾指向的值,队列尾加一,当队列尾移至数组最后时,将折返至数组起始。
C、参数释放方法被调用时,把释放的值赋给队列头指向的数组位置,队列头加一。
所述步骤B-C算法均使用MUTEX技术保证代码执行的同步唯一性,可保证多进程多线程环境下正在使用的参数数值保存在队列头和队列尾之间,其他位置的参数数值均可以被使用。
D、若队列尾折返递增后到达队列头,则当前全部参数数据均被使用且未释放,后续的参数使用调用将处于等待状态,直至参数释放方法被调用为止。
该方法保证了数组中所有位置的参数值均能大致等概率地被使用和释放。
本发明所述方法中使用了LR平台所在WIN32运行环境中的MUTEX和共享内存技术,利用MUTEX技术的特性把参数唯一性、随机性、互斥性的需求化解为多进程间共享变量的加锁方式递增、用变量值进行数组下标寻址获取外部加载数据、数组洗牌算法、先入先出(FIFO)可用参数队列四项算法,通过动态链接库(DLL)的方式提供用户友好的调用接口(API)给LR工具。
基于上述方法,本发明还提供了一种测试参数的生成系统,主要包括:
用于统一存储测试参数的共享内存;
数据读取单元,用于从数据文件中读取全部参数,加载入共享内存;
测试参数生成单元,用于通过互斥量MUTEX技术对共享内存中的参数进行顺序但不重复的读取,作为测试参数发送给每个并发用户。
该系统还包括参数随机处理单元,用于对加载入共享内存的全部参数通过洗牌算法随机打散。以及互斥和循环处理单元,用于在参数可选值数组上应用先进先出FIFO和循环折返队列算法,把在使用参数值保存在队列中,使用完毕后退出队列。
由于本发明只是是简单的对某个共享变量执行锁定、读取和递增后解锁的操作,因此在实现上可以使用最简单的操作系统全局同步控制MUTEX互斥量技术,基本上所有的操作系统都提供MUTEX的实现。在进程间共享数据则使用共享内存方式,效率高并能实现参数逻辑的全局控制。
以上所述的具体实施例仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种测试参数的生成方法,其特征在于,包括:
为测试参数设置统一的共享内存;
从数据文件中读取全部参数,加载入共享内存;
若需要进行随机抽取处理,通过洗牌算法将所述全部参数随机打散;
每个并发用户通过互斥量技术对共享内存中的参数进行顺序但不重复的读取,作为测试参数;
若作为测试参数的参数在使用过程中也存在互斥性需求,则:
把参数指向的数据数组当为先进先出的队列,队列头和队列尾初始位置均为数组起始;
若参数获取方法被调用时,返回队列尾指向的值,队列尾加一,当队列尾移至数组最后时,将折返至数组起始;
若参数释放方法被调用时,把释放的值赋给队列头指向的数组位置,队列头加一;
若队列尾折返递增后到达队列头,则当前全部参数数据均被使用且未释放,后续的参数使用调用将处于等待状态,直至参数释放方法被调用为止。
2.根据权利要求1所述的方法,其特征在于,所述洗牌算法包括:
(1)将全部参数组成为数组,设置当前数组下标为0;
(2)生成一个随机数,用加载到共享内存的数组长度取余,用于在该数组内随机选取一个数组下标;
(3)当前数组下标与随机选取的数组下标所指向的数组项做值交换;
(4)当前数组下标往后移一位,重复执行(2)-(3)操作,直至移至数组最末,洗牌结束。
3.根据权利要求1所述的方法,其特征在于,所述每个并发用户通过互斥量技术对共享内存中的参数进行顺序但不重复的读取过程包括:
A、把特定唯一参数的当前值及用当前值作为下标所指向的共享数组元素通过API赋给输出参数;
B、把特定唯一参数的当前值递增1。
4.根据权利要求1所述的方法,其特征在于,所述全部参数用数组方式保存。
5.一种测试参数的生成系统,其特征在于,包括:
设置单元,为测试参数设置统一的共享内存;
数据读取单元,用于从数据文件中读取全部参数,加载入共享内存;
参数随机处理单元,用于对加载入共享内存的全部参数通过洗牌算法随机打散;
测试参数生成单元,用于通过互斥量技术对共享内存中的参数进行顺序但不重复的读取,作为测试参数发送给每个并发用户;
互斥和循环处理单元,用于在作为测试参数的参数在使用过程中也存在互斥性需求时,把参数指向的数据数组当为先进先出的队列,队列头和队列尾初始位置均为数组起始;参数获取方法被调用时,返回队列尾指向的值,队列尾加一,当队列尾移至数组最后时,将折返至数组起始;参数释放方法被调用时,把释放的值赋给队列头指向的数组位置,队列头加一;若队列尾折返递增后到达队列头,则当前全部参数数据均被使用且未释放,后续的参数使用调用将处于等待状态,直至参数释放方法被调用为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910151312.1A CN101937387B (zh) | 2009-06-30 | 2009-06-30 | 一种测试参数的生成方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910151312.1A CN101937387B (zh) | 2009-06-30 | 2009-06-30 | 一种测试参数的生成方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101937387A CN101937387A (zh) | 2011-01-05 |
CN101937387B true CN101937387B (zh) | 2013-04-17 |
Family
ID=43390727
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910151312.1A Active CN101937387B (zh) | 2009-06-30 | 2009-06-30 | 一种测试参数的生成方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101937387B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102955721B (zh) * | 2011-08-16 | 2016-05-04 | 阿里巴巴集团控股有限公司 | 一种测试用的压力生成方法及装置 |
CN105447003B (zh) * | 2014-08-07 | 2019-03-08 | 阿里巴巴集团控股有限公司 | 一种参数集合生成方法及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
CN101055533A (zh) * | 2007-05-28 | 2007-10-17 | 中兴通讯股份有限公司 | 一种多线程处理器动态内存管理系统及方法 |
CN101300775A (zh) * | 2005-10-31 | 2008-11-05 | 松下电器产业株式会社 | 安全处理装置、安全处理方法、加密信息嵌入方法、程序、存储介质和集成电路 |
-
2009
- 2009-06-30 CN CN200910151312.1A patent/CN101937387B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
CN101300775A (zh) * | 2005-10-31 | 2008-11-05 | 松下电器产业株式会社 | 安全处理装置、安全处理方法、加密信息嵌入方法、程序、存储介质和集成电路 |
CN101055533A (zh) * | 2007-05-28 | 2007-10-17 | 中兴通讯股份有限公司 | 一种多线程处理器动态内存管理系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101937387A (zh) | 2011-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8806498B2 (en) | Method and system for resolving dependency among the enqueued works and/or finished works and scheduling the dependency-resolved works | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CA2706737C (en) | A multi-reader, multi-writer lock-free ring buffer | |
US8381230B2 (en) | Message passing with queues and channels | |
CN110300328B (zh) | 一种视频播放控制方法、装置及可读存储介质 | |
US9946582B2 (en) | Distributed processing device and distributed processing system | |
US10402223B1 (en) | Scheduling hardware resources for offloading functions in a heterogeneous computing system | |
CN101819539B (zh) | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 | |
CN105045632A (zh) | 一种多核环境下实现免锁队列的方法和设备 | |
CN109298888B (zh) | 队列的数据存取方法及装置 | |
US8595726B2 (en) | Apparatus and method for parallel processing | |
CN111416825A (zh) | 线程间无锁日志管理方法和系统、终端、存储介质 | |
US8543722B2 (en) | Message passing with queues and channels | |
CN111831413B (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN101937387B (zh) | 一种测试参数的生成方法和系统 | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
US10198784B2 (en) | Capturing commands in a multi-engine graphics processing unit | |
CN110289043B (zh) | 存储设备测试方法、装置、电子设备 | |
US11086691B2 (en) | Producer-consumer communication using multi-work consumers | |
US20220156128A1 (en) | Computing device, computing equipment and programmable scheduling method | |
CN112306827B (zh) | 日志采集装置、方法和计算机可读存储介质 | |
EP2726985B1 (fr) | Dispositif et procede de synchronisation de taches executees en parallele sur une plateforme comprenant plusieurs unites de calcul | |
CN110445874A (zh) | 一种会话处理方法、装置、设备和存储介质 | |
CN113687942B (zh) | 检测方法、装置及电子设备 | |
US20130065643A1 (en) | Mobile terminal having mode transition function and driving method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |