基于python的性能测试方法、装置、计算机设备及存储介质与流程

文档序号:21592558发布日期:2020-07-24 16:40阅读:231来源:国知局
基于python的性能测试方法、装置、计算机设备及存储介质与流程

本发明涉及计算机领域,更具体地说是指一种基于python的性能测试方法、装置、计算机设备及存储介质。



背景技术:

目前市场上比较流行的性能测试工具主要有loadrunner和jmeter,上述的loadrunner和jmeter能支持大部分协议的性能测试。

loadrunner通过agent进程监视各种协议的client和server端的通讯,使用自带的c语言将录制下来的用户操作转换为脚本,loadrunner调用这些脚本向服务器端发出请求并接受服务器的响应,通过virtualusergenerator来编写脚本、controller来设置场景参数,管理虚拟用户、analysis来查看测试结果。loadrunner存在以下几个缺点:1、loadrunner是一个重量级的软件,安装繁琐;2、脚本编写非常复杂,对代码功底要求高;3、压测过程中不能人工增加并发数;4、不能跨平台,也不能二次扩。

jmeter是基于java语言的开源的应用软件,jmeter作为浏览器与web服务器之间的代理网关,可以捕获浏览器的请求和web服务器的响应,通过线程来模拟真实用户对web服务器的访问压力。基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果。jmeter存在以下几个缺点:1、脚本编写比较繁琐,需要添加一大堆元件;2、压测过程中不能人工增加并发数;3、不支持大并发压力测试;4、报表类型较少。

公开于该背景技术部分的信息仅仅旨在加深对本实用新型的总体背景技术的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域技术人员所公知的现有技术。



技术实现要素:

本发明的目的在于克服现有技术的缺陷,提供一种基于python的性能测试方法、装置、计算机设备及存储介质。

为实现上述目的,本发明采用以下技术方案:

第一方面,本发明提出一种基于python的性能测试方法,包括以下步骤:

安装python环境,并在python环境中搭建httprunner和locust系统;

创建httprunner初始脚本;

通过fiddler程序抓包,并将抓取到的数据包导入到httprunner中生成测试脚本;

封装日志模块和邮件模块,并引入用于定义测试报告的htmltestrunner和mkdocs程序;

执行测试脚本,并获取网页版测试日志和测试报告。

第二方面,本发明提出一种基于python的性能测试装置,包括:

环境搭建单元,用于安装python环境,并在python环境中搭建httprunner和locust系统;

初始创建单元,用于创建httprunner初始脚本;

脚本生成单元,用于通过fiddler程序抓包,并将抓取到的数据包导入到httprunner中生成测试脚本;

模块封装单元,用于封装日志模块和邮件模块,并引入用于定义测试报告的htmltestrunner和mkdocs程序;

执行获取单元,用于执行测试脚本,并获取网页版测试日志和测试报告。

第三方面,本发明提出一种计算机设备,所述计算机设备包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现如上所述的基于python的性能测试方法。

第四方面,本发明提出一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现如上所述的基于python的性能测试方法。

本发明与现有技术相比的有益效果是:本发明通过fiddler程序抓包,然后将所抓的包导出为har格式,继续转换为yaml格式,再导入到httprunner中的方式来完成脚本编写工作,极大的降低脚本编写门槛,也提高了测试效率,也减少代码出错率;可以在性能测试执行过程中,于locust的ui界面增加并发数,无需等测试执行完后再设置并发数;python中封装日志模块和邮件模块,引入htmltestrunner和mkdocs程序,实现性能测试过程中的测试日志的实时输出,以及测试完成后测试报告网页化,同时测试日志和测试报告存储到本地,方便查阅以及以备日后查看。

下面结合附图和具体实施例对本发明作进一步描述。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的基于python的性能测试方法的应用场景示意图;

图2为本发明实施例提供的基于python的性能测试方法的流程示意图;

图3为本发明实施例提供的基于python的性能测试方法的子流程示意图;

图4为本发明实施例提供的基于python的性能测试方法的子流程示意图;

图5为本发明实施例提供的基于python的性能测试方法的子流程示意图;

图6为本发明实施例提供的基于python的性能测试方法的子流程示意图;

图7为本发明实施例提供的基于python的性能测试方法的子流程示意图;

图8为本发明实施例提供的基于python的性能测试装置的示意性框图;

图9为本发明实施例提供的基于python的性能测试装置的初始创建单元的示意性框图;

