文档章节

Tsung学习笔记(HTTP篇)

A
 Aetherus
发布于 02/11 19:23
字数 1382
阅读 290
收藏 4

先来测一个静态网页。

这里可以算tsung的文档最坑的地方了。如果你照着官网上的入门指南一步一步做下来,我可以告诉你一定跑不通!理由是,tsung给出的工具tsung-recorder生成的配置文件不是完整的配置文件!! 如果你想入门,请忘了tsung-recorder,并严格按照以下步骤操作,否则后果就是各种运行时异常。

1. 创建文件 ~/.tsung/tsung.xml

内容如下:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung>
  <clients>
    <!-- 在这里添加测试主机(客户端) -->
  </clients>

  <servers>
    <!-- 在这里添加被测试的主机(服务端) -->
  </servers>

  <load>
    <!-- 在这里添加加载过程配置 -->
  </load>

  <sessions>
    <!-- 在这里添加会话(即一系列HTTP请求) -->
  </sessions>
</tsung>

以上是tsung最小配置的骨架,里面的东西一个都不能少,而且必须按照这个顺序来配置!!(该死的官方文档,读的时候有一种只见树木不见森林的赶脚)。

2. 添加客户端

一个客户端(client)是一个系统进程(Erlang/Elixir程序员注意,是系统进程,不是BEAM进程。一个系统进程就是一个Erlang虚拟机)。

<clients>
  <client host="localhost" cpu="4" maxusers="30000"/>
</clients>

这里定义了一个客户端,它在localhost这台主机上开4个进程同时发送请求。最好把cpu的值设得和该主机的CPU数量相等,太低无法完全利用测试主机性能,太高则有一些并发问题。Tsung保证会把这些进程分配到不同的CPU内核上。注意:即使客户端开在本机上,Tsung也会通过SSH远程开启进程,而且不会使用密码。所以请确保SSH配置为PublicKey验证,并且把localhost加进known_hosts。 如果实在不想用SSH开新进程,可以配成下面这样:

<client host="localhost" use_controller_vm="true" maxusers="30000"/>

参数maxusers设置了这个客户端最多可同时虚拟多少个用户,也就相当于并发量啦。注意,如果这个数值大于你的ulimit -Sn,则tsung会开多个系统进程来确保这个数值。

3. 添加服务端(被测试主机)

服务端的配置相对简单:

<servers>
  <server host="localhost" port="80" type="tcp"/>
</servers>

由于服务端(被测试)的应用可以是任何HTTP应用,所以没有Erlang进程的配置,熟悉HTTP的朋友应该一目了然了。

4. 添加加载过程配置

所谓的加载过程,就是在多长时间内生成多少(虚拟)用户。

<load>
  <arrivalphase phase="1" duration="1" unit="minute">
    <users arrivalrate="10000" unit="second"/>
  </arrivalphase>
</load>

这里定义了一个用户到达阶段(arrival phase),这个阶段的总时长是1分钟,在这一分钟里,每秒钟会有1万个虚拟用户来访问。你可以添加更多阶段,在每个阶段配置更多种用户到达模式。

5. 添加会话

所谓会话,就是每个用户先后做哪些事情,对于HTTP的测试,当然就意味着发请求,收响应。Tsung对每个会话会自动管理cookie。

<sessions>
  <session name="s1" type="ts_http">
    <request>
      <http url="/" method="GET" version="1.1"/>
    </request>
    <thinktime min="2" max="10" random="true">
  </session>
</session>

在这个例子里,每个用户的会话会做两件事:

  1. 发送一个HTTP 1.1的GET请求到/,并接收响应
  2. 收到响应后,“想”了一会儿(可以用来模拟阅读网页的时间),时间从2秒钟到10秒钟不等(均匀分布)

至此,整个配置完成。下面是完整的配置文件(~/.tsung/tsung.xml)的内容:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung>
  <clients>
    <client host="localhost" cpu="4" maxusers="30000"/>
  </clients>

  <servers>
    <server host="localhost" port="80" type="tcp"/>
  </servers>

  <load>
    <arrivalphase phase="1" duration="1" unit="minute">
      <users arrivalrate="10000" unit="second"/>
    </arrivalphase>
  </load>

  <sessions>
    <session name="s1" type="ts_http" weight="1">
      <request>
        <http url="/" method="GET" version="1.1"/>
      </request>
      <thinktime min="2" max="10" random="true"/>
    </session>
  </sessions>
