一种软件性能测试模拟方法及装置制造方法
【专利摘要】本发明涉及一种软件性能测试的模拟方法及装置,包括以下步骤:将用户配置的配置信息存储于模拟的结构体文件中;创建模拟的共享内存,将所述结构体文件存储于共享内存中;读取并解析结构体文件,得到速率值,创建多个模拟的测试进程;在每个测试进程中分别模拟创建所述预定数量的子线程,每个子线程根据配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程;每隔预定的时间,在每个测试进程中模拟创建新的子线程;存储模拟的业务返回数据并统计模拟的业务返回数据。本发明使用了多进程多线程架构,合理分配资源,确保每个进程压力负载合理,每个进程仅模拟小频率的速率模型,健壮性上得以提高。
【专利说明】一种软件性能测试模拟方法及装置
【技术领域】
[0001]本发明涉及一种软件性能测试模型,特别涉及一种软件性能测试模拟方法及装置。
【背景技术】
[0002]对于软件产品性能测试模拟速率方法,适用其经典的场景为:例如12306定时开始的订票服务,从某个时间点,用户数快速持续增长。其造成被测服务端CPU、内存、网络或数据库资源的急剧消耗,对被测软件架构也是巨大的考验。在此测试场景下模拟用户行为最重要的是负载速率模型的准确性和稳定性。其中如何使用尽量少的计算机,平稳、准确的模拟用户每秒增加的操作行为成为行业难题。
[0003]计算机硬件配置越来越高,可供程序分配的资源越来越多,而进程是可分配硬件资源的最小单位,多进程可尽量多的分配到硬件资源,模拟高速率场景下多进程具有技术优势。
[0004]操作系统在内存保护模式下运行,进程拥有独立的逻辑内存空间,多进程互相之间不能直接访问。而现存的免费性能测试工具都使用单进程架构。无法充分申请硬件资源,单机模拟用户的速率数容易达到上限,且高速率时CPU时间片分配不足,运行精度低。
[0005]在面临每秒高频率N个用户请求增加的场景下,定时器精度需小于1/N秒,而CPU时间片被大量分配给用户业务操作,造成定时器精度失效,在长时间运行情况下,失效的时间叠加,造成测试精度降低,测试结果不可信。而使用触发器同样面临以上问题。
[0006]此发明采用多进程方式将高速率分解,每个进程只负责“低”速率提高了稳定性,解决了进程之间通讯的问题,通过互斥体和定时器技术结合的方式,解决了速率发送不稳定的问题,可用来模拟用户速率增加场景。与之类似的有Linux平台的HTTPL0AD。
[0007]手工测试:开发人员和客户只能依靠尽量多的测试机器和人力进行手动模拟速率测试,缺点是机器数量少、不够精确且不能重复运行,消耗大量人力物力,但结果误差大,依靠此方法得到的测试结果,更多的时候是依靠测试经验进行评估。
[0008]开源软件:
[0009]HTTPL0AD速率模型只能测试HTTP协议,依赖于Socket组件的非阻塞模式,使其无法实现其它协议扩展。
[0010]准确性方面,HTTPL0AD速率模型没有考虑到大量用户业务状态下,对资源的大量消耗,其使用的单进程单线程技术,不能保证用户业务竞争到足够的资源和及时分配CPU的时间片,准确性不足。
[0011]稳定性方面,HTTPL0AD速率模型,采用触发器方式在规定时间调用新的用户业务请求,由于触发器采用的是系统时间,受操作系统内核调度,线程唤醒机制的影响,时间精度无法保证,体现稳定性方面,在速率数量增多情况下,波动明显,已经影响到实际运行效果O
【发明内容】
[0012]本发明所要解决的技术问题是提供一种能够在软件性能测试过程中对高速率请求与处理进行模拟的软件性能测试模拟方法及装置。
[0013]本发明解决上述技术问题的技术方案如下:一种软件性能测试的模拟方法,包括以下步骤:
[0014]步骤1:将用户配置的配置信息存储于模拟的结构体文件中;
[0015]步骤2:创建模拟的共享内存,将所述结构体文件存储于共享内存中;
[0016]步骤3:读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值;
[0017]步骤4:在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据;
[0018]步骤5:每隔预定的时间,在每个测试进程中模拟创建新的子线程;
[0019]步骤6:存储模拟的业务返回数据并统计模拟的业务返回数据。
[0020]本发明的有益效果是:使用了多进程多线程架构,合理分配资源,确保每个进程压力负载合理,每个进程仅模拟小频率的速率模型,健壮性上得以提高,同时避免了某个进程出现失效,对整体负载测试结论的影响;多进程架构保证了负载生成器可以申请到足够的系统资源,避免多线程竞争造成的资源死锁对速率测试方法的影响;多线程架构保证了每个用户业务都运行在独立的上下文中,避免了 HTTPL0AD架构中用户业务之间响应时间彼此的干扰,本发明能够保证申请足够资源,减少用户业务之间的互相影响。
[0021]在上述技术方案的基础上,本发明还可以做如下改进。
[0022]进一步,所述步骤5进一步包括:创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
[0023]采用上述进一步方案的有益效果是避免了操作系统内核调度和进程、线程切换带来的定时器误差,精确性得以保证。
[0024]进一步,所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。
[0025]采用上述进一步方案的有益效果是将业务文件内部设置初始化函数文件、功能函数文件和结束函数文件,可以实现对用户请求的灵活支持。
[0026]进一步,一种软件性能测试模拟装置,包括存储模块,创建模块,读取模块,执行模块,创建子线程模块和统计模块;
[0027]所述存储模块,用于将用户配置的配置信息存储于模拟的结构体文件中,将结构体文件发送给创建模块;
[0028]所述创建模块,用于接收结构体文件,创建模拟的共享内存,将所述结构体文件存储于共享内存中,将结构体文件在共享内存中的存储信息发送给读取模块;[0029]所述读取模块,用于接收结构体文件在共享内存中的存储信息,读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值,将多个模拟的测试进程的信息发送给执行模块;
[0030]所述执行模块,用于接收多个模拟的测试进程的信息,在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据,将模拟的业务返回数据发送给统计模块;
[0031]所述创建子线程模块,用于每隔预定的时间,在每个测试进程中模拟创建新的子线程;
[0032]所述统计模块,用于接收模拟的业务返回数据,存储模拟的业务返回数据并统计模拟的业务返回数据。
[0033]采用上述进一步方案的有益效果是使用了多进程多线程架构,合理分配资源,确保每个进程压力负载合理,每个进程仅模拟小频率的速率模型,健壮性上得以提高,同时避免了某个进程出现失效,对整体负载测试结论的影响;多进程架构保证了负载生成器可以申请到足够的系统资源,避免多线程竞争造成的资源死锁对速率测试方法的影响;多线程架构保证了每个用户业务都运行在独立的上下文中,避免了 HTTPL0AD架构中用户业务之间响应时间彼此的干扰。
[0034]进一步,所述创建子线程模块,进一步用于创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
[0035]采用上述进一步方案的有益效果是避免了操作系统内核调度和进程、线程切换带来的定时器误差,精确性得以保证。
[0036]进一步,所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。
[0037]采用上述进一步方案的有益效果是将业务文件内部设置初始化函数文件、功能函数文件和结束函数文件,可以实现对用户请求的灵活支持。
【专利附图】
【附图说明】
[0038]图1为本发明方法步骤流程图;
[0039]图2为本发明装置结构图;
[0040]图3为本发明互斥体与定时器工作流程图。
[0041]附图中,各标号所代表的部件列表如下:
[0042]1、存储模块,2、创建模块,3、读取模块,4、执行模块,5、创建子线程模块,6统计模块。
【具体实施方式】[0043]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并
非用于限定本发明的范围。
[0044]如图1所示,为本发明方法步骤流程图;图2为本发明装置结构图;图3为本发明
互斥体与定时器工作流程图。
[0045]实施例1
[0046]—种软件性能测试的模拟方法,包括以下步骤:
[0047]步骤1:将用户配置的配置信息存储于模拟的结构体文件中;用户根据需求,确认
需测试系统地址,速率数,运行时间,数据库信息,生成配置文件。程序读取用户配置信息,
存储用计算机识别的结构体,供各进程识别用户需求、模拟用户业务行为、控制速率运行和
控制速率退出。
[0048]
【权利要求】
1.一种软件性能测试的模拟方法,其特征在于,包括以下步骤: 步骤1:将用户配置的配置信息存储于模拟的结构体文件中; 步骤2:创建模拟的共享内存,将所述结构体文件存储于共享内存中; 步骤3:读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值; 步骤4:在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据; 步骤5:每隔预定的时间,在每个测试进程中模拟创建新的子线程; 步骤6:存储模拟的业务返回数据并统计模拟的业务返回数据。
2.根据权利要求1所述的软件性能测试模拟方法,其特征在于:所述步骤5进一步包括:创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
3.根据权利要求1至2中任一所述的软件性能测试模拟方法,其特征在于:所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。
4.一种软件性能测试模拟装置,其特征在于:包括存储模块(I ),创建模块(2),读取模块(3 ),执行模块(4 )和统计模块(5 ); 所述存储模块(I ),用于将用户配置的配置信息存储于模拟的结构体文件中,将结构体文件发送给创建模块(2); 所述创建模块(2),用于接收结构体文件,创建模拟的共享内存,将所述结构体文件存储于共享内存中,将结构体文件在共享内存中的存储信息发送给读取模块(3); 所述读取模块(3),用于接收结构体文件在共享内存中的存储信息,读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值,将多个模拟的测试进程的信息发送给执行模块(4); 所述执行模块(4),用于接收多个模拟的测试进程的信息,在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据,将模拟的业务返回数据发送给统计模块(5); 所述创建子线程模块(5),用于每隔预定的时间,在每个测试进程中模拟创建新的子线程; 所述统计模块(6),用于接收模拟的业务返回数据,存储模拟的业务返回数据并统计模拟的业务返回数据。
5.根据权利要求4所述的软件性能测试模拟装置,其特征在于:所述创建子线程模块(5),进一步用于创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
6.根据权利要求4至5任一所述的软件性能测试模拟装置,其特征在于:所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资 源的结束函数文件。
【文档编号】G06F11/36GK103544102SQ201310392954
【公开日】2014年1月29日 申请日期:2013年9月2日 优先权日:2013年9月2日
【发明者】衣安平, 杨光宇, 孙一铭, 刘初阳 申请人:烟台中科网络技术研究所