jmeter之以openfire为例介绍xmpp协议测试

时间:2024-03-25 18:45:16

测试脚本:

准备

首先,官网下载压缩包,和安装其他插件一样,解压到lib/ext目录下后,重启JMeter得到下图所示:
jmeter之以openfire为例介绍xmpp协议测试

在配置元件里,可以看到XMPP Connection和XMPP Sampler,表示插件安装成功。(http://pan.baidu.com/s/1dFeV5uD 我的百度网盘jmeter3.1b直接可以用,不用去下载了)

在创建XMPP Sampler之前,首先要创建一个XMPP Connection,下面我们看一下这个元件要填写的参数的含义:
jmeter之以openfire为例介绍xmpp协议测试
1. Server Address:
指的是部署XMPP服务的IP地址或者是可以访问的机器名
2. Port:
指的是the standard port for clients to connect to the server
3. Service Name:
指的是XMPP服务的域名,如果是openfire指的就是
jmeter之以openfire为例介绍xmpp协议测试
4. Transport:
这里有两个选项TCP和BOSH,是客户端与服务器端建立连接用的一种协议

创建一个XMPP Sampler

  1. 连接服务器,选择如下图的选项:
    jmeter之以openfire为例介绍xmpp协议测试
  2. 用户登录
    jmeter之以openfire为例介绍xmpp协议测试
  3. 发送在线状态
    jmeter之以openfire为例介绍xmpp协议测试
  4. 加入房间
    jmeter之以openfire为例介绍xmpp协议测试
  5. 断开连接
    jmeter之以openfire为例介绍xmpp协议测试
  6. 发送消息
    jmeter之以openfire为例介绍xmpp协议测试
  7. 接收消息
    jmeter之以openfire为例介绍xmpp协议测试
    运行接收脚本之后,在查看结果树中,可以看到收到的message包,包含接收到的消息内容。

在Linux运行脚本,接收消息确认

在Linux环境运行发送和接收脚本,接收消息日志级别设置全日志,可以收到message包,但是无法收集到消息体。解决方案如下:
1. 接收消息日志级别设置全日志,可根据“lb=”Message” rc=”200” rm=”OK””统计接收到的包的数量;
2. 使用Linux抓包命令tcpdump,抓取数据包,确认发送消息内容:
- 使用ifcongig命令查看网卡信息
- 使用tcpdump -i 网卡 -w 文件名.cap 抓取经过网卡的数据包,保存
- 使用wireshark打开此文件,找到message包,查看数据
使用Linux抓包命令tcpdump -i em1 -w tcpcap1.cap抓取数据包,在wireshark中打开,找到message包,查看包中的数据

扩展

tcpdump命令

默认启动

tcpdump
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

监视指定网络接口的数据包

tcpdump -i eth1
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 

监视指定主机的数据包

打印所有进入或离开sundown的数据包.
tcpdump host sundown
也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump host 210.27.48.1
截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname
监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname

监视指定主机和端口的数据包

如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1
对本机的udp 123 端口进行监视 123 为ntp的服务端口
tcpdump udp port 123

tcpdump 与wireshark

Wireshark是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
1. tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
2. -i eth1 : 只抓经过接口eth1的包
3. -t : 不显示时间戳
4. -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
5. -c 100 : 只抓取100个数据包
6. dst port ! 22 : 不抓取目标端口是22的数据包
7. src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
8. -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

使用wireshark分析cap文件

使用Wireshark打开获取到的cap文件
jmeter之以openfire为例介绍xmpp协议测试
上端面板每一行对应一个网络报文,默认显示报文接收时间(相对开始抓取的时间点),源和目标IP地址,使用协议、数据包长度和报文相关信息。点击某一行可以在下面两个窗口看到更多信息。“+”图标显示报文里面每一层的详细信息。底端窗口同时以十六进制和ASCII码的方式列出报文内容。

首先我们在Filter处填写ip.addr eq 192.168.2.101。表示获取来源ip以及目的ip都是192.168.2.101的数据包。(此处解释 eq 换成==同样的效果)

在Filter处填写:ip.src == 192.168.2.101。表示获取来源地址为192.168.2.101的数据包。

在Filter处填写:ip.dst == 119.167.140.103。表示获取目的地址为119.167.140.103的数据包。

在Filter处填写:ip.dst == 119.167.140.103 or ip.dst == 192.168.2.45。表示获取目的地址为119.167.140.103或者192.168.2.45的数据包。(此方法举例主要说明or的用法。在or前后可以跟不同的表达式。)

在Filter处填写:ip.dst == 119.167.140.103 and ip.src == 192.168.2.101。表示获取目的地址为119.167.140.103且来源地址为192.168.2.101的数据包。(此方法举例主要说明and 的用法)

本次测试疑难问题

  1. 主机172.20.0.122上运行不起来jmeter:
    使用root用户在hosts文件中添加 ip和主机名的对应
    jmeter之以openfire为例介绍xmpp协议测试

  2. jmeter运行过程中报outofmemory
    a.修改jmeter文件中heap
    b.linux环境下,修改jmeter.sh:
    java JVMARGSXms1GXmx5GXX:MaxPermSize=512mDapple.laf.useScreenMenuBar=truejardirname0`/ApacheJMeter.jar "[email protected]
    增大“-Xmx5G”中的大小