本帖最后由 测试积点老人 于 2018-11-27 16:38 编辑
- 一、locust简介
- 1、locust作为一款性能测试工具,没有单独的ui界面,可以说是python下的一些库的集成
- locust完全基于python作为编程语言,采用pure python描述测试脚本,其中的http请求也是完全基于Requests库,除了HTTP/HTTPS协议,locust也可以测其他协议的系统,只需要采用python调用对应的库进行请求描述即可,可以说python对应的库还是非常齐全的。
- 2、与jmeter相比较而言,locust更加的轻量化,采用的是不同于jmeter中进程和线程的处理机制(协程【微线程】),有效避免了系统的资源调度,由此可以大幅度的提高单击系统的并发能力
- 3、Github地址:https://github.com/locustio/locust注:如果想查看python下依赖了哪些库的话,可以进入github,点击setup.py进入查看(如下图)
-
- 上述标红的地方就是依赖的第三方库及支持版本(详细的介绍见下方),安装这些库的时候也应遵循其显示的版本号,如果与当前支持的版本号不一致或者小于当前版本号的时候就会安装失败。
- 4、locust组成模块(所依赖的库)【gevent】是python下实现协程的一个第三方库,能够使系统获取极高的并发性能(locust基础模块)
- 【flask】python下的web开发框架(由于locust只是集成库,没有界面,所以需要web框架作为该工具的ui界面展示)
- 【request】接口测试所用的模块(locust做并发的时候会利用request库向服务器发送请求)
- 【msgpack-python】这是一种快速的、紧凑的二进制序列化格式,适用于类似JSON格式的数据
- 【six】提供一些简单的工具用来封装python2和python3之间的差异性
- 【pyzmq】如果有用于运行locust分布在多个进程/机器的打算,需要安装pyzmq
- 二、locust安装(windows)
- 注:下面所有库的安装均在cmd中安装,可以用电脑本身的命令终端,也可以用cmder进行安装
- 1、python安装
- 网址:https://www.python.org/进入上述网址进行下载安装,版本没有要求(python2/python3都是可以的),这里以版本3.6.2为例
- 安装完成后记得配置环境变量,然后进入cmd执行python命令查看是否安装成功,安装成功界面:
-
-
- 2、pip安装(python的包管理工具,没有pip则不能安装第三方库)
- python有两个主流的包管理工具easy_install.py和pip,easy_install.py是安装python的时候默认安装的,而pip仅以zip文件的形式保存的python目录中,需要我们手动的安装
- 【命令】:E:\python\Scripts\pip.exe
- 这里的路径为你安装的python路径,找到安装目录中\Scripts文件夹下pip文件即可安装pip(这里已经安装好了)
-
-
- 3、gevent库的安装
- 【命令】: E:\python\Scripts\pip.exe install gevent
-
-
- 4、flask库的安装
- 【命令】:E:\python\Scripts\pip.exe install flask
- 注:如果不知道版本号可以直接安装flask包,系统会安装不同版本的包(不建议使用)
-
-
- 5、request库的安装
- 【命令】:E:\python\Scripts\pip.exe install requests==2.18.1
-
- 注:安装库的时候若不知道版本号,可以直接输入命令E:\python\Scripts\pip.exe install requests== 从报错信息中查看所有的版本号(建议安装最新的版本)
-
-
- 6、msgpack-python库的安装
- 【命令】:E:\python\Scripts\pip.exe install msgpack-python==0.4.8
-
-
- 7、six库的安装
- 【命令】:E:\python\Scripts\pip.exe install six==1.11.0
-
-
- 8、pyzmq库的安装
- 【命令】:E:\python\Scripts\pip.exe install pyzmq
-
-
- 9、locust的安装(最后一步)
- 【命令】:E:\python\Scripts\pip.exe install locustio
-
-
- 10、报错信息整理
- 在安装过程中由于环境、版本等因素可能会出现一些问题,下面是针对我自己安装过程中出现的报错及解决方案简单的整理了一下
复制代码
【问题】没有追加对应的版本号导致没有找到有用的版本 【解决】添加可用的版本号
【问题】追加了不存在的版本号 【解决】报错提示中会列举目前可用的版本号,从列举中选取一个即可(推荐用最新版本)
【问题】命令格式书写不正确,读取位置发生异常 【解决】正确格式:pip install 库名==版本 (库名与版本之间没有空格,否则会默认读取空格后的字符然后报错)
【问题】抛出版本异常,可能是版本问题,也可能是不兼容的问题 【解决】更换其他版本即可
【问题】管理包编辑失败,也可能出现安装到最后出现失败的情况 【解决】针对上述方法更换版本后仍报错,可去掉版本号,直接安装库即可
下面是在网上统计出来的常见报错信息(但是我没遇到),这里也贴出来好了,以防万一
【报错1】 ReadTimeoutError: HTTPSConnectionPool(host=’pypi.python.org’, port=443): Read timed out 解决方法:更新pip版本到pip官网下载:https://pypi.python.org/simple/pip/,下载完成后安装最新版本,也可以用我上面的方法根据报错信息找到最新的版本号
【报错2】 安装locustio时出现(linux下):error:command ‘gcc’ failed with exit status 1 解决方法:执行命令:yum install gcc python-devel 用yum包管理器安装安装gcc和python-devel这两个包,安装完成后再次安装locustio (这两个安装包是放在yum管理器下面的,pip不支持,所以要用yum来安装)
注:验证locustio是否已经安装成功 (1)、可以执行命令行【locust –-help】进行查看,出现相关的帮助文档说明已经安装成功 (2)、执行命令行【pip show locustio】进行查看 (3)、locust有两种安装方式,一种就是上面写的方式按照库名分别进行安装,另一种方法可以直接去github上把整个项目下载下来,然后通过命令行【python setup.py install】进行整个项目的安装(这个我没用过)
三、测试脚本(访问指定域名) #locust_baidu.py #!/usr/bin/env python #-*-coding:utf-8-*- #authorTT #引用locust库下面的三个类,http请求、任务设置、任务模块 from locust import HttpLocust, TaskSet, task #定义用户行为 class UserBehavior(TaskSet): @task #装饰器 def baidu_page(self): #定义一个方法访问指定域名 self.client.get("/")#调用客户端并发送一个get请求 class WebsiteUser(HttpLocust): task_set = UserBehavior min_wait = 3000 #用户等待时间下限 max_wait = 5000 #用户等待时间上限
四、locust启动服务
【命令】locust -f baidu.py --host=https://www.baidu.com/注:-f 指定文件名称 --host 指定host路径,此处的链接与上面脚本中的“/”进行拼接 1、第一行显示locust启动并部署在localhost:8089的域名中,且占用了本地8089的端口号 2、第二行显示当前所启动的locust版本信息
五、执行locust
1、浏览器访问本地端口号8089,进入flask库生成的web页面
2、设置虚拟用户数(Number of users to simulate),每秒钟要启动的用户数(Hatch rate (users spawned/second))
3、运行
【主页面】
注:content size:请求页面大小(和响应时间有关,数值越大说明页面上面显示元素就越多,请求响应时间就越长,反之,数值越小就说明页面上显示的元素就越少,请求响应时间就越短)
【图表页面】
【导出页面】
结语: 上面的所有内容并没有什么高深的地方,仅仅是一个菜鸟在公司做的技术分享的稿子而已,学习也不过一周的时间,里面肯定有很多不妥之处,这里也算抛砖引玉吧,有什么错误的地方,烦请指出,在此谢过。 至于为什么会有这篇文章,主要是项目结束后太无聊了,无意间看到@虫师的一个视频教程,才认识到locust,后来自己跟着视频学习了一遍,又花了一周的时间去恶补了一下,感觉并不难,并且能够填上公司性能测试的空缺,所有临时决定拿出来做一个技术分享,然后把分享的稿子贴到这里而已,主要是看到关于locust详细的教程并不是很多,同时也希望自己的帖子能够给您一丝丝的帮助
|