HTTP协议
适用业务范围
HTTP协议的接口,简单接口
执行机制
ab是apache自带的一个组件,不用重新安装了。当然,也可以自己单独安装apache bench。
ab 常用参数介绍
- -n: 总共的请求数(1000),缺省是1,不超过1024个,否则需要修改系统进程限制
- -c: 并发数(10),缺省值是1
- -t: 测试所进行的总时间,秒为单位,缺省50000s
- -p: POST时的数据文件
- -i: 执行HEAD请求
- -k: 启用KeepAlive功能
- -w: 以HTML表的格式输出结果
- 其他通过 ab -h 来查看
执行结果介绍
//输了一个测试指令 mijiaweideMacBook-Air:~ micky$ ab -n 20 -c 2 http://www.xxxx.com/ //开始测试请求,并一次性展示结果 This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.xxxx.com (be patient).....done Server Software: Server Hostname: www.xxxx.com Server Port: 80 Document Path: / Document Length: 85 bytes Concurrency Level: 2 Time taken for tests: 0.975 seconds Complete requests: 20 Failed requests: 0 //失败的请求数 Non-2xx responses: 20 Total transferred: 23000 bytes //传输量 HTML transferred: 1700 bytes Requests per second: 20.52 [#/sec] (mean) //即 RPS Time per request: 97.475 [ms] (mean) //即 平响时间 Time per request: 48.738 [ms] (mean, across all concurrent requests) Transfer rate: 23.04 [Kbytes/sec] received //网络消耗分解 Connection Times (ms) min mean[+/-sd] median max Connect: 27 28 1.5 28 34 Processing: 51 67 11.4 64 91 Waiting: 50 67 11.4 64 90 Total: 81 95 11.4 93 120 //以下是所有请求的相应情况 Percentage of the requests served within a certain time (ms) 50% 93 66% 100 75% 101 80% 105 90% 117 95% 120 98% 120 99% 120 100% 120 (longest request)
案例
$ ab -k -n 100000 -c 500 -H “Accept-Encoding: gzip, deflate, sdch”-H “User-Agent:Mozilla/5.0 (iPhone;CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko)Mobile/14C92 QQ/7.0.0.3002_GrayThree_309592_04-27_23:04V1_IPH_SQ_7.0.0_5_HDBM_T Pixel/750 Core/UIWebView NetType/WIFI QBWebViewType/1” -C“uin=o0369491785;[email protected];” http://10.51.170.39/sport/home?_wv=2163715
上述命令的含义:
在长连接状态下,模拟移动端,请求头带gzip压缩,并且带登录态,一次 500 个并发,总请求量为 100000,向指定机器 IP 和页面的URL 发送请求。
URL 也可以是域名,本地配置HOST 指向要压测的机器IP 也可以~
适用业务范围
HTTP协议的接口,复杂前置处理接口
项目地址
https://gitlab.xxxxxcn/auto-testing/LocustInn
简介
- 基于压力负载测试框架
locust
的封装
- 不改变所有Locust框架本身的命令
- 打开master与打开slave并指明slave数量可以使用一条指令
- 能更简单的向remote slave重写测试脚本
- slave能将master本地的文件下载下来
- 已经添加demo_task.py、demo_task2.py供参考
脚本介绍
class HttpLocust(Locust)
在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力。在使用Locust时,需要先继承Locust类,然后在继承子类中的client属性中绑定客户端的实现类。 对于常见的HTTP(S)协议,Locust已经实现了HttpLocust类,其client属性绑定了HttpSession类,而HttpSession又继承自requests.Session。因此在测试HTTP(S)的Locust脚本中,我们可以通过client属性来使用Python requests库的所有方法,包括requests.Session的使用,因此client的方法调用之间就自动具有了状态记忆的功能。
def on_start(self): #在登录后可以维持登录状态的Session,从而后续HTTP请求操作都能带上登录态
self.client.post("/oz/login", {
"identity": "zhanghao",
"password": "zheshimima"
})
@task(1) #登录后打开个人中心
def index(self):
self.client.get("/w/posts")
max_wait/min_wait: 每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间固定为1秒; host:被测系统的host,当在终端中启动locust时没有指定--host参数时才会用到;
class WebsiteUser(HttpLocust):
host = 'http://baixxxxxxxxxing.com'
task_set = WebsiteTasks
min_wait = 1000
max_wait = 3000
class TaskSet
性能测试工具要模拟用户的业务操作,就需要通过脚本模拟用户的行为。 TaskSet类实现了虚拟用户所执行任务的调度算法,包括规划任务执行顺序(schedule_task)、挑选下一个任务(execute_next_task)、执行任务(execute_task)、休眠等待(wait)、中断控制(interrupt)。 在TaskSet子类中采用非常简洁的方式来描述虚拟用户的业务测试场景,对虚拟用户的所有行为(任务)进行组织和描述,并可以对不同任务的权重进行配置。
采用@task装饰器定义任务信息
@task(1) #一共2个task,根据写的顺序依次执行,执行权重为1/3
def index(self):
self.client.get("/")
@task(2) #此task权重为2/3
def about(self):
self.client.get("/post/")
执行机制
- 测试开始后,每个虚拟用户(Locust实例)的运行逻辑都会遵循如下规律:
- 先执行WebsiteTasks中的on_start(只执行一次),作为初始化;
- 从WebsiteTasks中随机挑选一个任务执行(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选);
- 根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待;
- 重复2~3步骤,直至测试任务终止。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论