</tsung>

关于weight=1这个配置,在单个session的情况下没有什么作用,但是还是得配。如果你有多种session,则weight表示每一种session的相对比例,例如你有两种session,s1:weight=1s2:weight=2,且一共有30000个用户,则其中10000个用的session种类是s1,20000个是s2。

如果想配成更高级的配置(例如随机请求参数、虚拟IP等)请参阅官方文档

6. 运行测试

接下来就让我们跑一下

$ tsung start

在跑的时候,我们可以打开浏览器,访问http://localhost:8091/来查看摘要。不过说实话,这东西没啥用,因为等测试跑完了,这个tsung的内置服务器也就关了(你可以用tsung -k start来阻止这个服务器自动关闭)。而且网页也不会实时更新,还得你手动刷。

注意看tsung命令行的提示信息,它会告诉你log出在什么位置,通常是~/.tsung/log/xxxx。这个很重要,因为我们马上要进到这个目录下去生成图表!

7. 生成可视化报告

首先cd到上述的log位置,然后运行下列命令:

$ tsplot "Nginx" ./tsung.log -d .

这会在当前目录下生成一堆图表,有连接数、用户数、请求数等,而且每个指标都有大小两张图。自己去看吧。如果你想把报告出到其他位置,只需要修改-d后的参数就行了。

© 著作权归作者所有

共有 人打赏支持
A
粉丝 0
博文 9
码字总数 7199
作品 0
如何生成每秒百万级别的 HTTP 请求?

第一篇:《如何生成每秒百万级别的 HTTP 请求?》 第二篇:《为最佳性能调优 Nginx》 第三篇:《用 LVS 搭建一个负载均衡集群》 本文是构建能够每秒处理 3 百万请求的高性能 Web 集群系列文章...

强子哥哥
2015/10/20
183
0
Spring.NET学习笔记——目录(原)

目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔记2——环境搭建(基础篇) Level 200 Sprin...

长平狐
2012/06/11
887
1
HTTP流程和Http Header

两篇让你理解HTTP 请求及 HTTP Header 的好文章: 1. http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/ 2. http://igoro.com/archive/what-really-happens-when-you-navig......

Huawu
2010/05/31
0
0
Tsung压力测试工具的搭建和使用,配置。

具体Tsung工具的应用是,模拟用户对某平台的访问,其中可以产生自定义数量的虚拟用户,当Tsung start启动后,虚拟用户产生,模拟访问测试的平台,得到压力数据,在平台生产和设计过程中查漏补...

射手Mr吴
2016/02/16
0
0
压力测试工具tsung用法简介

tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问。目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入研究过。 1、安装 tsung是用e...

今幕明
2014/07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[Python进阶] Python命令行参数

Python 获得命令行参数的方法 需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv[2] 解析命令行参数 Python提供了一个getopt模块,可用于解...

Eappo_Geng
31分钟前
1
0
add docker api url to jenkins

add docker api url to jenkins add jenkins to dockergroup gpasswd -a $USER docker gpasswd -a jenkins docker DOCKER_OPTS="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock" in ......

kewei_zhang
35分钟前
1
0
Scala入门篇

1、定义变量 var 可变 val 不可变,相当于Java中的final Unit相当于Java中的void,以()表示 scala> val a = println("ddd") ddd a: Unit = () 2,声明数组 scala> val arr = Array(1,2,3,4,5) ......

算法之名
35分钟前
8
0
利用redis统计分布式集群中接口缓存命中情况

接口使用了缓存,想看看缓存命中率,到底提升了多少了?固想到做个统计方法,单机情况下使用 AtomicImteger,考虑到分布式集群中多台服务器调用,所以考虑使用redis进行统计 原来的想法很简单用分布...

计算机的小二青年
35分钟前
2
0
前端加密JS库--CryptoJS 使用指南

有时候项目涉及到的敏感数据比较多,为了信息安全,我们常常需要对一些数据进行接口加密处理,如编码、将明文转化为暗文、加密比对、AES + BASE64 算法加密等。 Base64 编码 为什么要编...

舒龙虎
38分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部