一种软件性能测试模拟方法及装置转让专利

申请号 : CN201310392954.7

文献号 : CN103544102B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 衣安平杨光宇孙一铭刘初阳

申请人 : 烟台中科网络技术研究所

摘要 :

本发明涉及一种软件性能测试的模拟方法及装置,包括以下步骤:将用户配置的配置信息存储于模拟的结构体文件中;创建模拟的共享内存,将所述结构体文件存储于共享内存中;读取并解析结构体文件,得到速率值,创建多个模拟的测试进程;在每个测试进程中分别模拟创建所述预定数量的子线程,每个子线程根据配置信息模拟执行用户请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程;每隔预定的时间,在每个测试进程中模拟创建新的子线程;存储模拟的业务返回数据并统计模拟的业务返回数据。本发明使用了多进程多线程架构,合理分配资源,确保每个进程压力负载合理,每个进程仅模拟小频率的速率模型,健壮性上得以提高。

权利要求 :

1.一种软件性能测试的模拟方法,其特征在于,包括以下步骤:

步骤1:将用户配置的配置信息存储于模拟的结构体文件中;

步骤2:创建模拟的共享内存,将所述结构体文件存储于共享内存中;

步骤3:读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值;

步骤4:在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据;

步骤5:每隔预定的时间,在每个测试进程中模拟创建新的子线程,包括创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体;

步骤6:存储模拟的业务返回数据并统计模拟的业务返回数据。

2.根据权利要求1所述的软件性能测试模拟方法,其特征在于:所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。

3.一种软件性能测试模拟装置,其特征在于:包括存储模块(1),创建模块(2),读取模块(3),执行模块(4)和统计模块(5);

所述存储模块(1),用于将用户配置的配置信息存储于模拟的结构体文件中,将结构体文件发送给创建模块(2);

所述创建模块(2),用于接收结构体文件,创建模拟的共享内存,将所述结构体文件存储于共享内存中,将结构体文件在共享内存中的存储信息发送给读取模块(3);

所述读取模块(3),用于接收结构体文件在共享内存中的存储信息,读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值,将多个模拟的测试进程的信息发送给执行模块(4);

所述执行模块(4),用于接收多个模拟的测试进程的信息,在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据,将模拟的业务返回数据发送给统计模块(5);

所述创建子线程模块(5),用于每隔预定的时间,在每个测试进程中模拟创建新的子线程,还用于创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体;

所述统计模块(6),用于接收模拟的业务返回数据,存储模拟的业务返回数据并统计模拟的业务返回数据。

4.根据权利要求3所述的软件性能测试模拟装置,其特征在于:所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。

说明书 :

一种软件性能测试模拟方法及装置

技术领域

[0001] 本发明涉及一种软件性能测试模型,特别涉及一种软件性能测试模拟方法及装置。

背景技术

[0002] 对于软件产品性能测试模拟速率方法,适用其经典的场景为:例如12306定时开始的订票服务,从某个时间点,用户数快速持续增长。其造成被测服务端CPU、内存、网络或数据库资源的急剧消耗,对被测软件架构也是巨大的考验。在此测试场景下模拟用户行为最重要的是负载速率模型的准确性和稳定性。其中如何使用尽量少的计算机,平稳、准确的模拟用户每秒增加的操作行为成为行业难题。
[0003] 计算机硬件配置越来越高,可供程序分配的资源越来越多,而进程是可分配硬件资源的最小单位,多进程可尽量多的分配到硬件资源,模拟高速率场景下多进程具有技术优势。
[0004] 操作系统在内存保护模式下运行,进程拥有独立的逻辑内存空间,多进程互相之间不能直接访问。而现存的免费性能测试工具都使用单进程架构。无法充分申请硬件资源,单机模拟用户的速率数容易达到上限,且高速率时CPU时间片分配不足,运行精度低。
[0005] 在面临每秒高频率N个用户请求增加的场景下,定时器精度需小于1/N秒,而CPU时间片被大量分配给用户业务操作,造成定时器精度失效,在长时间运行情况下,失效的时间叠加,造成测试精度降低,测试结果不可信。而使用触发器同样面临以上问题。
[0006] 此发明采用多进程方式将高速率分解,每个进程只负责“低”速率提高了稳定性,解决了进程之间通讯的问题,通过互斥体和定时器技术结合的方式,解决了速率发送不稳定的问题,可用来模拟用户速率增加场景。与之类似的有Linux平台的HTTPLOAD。
[0007] 手工测试:开发人员和客户只能依靠尽量多的测试机器和人力进行手动模拟速率测试,缺点是机器数量少、不够精确且不能重复运行,消耗大量人力物力,但结果误差大,依靠此方法得到的测试结果,更多的时候是依靠测试经验进行评估。
[0008] 开源软件:
[0009] HTTPLOAD速率模型只能测试HTTP协议,依赖于Socket组件的非阻塞模式,使其无法实现其它协议扩展。
[0010] 准确性方面,HTTPLOAD速率模型没有考虑到大量用户业务状态下,对资源的大量消耗,其使用的单进程单线程技术,不能保证用户业务竞争到足够的资源和及时分配CPU的时间片,准确性不足。
[0011] 稳定性方面,HTTPLOAD速率模型,采用触发器方式在规定时间调用新的用户业务请求,由于触发器采用的是系统时间,受操作系统内核调度,线程唤醒机制的影响,时间精度无法保证,体现稳定性方面,在速率数量增多情况下,波动明显,已经影响到实际运行效果。

