zoukankan      html  css  js  c++  java
  • jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)

     

    转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html
    性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景。因而需要借助一些软硬件提供的特性来模拟近似的环境。本文提到的JMeter是一种开源的模拟测试解决方案,可以通过多线程并发的方式来持续提供压力测试源。
     
    1.下载安装
    仅仅需要从apache的网站找到下载包,解压到本地文件目录即可。
     
    2.启动
    解压目录中存在一个bin的目录,里面有很多批处理文件和脚本文件,window系统运行jmeter.bat即可。需要关注的是bin目录中的jmeter.properties文件,这是运行相关的配置文件. 特别是TCP Sampler configuration部分几个配置会和后面内容相关
     
    3.建立一种类型测试
    这里只描述简单的tcp测试建立步骤,因为目前支持的测试类型很多,无法一一陈述,功能细节部分可以参考JMeter文档
    1)创建测试线程组

    2)根据需要设定线程组参数

    3)建立TCP采样

    3)配置TCP采样参数

    基本上一个简单的测试计划就完成了,点击运行采样,就会将文本发送出去。


    4.高级功能配置
    1)配置结果查看监听器
    有时候需要查看线程组执行结果情况,这个可以通过设定采样结果查看
     
     
    针对上面配置的线程组应该执行6次,也就是发送6条消息,通过监控器可以看到的确有6个采样结果,说明执行成功
    2)配置变量
    有时候需要在报文中加上一些变化的内容,可以通过在文本中增加变量设定来实现


    如增加一个变量名 bank, 其值为 1111,在前面发送的报文中加上${bank}即可引用,如




    执行之后就可以在监控器中看到报文中有1111了

     
    3)配置TCP 二进制报文
    大多数情况下,报文可能非纯文本形式,常常都是不可读的二进制,所以这种情况下需要配置二进制报文。当前JMeter支持HEX形式,也就是16进制的报文输入配置
    当前支持三种格式 1.TCPClientImpl(默认) 2.BinaryTCPClientImpl 3.LengthPrefixedBinaryTCPClientImpl
     
    使用二进制方式需要做如下几件事:
    a.把普通文本报文翻译成HEX格式,可以找文本编辑器做这件事。比如notepad++,打开文本文件
    Ctrl+A全选内容,paste到一个新文件,替换掉所有空格
    3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e
     
     

    如果报文还需要加上头的话,需要额外计算一下。比如增加一个command id和报文长度。比如上文中文本长度在编辑器状态栏上显示155长,假定command id是1.
    System.out.println("155 hex " + Integer.toHexString(155));  --- 9b
    System.out.println("1 hex " + Integer.toHexString(1));  ---1
    如果command id是4个字节那么16进制字符串就是 00 00 00 01
    如果length也是4个字节那么16进制字符串就是 00 00 00 9b
    去掉空格加入到前面报文中就拼成如下新报文
    000000010000009b3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e
     
    再把新报文放入发送字符串输入框中。
     
    b.修改JMeter启动配置,就是前文提到的指定BinaryTCPClientImpl适配
    在jmeter.properties文件中找到如下部分,修改一下
    #---------------------------------------------------------------------------
    # TCP Sampler configuration
    #---------------------------------------------------------------------------
    # The default handler class
    #tcp.handler=TCPClientImpl
    tcp.handler=BinaryTCPClientImpl
     
    重新执行TCP测试,可以看到服务器端正常收到报文,如图

     

    jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求。

    TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应。

    jmeter模拟发送TCP请求的方法:

    1.新建线程组,然后在线程组中新建TCP采样器

    jmeter-tcp

    TCP采样器中填写服务器地址、端口和“要发送的文本”,其它选项根据需要选填:

    re_use connection表示重复发送连接请求

    close connection 关闭连接

    如果TCP请求需要用户名/密码,可以在登录配置中填写

    2.新建“察看结果树”监视器,查看发送的请求和响应的结果。如果需要发送16进制报文这个地方会失败。

    jmeter发送16进制TCP报文的方法:

    很多TCP服务器报文为16进制,并且多数不能转换成文本发送,而jmeter默认发送文本。

    jmeter.properties中修改tcp.handler=BinaryTCPClientImpl ,启动jmeter重新发送,抓包查看既是16进制的tcp报文。

    另一个方法:可以在工作台新建–非测试元件–Property Display,Property Display中修改jmeter.properties只对当前进程有效。

    转载请注明出处:6san.com
    原文地址: http://www.6san.com/716/

    Jmeter TCP取样器配置及发送图解

     

    最近在通过Jmeter测试TCP发送请求时,遇到相关问题,现记录

    查看管方文档,TCP发送有三种启用方式:

    • TCPClientImpl:文本数据,默认为这种
    • BinaryTCPClientImpl:传输16进制数据,指定包结束符。这种16进制文件会通过Jmeter GUI来转换
    • LengthPrefixedBinaryTCPClientImpl:数据包中前2个字节为数据长度。可在bin/jmeter.properties配置文件中tcp.binarylength.prefix.length设置。

    在实际抓包过程中,TCP的数据包很多时候都不是纯文本的,经常是一些二进制文件之类的,所以这里就直接用传16进制方式来传数据

    在启动jmeter之前,需要在在启动文件中设置,如下:

    #---------------------------------------------------------------------------
    # TCP Sampler configuration
    #---------------------------------------------------------------------------

    # The default handler class
    #tcp.handler=TCPClientImpl
    tcp.handler=BinaryTCPClientImpl
    #
    # eolByte = byte value for end of line
    # set this to a value outside the range -128 to +127 to skip eol checking
    #tcp.eolByte=1000

    关键来了,我怎么获取这个16进制数据呢?这里用wireshark可以很好解决这个问题,操作如下:

    下图是抓到的包,怎么抓包这里就不介绍了:

    第二步:右键点击Data--->Copy-->Bytes-->HEX Stream,如下图:

    完成后,直接在Ctrl+V贴入Jemeter的文本框中

    发送就成功,查看结果树中正好是我们想要的内容:

    参考文档:http://jmeter.apache.org/usermanual/component_reference.html#TCP_Sampler

  • 相关阅读:
    tensorflow2.0 GPU和CPU 时间对比
    第一次使用FileZilla Server
    PremiumSoft Navicat 15 for Oracle中文破解版安装教程
    Unmapped Spring configuration files found. Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
    ng : 无法加载文件 D: odejs ode_global g.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
    angular
    Github上优秀的go项目
    win10---file explore 中remove quick access folder
    react--useEffect使用
    linux---cat 和 grep 的妙用
  • 原文地址:https://www.cnblogs.com/zhengah/p/4876918.html
Copyright © 2011-2022 走看看