是资源分配的最小单位,一旦创建了一个进程就会分配一定的资源,它是操作系统进行资源分配和调度运行的基本单位。
举例,一个正在运行的程序就是一个进程,如微信,浏览器
注意:一个程序至少有一个进程
一个进程中最少有一个线程来负责执行程序,同时线程自己不拥有系统资源,但是它可与同属一个进程的其他线程共享进程所拥有的全部资源,在进程中会默认有一个线程用来执行程序,这个线程为主线程,在进程创建一个新的线程这个线程称之为子线程
线程是系统调度的单位,是程序执行时的最小单位。它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。
线程是程序执行的最小单位,实际上进程只负责分配资源。而利用执行资源执行程序的是线程,也就是说进程是线程的容器。
多线程是pyhton程序中实现多任务的一种方式
又称微线程,协程是程序级别的,由程序员根据需要自己调度。协程无需线程上下文切换的开销,只是单纯的操作CPU的上下文,所以资源占有率很小。缺点是协程阻塞时可能会使整个程序都阻塞。
Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。
Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户。
Locust 是完全基于时间的,因此单个机器支持几千个并发用户。相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent。
- from flask import Flask # 导入Flask类
-
- app = Flask(__name__) # 实例化flask
-
-
- @app.route('/HelloWorld') # 使用路由,给 hello 函数定义一个路由,然后游览器通过http,访问路径,请求页面返回的页面数据
- def hello():
- print('1')
- return 'Hello, World!'
-
-
- if __name__ == '__main__':
- app.run()
- # 导入locust的HttpUser,TaskSet和task类
- from locust import HttpUser, TaskSet, task
-
- # 定义用户行为(测试用例)
- class IndexTask(TaskSet):
- #模拟的用户行为
- @task()
- def index(self):
- self.client.get('/HelloWorld') # 访问接口路径
-
- class WebSiteUser(HttpUser):
- tasks = [IndexTask]
- min_wait = 1 # 每个请求的最短等待时候
- max_wait = 5 # 每个请求的最长等待时候
- host = 'http://127.0.0.1:5000' # 指定要访问的根本网址
locust -f .\test1.py --host=http://127.0.0.1:5000
Number of users (peak concurrency):设置模拟的用户总数
Spawn rate (users started/second):每秒启动的虚拟用户数
host:压测的地址
Start swarming:执行locust脚本
Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
90%ile:90%响应时间,单位为毫秒
99%ile:99%响应时间,单位为毫秒
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Average Size:所有请求的数据量,单位为字节;
Current RPS :每秒钟处理请求的数量。
Current Failures/s:每秒钟处理请求失败的数量。
在Chart 可以看到每秒请求总数( Total Requests per Second)和响应时间(Response Times)的详细图表
Failures 显示了在测试过程中出现的所有错误和数据的统计信息。
Exceptions 实时显示抛出的异常
Tasks 显示了性能测试过程中的所有信息
Dowbload Data 可以下载各种格式的数据里面包含请求数据,响应数据及捕获的异常等
locust -f .\test1.py --host=http://127.0.0.1:5000 --headless -u 1 -r 1 --run-time 1m
-f :用于指定的测试脚本
--host :被测路径的URL
--headless:表示无UI启动
-u:等同UI界面里的 Number of users (peak concurrency):设置模拟的用户总数
-r:等同UI界面里的 Spawn rate (users started/second):每秒启动的虚拟用户数
--run-time:用于设置测试运行的时长,可参考如下
- -u 1000 用户数1000
- -r 100 每秒孵化/新增100个用户
- -t 1m 运行1分钟
- -t 1h 运行1小时
- -t 1h1m 运行1小时1分
locust -f .\test1.py --host=http://127.0.0.1:5000 --headless
-u 1 -r 1 --run-time 1m --csv=exaple
- import locust.stats
- # 默认为2秒
- locust.stats.CSV_STATS_INTERVAL_SEC = 3
exaple_exceptions.csv,exaple_failures.csv,exaple_stats.csv,exaple_stats_history.csv
日志的级别分别为DEBUG,INFO,WARNING,ERROR和CRITICAL,默认为INFO,如果不设置--logfile 默认把日志输出至终端
locust -f .\test1.py --host=http://127.0.0.1:5000 --headless -u 1 -r 1 --run-time 1m --loglevel
=INFO --logfile=test