二、jmeter-基本操作及场景设计--jmeter基本操作

脚本设计前提:

    1.jmeter中,做功能测试、自动化测试时,你可以使用 Beanshell元件,但是,在**性能测试**中,能不用,坚决不要用带有任何Beanshell。如果你要写java脚本,也不要使用Beanshell任何元件,JSR223 开头元件,
       jmeter可以支持: java、jython、python、groovy、js
       beanshell   元件替换,为何替换:相比于BeanShell 取样器,JSR223取样器+groovy脚本具有可大大提高性能的功能(编译),同时支持更多的脚本语言,其中包括BeanShell脚本,所以在编写脚本时不建议使用BeanShell 取样器
    2.性能测试,要尽可能的降低jmeter**工具自身**对资源消耗
    3.为何自动化脚本不能做性能:接口测试、自动化测试脚本,一定会添加**断言**,断言的目的是判断,是否有bug,断言这个元件在执行时,资源消耗,来自jmeter工具的资源,这个时间和资源的消耗,都是本机的,不是服务器消耗的时间和资源      

常用操作:

    1.变量:

         用户定义变量: 位置:配置元件—添加;作用域:作用于整个‘**测试计划**’,全局变量,可跨线程组;在启动运行时,获取一次值,在运行过程中,不会动态获取值,在运行过程中,值一直都不变(不可实时变化,可用于值不变的参数)
         用户参数:     位置:前置处理器–添加; 作用域:作用于当前线程组或当前的取样器,局部变量;在启动运行时,获取一次值,在运行过程中,还会动态获取值(局部变量不可跨取样器)----怎样修改为全局变量,参考下文
         格式:         定义格式:var_user: 1888888888;     引用变量格式: ${var_user}  -----$字符串的拼接

    2.函数:
         Tools–函数对话框,如果一个函数参数包含一个逗号,那么一定要用”\”来转义,否则JMeter将把它作为一个参数分隔符。
         备注:下文只介绍几个常用函数,其余函数自行查询学习
                       
          ${__setProperty(set_per,${per},)}:作用:设置**属性函数**,设置jmeter的动态属性;在第一个线程组获取数据,转为公共数据,第二个线程组调用上面的公共数据                
            2.参数全局变量设置:https://blog.csdn.net/BaiXuePrincess/article/details/103933969                                                 

                实例:解决问题:变量值如何跨线程组使用
                解决方案:${__setProperty(global_cooike,${set-cooike},)}  将set-cooike设置为全局变量,名称为global_cooike                                                                                               
                适用场景:跨线程组调用参数值,将上一个线程组值通过函数设置为全局变量,通过—P函数获取使用
                关联操作:取样器:BeanShell 取样器:将set-cooike设置为全局属性,做功能测试可使用该取样器,做性能测试不可使用该取样器,太耗性能
                JSR223 Sampler:  将set-cooike设置为全局属性,做性能测试可使用该取样器
                涉及函数:${__property(global_cooike,)};${__P(global_cooike,)}                                    

          ${__P(,)} **获取属性函数**
          ${__property(,,)} **获取属性函数**,可以简单理解,P 只是property这个函数的简写      

          ${__V(,)拼接函数 :  实例:V(可变)功能返回评估可变名称表达式的结果
                           解决问题:${var_${__counter(,)}}  -----通过函数拼接计数器,我们**期望**它得到过程是${var_1}  ${var_2} ${var_3} ,但是仅仅2个函数拼接达不到预期结果                                                                                         
                           解决方案:${__V(var_${__counter(,)},)}   通过__V函数拼接
                           使用场景:var_1  var_2  前缀相同,后缀是递增数字的变量名称,常见于 jdbc从数据库中获取数据时


     3.逻辑控制器:逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
                 性能测试脚本中,会使用逻辑控制器,但是,使用了逻辑控制器,并不是混合场景。混合场景,是 不同数量的并发用户,发起不同接口请求
                 分为2类:控制测试计划执行过程中节点的逻辑执行顺序;
                         对测试计划中的脚本进行分组、方便JMeter统计执行结果,以及进行脚本的运行时控制等

                 常用控制器:简单控制器(Simple Controller),循环控制器(Loop Controller),仅一次控制器(Once Only Controller)可与循环控制器一起使用 ,ForEach控制器(ForEach Controller),
                           事务控制器(Transaction Controller),if条件控制  ,Critical Section Controller 临界控制器,吞吐量控制器  ,swith 控制器 ,随机控制器,随机顺序控制器

     4. 属性:以.properties结尾的文件,都是jmeter的属性配置文件;属性是什么?是jmeter**工具自身**带有的标签
            jmeter工具属性:jmeter属性:可能被改变;+ 静态属性: 写在properties文件中属性信息,都是静态属性;    + 动态属性:运行过程中,动态定义属性;动态属性,是在运行过程中产生的,关闭jmeter,就是自动释放了。
                                                  系统属性: os、jdk  ===这个系统属性信息,**是不可改变**
            属性  vs 参数 \ 变量  区别:属性是jmeter工具具有,所有,jmeter中的线程组要使用属性,都可以使用;    + 参数、变量,有局限访问
            顺序:+ jmeter中,多个启用线程组,在执行时,**默认是并行执行**,先到先执行;查看结果树中的显示顺序是,根据**收到响应的先后顺序**显示,jmeter中**取样器的执行顺序**:在没有逻辑控制器控制时,
                  顺序是**从上往下**,不管多少人并发,每个线程用户都是从上往下执行。会出现 取样器的执行顺序与 查看结果树中的显示顺序不一致。

         
     5. 响应值提取:Json提取:1.在取样器上右键 > 后置处理器 > json提取器;
                            2. 当确定响应信息为json格式时,我们**优先**选择用 json提取器提取我们响应的信息,+ $.根路径.二级路径 json提取式 ----绝对路径写法+ $..末梢节点名称 -----相对路径写法, **推荐**(防止路径名写错)

                  正则提取:     如果想要提前请求中内容、响应的头部内容、或者响应体格式非json格式,这些使用 优先选择 **正则提取器**
                               提取方式:在取样器上右键 > 后置处理器 > 正则提取器;+ 正则提取式: 左边界(正则式)右边界 万能正则式: .*?       
                                       + 除换行符之外,都可以匹配    参考文档:响应头数据  https://blog.csdn.net/QWERTY55555/article/details/96428481

                                                                                  
     6.数据参数化-ddt
                                  1)  CSV 数据文件设置   读取csv,txt 文件数据作为参数                   每循环一次读取一次数据(设置并发数/循环控制器–进行遍历数据)

                                   2)链接数据库读取数据                          2.1执行sql语句–不带传参                           2.2执行sql语句–带传参


      7.fiddle 如何执行执行python脚本
             1)执行脚本python脚本: BeanShell 取样器:通过cmd命令执行python脚本
                String command = "cmd /c start python D:\\test.py";   
                Runtime rt = Runtime.getRuntime();
                Process pr = rt.exec(command);
            2)执行python代码—只支持python2                                                         
               JSR223 Sampler------执行代码                                                           正则表达式提取器------获取对应值
                                               
                           3)执行python脚本,获取对应值

                              OS进程取样器 ------通过执行  .bat文件,执行代码

                              test.py  需要将获取的值打印出来

                              print("222222")



                                .bat文件      @echo off    -----作用:https://blog.csdn.net/fly_as_tadpole/article/details/85177379

                                 cd C:\Users\huixiaoer\Desktop\jmeter\ &python test.py



                           正则表达式提取器------获取对应值       ----正则详解:https://blog.csdn.net/u011391839/article/details/107406836

                            * 匹配0次或多次,如图应该为(.+)匹配1次或多次,确保有数值

                         

    8.fiddle抓jmeter包:https://www.cnblogs.com/wintest/p/11779186.html
posted @ 2022-04-09 18:56  小学生1号  阅读(201)  评论(0编辑  收藏  举报