图10为本发明实施例提供的基于python的性能测试装置的执行获取单元的示意性框图;

图11为本发明实施例提供的计算机设备的示意性框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

请参阅图1和图2,图1为本发明实施例提供的基于python的性能测试方法的应用场景示意图。图2为本发明实施例提供的基于python的性能测试方法的示意性流程图。该基于python的性能测试方法应用于服务器中,该服务器与终端进行数据交互,于服务器中安装python环境,并在python环境中搭建httprunner和locust系统,创建httprunner初始脚本,生成测试脚本,以及封装日志模块和邮件模块,并执行测试脚本,并获取网页版测试日志和测试报告。

图2是本发明实施例提供的基于python的性能测试方法的流程示意图。如图2所示,该方法包括以下步骤s10至s50。

s10、安装python环境,并在python环境中搭建httprunner和locust系统。

在本实施例中,在windows(microsoftwindows操作系统)环境安装python(跨平台的计算机程序设计语言)环境,注意一定要用python3.4及以上版本,然后安装pycharm程序(pythonide,带有一整套可以帮助用户在使用python语言开发时提高其效率的工具),配置好环境变量。

其中,httprunner是一款面向http(s)协议的通用测试框架,只需编写维护一份yaml/json脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程。

进入pycharm程序,通过python包管理工具安装httprunner,安装完毕后通过hrun–v来进行校验,对依赖包进行管理。然后通过python包管理工具安装locustio,搭建locust系统。安装pyzmq,为后续分布式运行locust作准备。

s20、创建httprunner初始脚本。

在本实施例中,在pycharm程序中新建一个性能测试项目,并在该项目下新建几个目录和文件,进一步在对应的目录中创建测试套件,以及初始测试用例,以创建初始脚本。

参考图3,在一实施例中,步骤s20包括步骤s21-s22。

s21、在pycharm程序中新建一个性能测试项目,并新建testsuite、testcases和reports目录,以及.env、.gitignore和debugtalk.py文件。

在本实施例中,在pycharm程序中新建一个性能测试项目,并在该项目下新建以下几个目录:testsuite、testcases和reports,同时新建以下几个文件:.env、.gitignore和debugtalk.py。创建.env文件用于存放配置文件,例如host、token等,.gitignore文件用于后续与gitlab(项目管理和代码托管平台)结合,拉取代码所用,debugtalk.py文件主要用于脚本调试。

s22、在testsuite目录中创建测试套件,在testcases目录中创建初始测试用例脚本,以创建初始脚本。

在本实施例中,在创建完目录和对应的文件之后,创建httprunner的初始脚本,在testsuite目录里面创建测试套件,在testcases目录里面创建初始测试用例脚本,reports目录用于后续查看测试报告所用。每个测试套件包含若干个测试用例,每个测试用例为一个listofdict结构,其中可能包含全局配置项和若干个测试步骤,全局配置项作用域为整个测试用例,测试步骤对应单个测试步骤,作用域仅限于本身。s30、通过fiddler程序抓包,并将抓取到的数据包导入到httprunner中生成测试脚本。

在本实施例中,通过fiddler程序(一种http协议调试代理工具,它能够记录并检查终端和互联网之间的http通讯,设置断点,查看所有的进出fiddler的数据)抓包,将所抓取的数据包导出为har格式,另存到httprunner目录里面,具体为testsuites目录里面对应testcases层级的modules子层级,然后在httprunner中进入相应目录用har2case命令将har格式的数据包转换为yaml格式的数据包。通过使用fiddler程序抓包,然后转换格式,再导入到httprunner中,完成测试脚本编写工作,极大的降低脚本编写门槛,也提高了测试效率,也减少出错率。

参考图4,在一实施例中,步骤s30包括步骤s31-s35。

s31、根据被压测系统的ip和端口号在fiddler程序里面设置代理。

s32、通过fiddler程序抓包,获取被压测系统相应事务的各类请求和响应信息。

s33、将获取到的请求和响应信息以httparohive格式导出,并另存为har格式。

s34、将har格式的数据包另存于httprunner的testcases目录中。

s35、在testcases目录中将har格式的数据包转换为yaml格式,生成测试脚本。