发明内容

[0012] 本发明所要解决的技术问题是提供一种能够在软件性能测试过程中对高速率请求与处理进行模拟的软件性能测试模拟方法及装置。
[0013] 本发明解决上述技术问题的技术方案如下:一种软件性能测试的模拟方法,包括以下步骤:
[0014] 步骤1:将用户配置的配置信息存储于模拟的结构体文件中;
[0015] 步骤2:创建模拟的共享内存,将所述结构体文件存储于共享内存中;
[0016] 步骤3:读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值;
[0017] 步骤4:在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据;
[0018] 步骤5:每隔预定的时间,在每个测试进程中模拟创建新的子线程;
[0019] 步骤6:存储模拟的业务返回数据并统计模拟的业务返回数据。
[0020] 本发明的有益效果是:使用了多进程多线程架构,合理分配资源,确保每个进程压力负载合理,每个进程仅模拟小频率的速率模型,健壮性上得以提高,同时避免了某个进程出现失效,对整体负载测试结论的影响;多进程架构保证了负载生成器可以申请到足够的系统资源,避免多线程竞争造成的资源死锁对速率测试方法的影响;多线程架构保证了每个用户业务都运行在独立的上下文中,避免了HTTPLOAD架构中用户业务之间响应时间彼此的干扰,本发明能够保证申请足够资源,减少用户业务之间的互相影响。
[0021] 在上述技术方案的基础上,本发明还可以做如下改进。
[0022] 进一步,所述步骤5进一步包括:创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
[0023] 采用上述进一步方案的有益效果是避免了操作系统内核调度和进程、线程切换带来的定时器误差,精确性得以保证。
[0024] 进一步,所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。
[0025] 采用上述进一步方案的有益效果是将业务文件内部设置初始化函数文件、功能函数文件和结束函数文件,可以实现对用户请求的灵活支持。
[0026] 进一步,一种软件性能测试模拟装置,包括存储模块,创建模块,读取模块,执行模块,创建子线程模块和统计模块;
[0027] 所述存储模块,用于将用户配置的配置信息存储于模拟的结构体文件中,将结构体文件发送给创建模块;
[0028] 所述创建模块,用于接收结构体文件,创建模拟的共享内存,将所述结构体文件存储于共享内存中,将结构体文件在共享内存中的存储信息发送给读取模块;
[0029] 所述读取模块,用于接收结构体文件在共享内存中的存储信息,读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值,将多个模拟的测试进程的信息发送给执行模块;
[0030] 所述执行模块,用于接收多个模拟的测试进程的信息,在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据,将模拟的业务返回数据发送给统计模块;
[0031] 所述创建子线程模块,用于每隔预定的时间,在每个测试进程中模拟创建新的子线程;
[0032] 所述统计模块,用于接收模拟的业务返回数据,存储模拟的业务返回数据并统计模拟的业务返回数据。
[0033] 采用上述进一步方案的有益效果是使用了多进程多线程架构,合理分配资源,确保每个进程压力负载合理,每个进程仅模拟小频率的速率模型,健壮性上得以提高,同时避免了某个进程出现失效,对整体负载测试结论的影响;多进程架构保证了负载生成器可以申请到足够的系统资源,避免多线程竞争造成的资源死锁对速率测试方法的影响;多线程架构保证了每个用户业务都运行在独立的上下文中,避免了HTTPLOAD架构中用户业务之间响应时间彼此的干扰。
[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]
[0049]
[0050] 步骤2:创建模拟的共享内存,将所述结构体文件存储于共享内存中;
[0051] 操作系统运行在内存保护机制下,每个进程都拥有独立的逻辑内存空间,各进程无法访问其他进程数据,而该速率测试方法是基于多进程多线程技术的,操作系统的限制,导致各进程无法得知其他进程信息。通过进程之间通过映射同一个普通文件实现共享内存,存储步骤1得到的用户需求结构体,保证各进程都可以读取到统一的用户需求;运行时可以获知其他进程运行状态,其唯一性可用来进行步骤3进程的负载均衡;到达运行时间后,可存储进程已发出的所有请求全部结束信号,保证数据统计精度;
[0052] 步骤3:读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值
[0053] 创建进程,各进程读取步骤2存储在共享内存的,由步骤1生成的用户需求结构体,将高速率分配到多进程:在速率模型中,50/秒新增业务请求则创建一个新进程(不足50亦作为一个进程),假设用户指定的速率为N/秒,则速率模型会启动的进程数P可由如下公式进行计算:
[0054]
[0055] 创建的每个进程按照每秒新增50(不满50个以实际为准)个用户请求的频率,执行用业务请求。
[0056] 步骤4:在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据;
[0057] 步骤5:每隔预定的时间,在每个测试进程中模拟创建新的子线程;
[0058] 步骤6:存储模拟的业务返回数据并统计模拟的业务返回数据。
[0059] 统计模拟的业务返回数主要指统计成功、失败、响应时间、每秒点击率等指标的各项数据,为用户及开发人员提供准确详细的统计资料。
[0060] 所述步骤5进一步包括:创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
[0061] 读取步骤3得到进程每秒创建的用户请求数N,计算定时器周期为1/N秒。按照图3中方式按固定频率增加用户业务请求。定时器只负责定时将互斥体解锁,减轻了定时器的操作压力,提高了准确性。外围会有循环检查互斥体状态,只要互斥体解锁,则表明应该创建新的线程。
[0062] 所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。
[0063] 各线程通过调用封装好的用户业务的库文件,实现对被测端的业务压力发送。通过开发不同的用户业务库文件,可以实现对用户业务的灵活支持,在库文件中共3个主要函数,初始化函数供运行前初始化好运行所需资源;在运行周期内业务功能函数循环运行,实现对虚拟用户的模拟;线程退出时会执行结束函数,释放掉运行所需资源。
[0064] 本发明可提供时间和次数两种运行机制,在时间运行模式下,定时器到达运行时间后会将共享内存中的运行停止位置起;在次数运行模式下,每次业务请求完成后,都会更新共享内存运行数,运行次数等于用户配置次数时会将共享内存中的运行停止位置起。到达停止条件后,退出步骤4的执行过程,执行步骤7的统计过程。
[0065] 一种软件性能测试模拟装置,包括存储模块1,创建模块2,读取模块3,执行模块4和统计模块5;
[0066] 所述存储模块1,用于将用户配置的配置信息存储于模拟的结构体文件中,将结构体文件发送给创建模块2;
[0067] 所述创建模块2,用于接收结构体文件,创建模拟的共享内存,将所述结构体文件存储于共享内存中,将结构体文件在共享内存中的存储信息发送给读取模块3;
[0068] 所述读取模块3,用于接收结构体文件在共享内存中的存储信息,读取存储于共享内存中的结构体文件,解析结构体文件,得到速率值,创建多个模拟的测试进程,为模拟的每个预定数量的用户请求分配一个测试进程,所述测试进程的数量为所述速率值与所述预定数量的比值,将多个模拟的测试进程的信息发送给执行模块4;
[0069] 所述执行模块4,用于接收多个模拟的测试进程的信息,在每个所述测试进程中分别模拟创建所述预定数量的子线程,每个子线程对应处理一个用户请求,每个子线程根据所述配置信息模拟执行用户请求请求执行的业务文件,生成模拟的业务返回数据,模拟销毁执行完业务文件子线程,返回模拟的业务返回数据,将模拟的业务返回数据发送给统计模块5;
[0070] 所述创建子线程模块5,用于每隔预定的时间,在每个测试进程中模拟创建新的子线程;
[0071] 所述统计模块6,用于接收模拟的业务返回数据,存储模拟的业务返回数据并统计模拟的业务返回数据。
[0072] 所述创建子线程模块5,进一步用于创建模拟的定时器和模拟的互斥体,模拟运行互斥体和定时器,互斥体保持锁定状态与解锁状态交替进行,所述锁定状态和解锁状态的时间长度均为定时器设定的时间,在互斥体处于解锁状态时,在测试进程的存储空间中创建新的子线程,直到互斥体达到结束条件时,结束互斥体。
[0073] 所述业务文件内部包括用于进行初始化的初始化函数文件,用于根据用户请求进行功能模拟的功能函数文件,和用于释放系统资源的结束函数文件。
[0074] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。