• Jmeter脚本录制方法——手工编写脚本(jmeter与fiddler结合使用)


    jmeter脚本录制方法可以分三种,前几天写的一篇文章中,已介绍了前两种,今天来说下第三种,手工编写脚本,建议使用这一种方法,虽然写的过程有点繁琐,但调试脚本比前两者方式都要便捷。

    首先来看下三种方式的比较吧,不然看不出什么。

    三种方式的优劣

    badboy

      1、有时候录制不了,兼容性较差  
      2、post请求的时候,如果链接中有参数、body里面也有参数,都会放在body里面

    jmeter 代理录制

      1、请求抓取过多   
      2、配置代理等操作比较繁琐

    手工编写

      要一个个请求手工去写

    手工编写脚本

    一般通过fiddler抓包或者开发提供的接口设计文档的形式,在Jmeter的GUI界面操作进行脚本生成,还可以使用编写java代码打包成jar包进行生成等方式。 

    在Jmeter手工制作脚本之前,先要获取HTTP请求的相关信息,如请求地址、请求参数、 请求类型等,一般情况下,有两种方法获取这些相关信息:

      1、根据开发提供的接口设计规范文档;

      2、使用第三方抓包工具如Fiddler、 Charles等抓包, 然后从中提取信息。

    在介绍手工编写脚本时,就以phpwind5.0论坛登录为例来讲解,使用的工具是jmeter和fiddler。

    准备工作

    1.增加过滤

    把fiddler加上过滤功能,添加如下正则表达式,如下所示:

    REGEX:(?insx)/[^?/]*.(css|ico|jpg|png|gif|bmp|wav|js)(?.*)?$ 

    2.调试环境

    若phpwind搭建在虚拟机中的话,要保证物理机与虚拟机的网络畅通,使用ping命令即可。

    3.jmeter环境完整

    jmeter环境要搭建好,搭建环境步骤在这篇帖子中已有详解:http://www.cnblogs.com/hong-fithing/p/7640014.html

    录制步骤

    注意:先把请求添加进去,再去调试脚本。

    第一步:添加线程组

    打开jmeter,在测试计划中添加一个线程组,如下:

    第二步:添加HTTP请求

    在线程组中添加一个HTTP请求,HTTP请求添加方法: 线程组 -->右键添加 -->Sampler -->HTTP请求如下:

     

    第三步:添加HTTP请求默认值

    因为默认值设置好后,就对HTTP请求有很大的方便,详细见下:

     

    将协议、ip或服务器名称、端口号、字符格式设置好,在之后的http请求就不用设置了,相当于设置好了一个全局的默认值:

    需要注意的是:http协议的端口是80,https协议的端口是443,别混淆了。

    在http默认值中的Adcanced下设置代理服务,这样就可以在fiddler中抓取到该脚本请求:

    如下:

    第四步:手工写脚本

    手工编写脚本注意事项:不要多空格也不要少空格,符号也不要掉,细心会给自己调试脚本节省很多力气。

    论坛登录,使用fiddler抓取到四个请求

    如下:

     

    1.编写第一个接口

    将第一个请求的请求头复制到jmeter中的http请求中

    由于刚才设置了HTTP请求默认值,所以现在在HTTP请求中,协议,ip,端口号都不用填写了,是不是很方便了。

    2.编写第二个接口

    点击第二个请求,post请求,注意有请求参数:

    参数查看如下:

    在jmeter中设置如下:

    要设置请求头,第二个请求的请求头如下:

    添加HTTP请求头管理器:

    在登录下添加HTTP请求头管理器,设置如下,要添加在登录下,这是作用域的问题,这样设置只对登录请求有效,在外面的话,就是对全局有效了。此处需要注意。添加请求头,是为了能让服务器认为用软件发出的请求也是浏览器发出的,不会拒绝请求。

    3.编写第三个接口

    点击第三个请求,查看请求头:

    有参数值:

    在jmeter中设置如下:

    4.编写第四个接口

    点击第四个请求,查看请求头:

    在jmeter中设置如下:

    做完如上操作,基本的脚本就已经写完了,只剩脚本调试了,四个请求添加完成如下:

    脚本调试

    登录调试涉及到的是关联,之前我专门写了一篇关于关联的文章,可参见:http://www.cnblogs.com/hong-fithing/p/7650762.html,主要使用jmeter中后置处理器下的正则表达式提取器,使用正则表达式。

    何处需要关联?简单来说,就是每次脚本运行,有些特定值是动态变化的,这地方就需要关联。

    登录脚本中,csrf_token和statu的值每次都是变化的,所以这两个地方需要关联。在知道了何处需要关联了,但正则表达式加在哪,去哪里关联呢?

    先在脚本中添加个察看结果树,如下:

    运行次脚本,在打开首页的数据中查找到csrf_token值,如下:

    说明在首页打开就已经有这个值产生,同样也可以在fiddler中去查看,所以正则表达式提取器就添加在第一个请求下,如下操作:

    由于引用名称设置的是token,所以在登录处的csrf_token值改为:

    其次就是关联statu值了,继续在结果树中查看,在登录中的响应数据中有该值出现:

    添加正则如下:

    在下一个请求中把statu的值替换为:

    这样就把关联做好了,其实看到这,应该明白,关联就是把请求连接起来,有连贯性。看,先是在打开首页就出现csrf_token值,需要提取出来并传给登录的那个请求,在登录出现的statu值,需要提取出来并传给页面跳转的那个请求。这样就实现了关联。

    再提一下这个取样器,Debug,添加到正则表达式提取器之后,能很清晰的看到提取出来的值对不对,或者是提取到了值没有,在调试中很方便。

    手工编写的脚本调试过程中,给大家提个醒,就是cookie,之前我在调试的时候由于没加这个管理器,关联取出来的值都是对的,但脚本就是不成功,最后是添加了HTTP Cookie管理器,脚本就运行成功了。

    今天的手工编写脚本就介绍到这了,之后有时间还会写关于jmeter相关的文章,有错之处欢迎指正。 

  • 相关阅读:
    OpenLayers测量距离和面积
    BeanUtils接口和类
    深入理解Spring--动手实现一个简单的SpringIOC容器
    Spring:源码解读Spring IOC原理
    Spring AOP的底层实现原理
    ClassLoader工作机制
    Cglib及其基本使用
    InvocationHandler和Proxy(Class)的动态代理机制详解
    解密Redis的持久化和主从复制机制
    Redis之父九条编程忠告
  • 原文地址:https://www.cnblogs.com/hong-fithing/p/7668258.html
Copyright © 2020-2023  润新知