在本实施例中,安装fiddler程序,将被压测系统的ip(internetprotocoladdress,互联网协议地址)和端口号在fiddler程序里面设置代理,然后通过fiddler程序抓包,获取被压测系统相应事务的各类请求和响应信息,然后将所抓的数据包选择httparohive格式导出,另存为har格式,并将har格式的数据包导入到httprunner目录里面,具体为testcases目录层级下的modules子层级,然后在httprunner中进入相应目录,并使用har2case命令将har格式的数据包转换为yaml格式,生成测试脚本。其中,生成的测试脚本内容包含测试用例脚本名称和客户端向服务器端的请求,请求包含请求头信息、请求的url、请求方法和请求参数等。

之后添加关联参数,并设置检查点,用task装饰器来设置事务,task装饰器可以做嵌套,用task装饰器装饰某些方法为一个任务,数字表示一个locust实例被挑选执行的权重,数值越大,执行频率越高。

进一步地,用min_wait和max_wait来设置执行任务过程中的等待时间,用weight来设置事务之间的权重,通过这些方式来增强脚本健壮性。这样,就无需编写笨重的ui或者臃肿的xml代码,基于协程而不是回调,脚本编写简单易读,极大的降低脚本编写门槛,也提高了测试效率,也减少出错率。

同时,通过这种方式,使得locust完全是基于事件驱动的,因此在单台机器上能够支持大并发,与其它许多基于事件的应用相比,locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码,每个用户实际上运行在自己的greenlet中。由于python是跨平台的,故此测试脚本具有跨平台性,并且通过这种抓包转换格式再导入httprunner中的方式可以测试任何协议和系统。

s40、封装日志模块和邮件模块,并引入用于定义测试报告的htmltestrunner和mkdocs程序。

在本实施例中,通过封装日志模块来记录的测试日志,通过封装邮件模块来将接收或发送邮件,同时,引入htmltestrunner和mkdocs程序(一个用于创建项目文档的快速,简单,完美华丽的静态站点生成器),用于对测试报告进行定义,设定测试报告的输出格式和输出位置等等,便于用户后续进一步调用并使用测试报告。

参考图5,在一实施例中,步骤s40包括步骤s41-s42。

s41、在python中新建通用模块,并分别封装用于记录日志的日志模块和用于发送/接收邮件的邮件模块。

在本实施例中,在python里面新建通用模块,然后分别封装日志和邮件模块,分别用于记录日志和发送接受邮件。日志模块里面创建2个handler,一个是filehandler,一个是streamhandler,设置输出格式和日志级别,使用addhandler方法把handler添加到logger,将日志同时写入文件和输出到控制台,方便实时查看日志信息和跟踪定位问题。

邮件模块中设置有send_mail方法,发送和接收邮件,生成包含多个邮件体的对象msg,定义邮件发件人、收件人、主题及内容。

s42、引入htmltestrunner和mkdocs程序,定义测试报告的报告样式,报告名称和报告内容。

在本实施例中,引入htmltestrunner,编写相应代码定义stream、测试套件用例执行方式等。安装mkdocs,将数据卷挂载到搭载测试报告的本机ip,通过守护进程的方式、将本地的8000端口映射容器的8000端口、数据卷挂载的方式运行起来。

新建mkdocs.yml文件,编写少量代码来定义报告样式,报告名称、报告内容等,代码中通过写入文件的方法,先打开mkdocs.yml文件,判断文件中是否存在当前写入的内容,定义相应的数据格式,测试报告要呈现的名称及内容。再在htmltestrunner中定义测试报告文件的绝对路径映射到mkdocs镜像中的路径。

s50、执行测试脚本,并获取网页版测试日志和测试报告。

在本实施例中,执行测试脚本进行压测,并在测试过程中或者测试完成后,获取测试日志和测试报告,便于测试结果统一汇总和以备日后查看,以及通过分析一定时间范围内的测试日志和测试报告,可以更容易发现被压测系统潜在的性能问题。

参考图6,在一实施例中,步骤s50包括步骤s511-s512。

s511、在httprunner命令行中输入locust–f执行测试套件中的初始测试用例脚本。

s512、在浏览器中输入被压测系统的ip和端口号打开locust的ui界面,于locust的ui界面设置性能测试场景的并发量和每秒新增用户数,并进行性能测试。

在本实施例中,通过在httprunner命令行中输入locust–f来执行测试套件里面的初始测试用例脚本,执行成功后即可在浏览器中输入压测系统的ip和端口号打开locust的ui界面,通过此界面来进行性能测试场景设置,输入并发量和每秒新增用户数,即可进行性能压测。

