Locust深度剖析之开篇/索引
2017-11-21T03:47:18    2057    0    0

Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。

它的主要思想就是模拟一群用户将访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为。

Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问。

与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码。

每个用户实际上运行在自己的greenlet中。

本系列文章将详细的从Locust的源码到应用进行剖析!

首先,我们将来了解一些Locust的目录结构吧:

 

目录结构

在讲解Locust目录结构之前,我们先简单的来了解一下Locust是如何进行安装的吧。

和大部分的Python第三方库一样,Locust支持使用pip包管理器执行进行安装:

pip install locust

安装完成后,我们进入第三方库文件夹下,找到locust文件夹。

打开该文件夹后,Locust的源码下载后目录结构如下:

其中,static和templates表示的是页面服务的前端代码。(Locust本身提供了一个简单的Web页面可用启动、停止与监控性能测试)

test文件夹包含的是单测代码。

这几个文件相对独立,我们放在最后进行讲解。

rpc文件夹中包含了一些远程协议调用直接的类,主要与分布式运行相关

分析详情:未完待续,敬请关注。

下面,我们依次讲解下其余每个模块的作用吧:

 

模块描述

1. main.py模块是整个的入口

包含了如下功能:命令行参数解析;Locust文件查找与判断;Locust文件加载与Locust服务启动(包括Web端,命令行与分布式等)。

分析详情:http://www.missshi.cn/api/view/blog/59a6b53fe519f50d04000105

2. web.py模块是一个基于Flask的一个Web Server服务

包含的核心功能就是提供了一个Server服务的Web页面,用在在页面启动、停止与监控性能测试。

分析详情:http://www.missshi.cn/api/view/blog/5a0a5c5b483c567540000001

3. log.py模块是整个服务的日志管理系统

分析详情:未完待续,敬请关注。

4. cache.py模块对缓存机制进行相关配置,主要用于WebServer中作为装饰器

分析详情:http://www.missshi.cn/api/view/blog/5a0ae5af483c561314000000

5. clients.py模块包含了两个核心类:HttpSession和ResponseContextManager,两者分别是对requests.Session和requests.Response进行封装得到的。

分析详情:http://www.missshi.cn/api/view/blog/5a129ef9600fb76a59000001

6. core.py模块是整个Locust的核心部分代码,包含了HttpLocust类和TaskSet类等。

分析详情:http://www.missshi.cn/api/view/blog/5a139c7f9112b349bc000001

7. events.py模块包含了一个事件类,主要用于为不同的事件提供Hooks

分析详情:未完待续,敬请关注。

8. exception.py模块是异常处理模块,包含了对各种不同异常的继承和处理。

分析详情:未完待续,敬请关注。

9. inspectlocust.py模块中包含了三个函数,主要是用于获取/打印task的状态

分析详情:http://www.missshi.cn/api/view/blog/5a129b68600fb76a59000000

10. runners.py模块是另一个核心模块,主要控制着性能测试的运行机制。包含了本地运行,分布式运行等。

分析详情:http://www.missshi.cn/api/view/blog/5a0aef86483c561314000002

11. stats.py模块是用于获取当前性能测试过程中数据状态的模块。

分析详情:http://www.missshi.cn/api/view/blog/5a0aec0d483c561314000001

可以根据Link链接来详细了解每个模块的功能。

 

功能优化:

目前,在使用Locust的过程中,发现了一些功能还有较大的优化空间:

1. 没有实现集合点的功能;

解决方案:未完待续,敬请关注。

2. 没有事务的概念,时间统计是按照接口统计,与事务无法,无法直接体现出事务的耗时;

解决方案:未完待续,敬请关注。

3. 对于Restful格式的接口,在url中如果包含参数,那么在性能测试过程中,不同的参数会认为是不同的url,没有进行聚合。

解决方案:未完待续,敬请关注。


使用实例:

下面,用几个实例来讲解一下如何使用Locust进行性能测试吧:

基本使用Demo:未完待续,敬请关注。

涉及登录用法Demo:未完待续,敬请关注。

参数化Demo:未完待续,敬请关注。

嵌套使用Demo:未完待续,敬请关注。

上一篇:

下一篇: Locust深度剖析之main.py模块详解

0条评论