返回介绍

HTTP协议

发布于 2023-06-19 20:49:11 字数 12125 浏览 0 评论 0 收藏 0

适用业务范围

HTTP协议的接口,简单接口

执行机制

  1. ab是apache自带的一个组件,不用重新安装了。当然,也可以自己单独安装apache bench。

  2. ab 常用参数介绍

    • -n: 总共的请求数(1000),缺省是1,不超过1024个,否则需要修改系统进程限制
    • -c: 并发数(10),缺省值是1
    • -t: 测试所进行的总时间,秒为单位,缺省50000s
    • -p: POST时的数据文件
    • -i: 执行HEAD请求
    • -k: 启用KeepAlive功能
    • -w: 以HTML表的格式输出结果
    • 其他通过 ab -h 来查看
  3. 执行结果介绍

    //输了一个测试指令
    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/")

执行机制

  1. 测试开始后,每个虚拟用户(Locust实例)的运行逻辑都会遵循如下规律:
  2. 先执行WebsiteTasks中的on_start(只执行一次),作为初始化;
  3. 从WebsiteTasks中随机挑选一个任务执行(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选);
  4. 根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待;
  5. 重复2~3步骤,直至测试任务终止。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文