其中,压测过程中,可以人为通过locust的ui界面增加并发数。

同时,在进行压测时,可选择分布式执行测试脚本,基于1个主机和多个从机,主机负责分发任务,从机负责执行测试脚本。测试开始后,每个虚拟用户即locust实例的运行逻辑为:先执行websitetasks中的on_start(只执行一次),作为初始化;从websitetasks中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行;根据locust类中min_wait和max_wait定义的间隔时间范围(如果taskset类中也定义了min_wait或者max_wait,以taskset中的优先),在时间范围中随机取一个值,然后休眠等待;重复不断执行,直至测试任务终止。

参考图7,在一实施例中,步骤s50包括步骤s511-s512。

s521、在性能测试过程中,实时获取测试日志。

s522、在性能测试完成之后,获取测试日志和测试报告并存储。

在本实施例中,测试过程中可以在python命令行窗口中查看日志,测试脚本运行完毕后可直接在本地日志文件中查看测试过程中的测试日志信息,而测试报告可在htmltestrunner定义的测试报告路径中查看。本方案可实时记录性能测试过程中动态呈现的测试数据和执行情况,便于测试结果统一汇总和以备日后查看。另外,相比于肉眼的观察,通过分析一定时间范围内的测试数据,可以更容易发现被压测系统潜在的性能问题。

本发明通过fiddler抓包,然后将所抓的包导出为har格式,继续转换为yaml格式,再导入到httprunner中的方式来完成脚本编写工作,极大的降低脚本编写门槛,也提高了测试效率,也减少代码出错率;可以在性能测试执行过程中,于locust的ui界面增加并发数,无需等测试执行完后再设置并发数;python中封装日志模块和邮件模块,引入htmltestrunner和mkdocs程序,实现性能测试过程中的测试日志的实时输出,以及测试完成后测试报告网页化,同时测试日志和测试报告存储到本地,方便查阅以及以备日后查看。

图8是本发明实施例提供的一种基于python的性能测试装置的示意性框图。如图8所示,对应于以上基于python的性能测试方法,本发明还提供一种基于python的性能测试装置。该基于python的性能测试装置包括用于执行上述基于python的性能测试方法的单元,该装置可以被配置于台式电脑、平板电脑、手提电脑、等终端中。具体地,请参阅图8,该基于python的性能测试装置包括环境搭建单元10,初始创建单元20,脚本生成单元30,模块封装单元40和执行获取单元50。

环境搭建单元10,用于安装python环境,并在python环境中搭建httprunner和locust系统。

在本实施例中,在windows(microsoftwindows操作系统)环境安装python环境,注意一定要用python3.4及以上版本,然后安装pycharm程序(pythonide,带有一整套可以帮助用户在使用python语言开发时提高其效率的工具),配置好环境变量。

进入pycharm程序,通过python包管理工具安装httprunner,安装完毕后通过hrun–v来进行校验,对依赖包进行管理。然后通过python包管理工具安装locustio,搭建locust系统。安装pyzmq,为后续分布式运行locust作准备。

初始创建单元20,用于创建httprunner初始脚本。

在本实施例中,在pycharm程序中新建一个性能测试项目,并在该项目下新建几个目录和文件,进一步在对应的目录中创建测试套件,以及初始测试用例,以创建初始脚本。

在一实施例中,如图9所示,初始创建单元20包括目录创建模块21和脚本创建模块22。

目录创建模块21,用于在pycharm程序中新建一个性能测试项目,并新建testsuite、testcases和reports目录,以及.env、.gitignore和debugtalk.py文件。

在本实施例中,在pycharm程序中新建一个性能测试项目,并在该项目下新建以下几个目录:testsuite、testcases和reports,同时新建以下几个文件:.env、.gitignore和debugtalk.py。创建.env文件用于存放配置文件,例如host、token等,.gitignore文件用于后续与gitlab(项目管理和代码托管平台)结合,拉取代码所用,debugtalk.py文件主要用于脚本调试。

脚本创建模块22,用于在testsuite目录中创建测试套件,在testcases目录中创建测试用例脚本,以创建初始脚本,所述测试套件包含有若干个测试用例。

在本实施例中,在创建完目录和对应的文件之后,创建httprunner的初始脚本,在testsuite目录里面创建测试套件,在testcases目录里面创建初始测试用例脚本,reports目录用于后续查看测试报告所用。每个测试套件包含若干个测试用例,每个测试用例为一个listofdict结构,其中可能包含全局配置项和若干个测试步骤,全局配置项作用域为整个测试用例,测试步骤对应单个测试步骤,作用域仅限于本身。

脚本生成单元30,用于通过fiddler程序抓包,并将抓取到的数据包导入到httprunner中生成测试脚本。

在本实施例中,通过fiddler程序抓包,将所抓取的数据包导出为har格式,另存到httprunner目录里面,具体为testsuites目录里面对应testcases层级的modules子层级,然后在httprunner中进入相应目录用har2case命令将har格式的数据包转换为yaml格式的数据包。通过使用fiddler程序抓包,然后转换格式,再导入到httprunner中,完成测试脚本编写工作,极大的降低脚本编写门槛,也提高了测试效率,也减少出错率。

在一实施例中,脚本生成单元30还用于:将被压测系统的ip和端口号在fiddler程序里面设置代理;通过fiddler程序抓包,获取被压测系统相应事务的各类请求和响应信息;将获取到的请求和响应信息以httparohive格式导出,并另存为har格式;将har格式的数据包另存于httprunner的testcases目录中;在testcases目录中将har格式的数据包转换为yaml格式,生成测试脚本。

在本实施例中,安装fiddler程序,根据被压测系统的ip和端口号在fiddler程序里面设置代理,然后通过fiddler程序抓包,获取被压测系统相应事务的各类请求和响应信息,然后将所抓的数据包选择httparohive格式导出,另存为har格式,并将har格式的数据包导入到httprunner目录里面,具体为testcases目录层级下的modules子层级,然后在httprunner中进入相应目录,并使用har2case命令将har格式的数据包转换为yaml格式,生成测试脚本。其中,生成的测试脚本内容包含测试用例脚本名称和客户端向服务器端的请求,请求包含请求头信息、请求的url、请求方法和请求参数等。

之后添加关联参数,并设置检查点,用task装饰器来设置事务,task装饰器可以做嵌套,用task装饰器装饰某些方法为一个任务,数字表示一个locust实例被挑选执行的权重,数值越大,执行频率越高。

进一步地,用min_wait和max_wait来设置执行任务过程中的等待时间,用weight来设置事务之间的权重,通过这些方式来增强脚本健壮性。这样,就无需编写笨重的ui或者臃肿的xml代码,基于协程而不是回调,脚本编写简单易读,极大的降低脚本编写门槛,也提高了测试效率,也减少出错率。

同时,通过这种方式,使得locust完全是基于事件驱动的,因此在单台机器上能够支持大并发,与其它许多基于事件的应用相比,locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码,每个用户实际上运行在自己的greenlet中。由于python是跨平台的,故此测试脚本具有跨平台性,并且通过这种抓包转换格式再导入httprunner中的方式可以测试任何协议和系统。

模块封装单元40,用于封装日志模块和邮件模块,并引入用于定义测试报告的htmltestrunner和mkdocs程序。

在本实施例中,通过封装日志模块来记录的测试日志,通过封装邮件模块来将接收或发送邮件,同时,引入htmltestrunner和mkdocs程序,用于对测试报告进行定义,设定测试报告的输出格式和输出位置等等,便于用户后续进一步调用并使用测试报告。

在一实施例中,模块封装单元40还用于:在python中新建通用模块,并分别封装用于记录日志的日志模块和用于发送/接收邮件的邮件模块;引入htmltestrunner和mkdocs程序,定义测试报告的报告样式,报告名称和报告内容。

在本实施例中,在python里面新建通用模块,然后分别封装日志和邮件模块,分别用于记录日志和发送接受邮件。日志模块里面创建2个handler,一个是filehandler,一个是streamhandler,设置输出格式和日志级别,使用addhandler方法把handler添加到logger,将log同时写入文件和输出到控制台,方便实时查看信息和跟踪定位问题。邮件模块中设置有send_mail方法,发送和接收邮件,生成包含多个邮件体的对象msg,定义邮件发件人、收件人、主题及内容。

在本实施例中,引入htmltestrunner,编写相应代码定义stream、测试套件用例执行方式等。安装mkdocs,将数据卷挂载到搭载测试报告的本机ip,通过守护进程的方式、将本地的8000端口映射容器的8000端口、数据卷挂载的方式运行起来。

新建mkdocs.yml文件,编写少量代码来定义报告样式,报告名称、报告内容等,代码中通过写入文件的方法,先打开mkdocs.yml文件,判断文件中是否存在当前写入的内容,定义相应的数据格式,测试报告要呈现的名称及内容。再在htmltestrunner中定义测试报告文件的绝对路径映射到mkdocs镜像中的路径。

执行获取单元50,用于执行测试脚本,并获取网页版测试日志和测试报告。

在本实施例中,执行测试脚本进行压测,并在测试过程中或者测试完成后,获取测试日志和测试报告,便于测试结果统一汇总和以备日后查看,以及通过分析一定时间范围内的测试日志和测试报告,可以更容易发现被压测系统潜在的性能问题。

参考图10,在一实施例中,执行获取单元50包括脚本执行模块51,性能测试模块52,实时获取单元53和完成获取单元54。

脚本执行模块51,用于在httprunner命令行中输入locust–f执行测试套件中的初始测试用例脚本。

性能测试模块52,用于在浏览器中输入被压测系统的ip和端口号打开locust的ui界面,于locust的ui界面设置性能测试场景的并发量和每秒新增用户数,并进行性能测试。

在本实施例中,通过在httprunner命令行中输入locust–f来执行测试套件里面的初始测试用例脚本,执行成功后即可在浏览器中输入压测系统的ip和端口号打开locust的ui界面,通过此界面来进行性能测试场景设置,输入并发量和每秒新增用户数,即可进行性能压测。

其中,压测过程中,可以人为通过locust的ui界面增加并发数。

同时,在进行压测时,可选择分布式执行测试脚本,基于1个主机和多个从机,主机负责分发任务,从机负责执行测试脚本。测试开始后,每个虚拟用户即locust实例的运行逻辑为:先执行websitetasks中的on_start(只执行一次),作为初始化;从websitetasks中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行;根据locust类中min_wait和max_wait定义的间隔时间范围(如果taskset类中也定义了min_wait或者max_wait,以taskset中的优先),在时间范围中随机取一个值,然后休眠等待;重复不断执行,直至测试任务终止。

实时获取模块53,用于在性能测试过程中,实时获取测试日志。

完成获取模块54,用于在性能测试完成之后,获取测试日志和测试报告并存储。

在本实施例中,测试过程中可以在python命令行窗口中查看日志,测试脚本运行完毕后可直接在本地日志文件中查看测试过程中的测试日志信息,而测试报告可在htmltestrunner定义的测试报告路径中查看。本方案可实时记录性能测试过程中动态呈现的测试数据和执行情况,便于测试结果统一汇总和以备日后查看。另外,相比于肉眼的观察,通过分析一定时间范围内的测试数据,可以更容易发现被压测系统潜在的性能问题。

本发明通过fiddler抓包,然后将所抓的包导出为har格式,继续转换为yaml格式,再导入到httprunner中的方式来完成脚本编写工作,极大的降低脚本编写门槛,也提高了测试效率,也减少代码出错率;可以在性能测试执行过程中,于locust的ui界面增加并发数,无需等测试执行完后再设置并发数;python中封装日志模块和邮件模块,引入htmltestrunner和mkdocs程序,实现性能测试过程中的测试日志的实时输出,以及测试完成后测试报告网页化,同时测试日志和测试报告存储到本地,方便查阅以及以备日后查看。

需要说明的是,所属领域的技术人员可以清楚地了解到,上述基于python的性能测试装置和各单元的具体实现过程,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。

请参阅图11,图1是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备500可以是终端,也可以是服务器,其中,终端可以是智能手机、平板电脑、笔记本电脑、台式电脑、个人数字助理和穿戴式设备等具有通信功能的电子设备。服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。

参阅图11,该计算机设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。

该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032包括程序指令,该程序指令被执行时,可使得处理器502执行一种基于python的性能测试方法。

该处理器502用于提供计算和控制能力,以支撑整个计算机设备500的运行。

该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行一种基于python的性能测试方法。

该网络接口505用于与其它设备进行网络通信。本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备500的限定,具体的计算机设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

其中,所述处理器502用于运行存储在存储器中的计算机程序5032。

应当理解,在本申请实施例中,处理器502可以是中央处理单元(centralprocessingunit,cpu),该处理器502还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。该计算机程序包括程序指令,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。该程序指令被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。

因此,本发明还提供一种存储介质。该存储介质可以为计算机可读存储介质。

所述存储介质可以是u盘、移动硬盘、只读存储器(read-onlymemory,rom)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。

该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1