美文网首页我爱编程
02_Jmeter加强之参数化

02_Jmeter加强之参数化

作者: 王康健_0124 | 来源:发表于2018-05-23 17:55 被阅读0次
    • 首先我们了解一下什么叫做参数化

    简单的举例就是:1+1=2,但是现在我把其中的一个“1”替换一个的字符“A”,这个A我们给赋值A=1,那么1+A=2成立,继续延伸一下,A是不是也可以等于3、4、5...,给A替换不同的值,结果也不一样,把其中的一个1替换成A 这个就叫做参数化

    参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是"将脚本中的某些“输入”,改为使用参数来代替",在脚本运行时指定参数的取值范围和规则;
    这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试,参数的取值范围被称为数据池!

    • 先创建一个jmeter脚本,创建好线程组,HTTP请求、填写好相关内容,然后来学习一下jmeter中的几个简单的参数化
    • 1. 用户自定义变量
    • 然后“添加”一个变量,然后给变量赋一个值
    • 下面我们引用这个变量,引用变量的格式:{变量名},左边是get方法的字段名,右边就是引用这个变量{userName}
    • 然后执行脚本,在查询结果数看请求的参数是否成功


    • 参数化成功,要输入数据的成功引用变量名指向的数据

    • 2. 函数助手对话框
    • 这是一个随机字符函数 __Random String
      Random string length:要随机的字符长度
      Chars to use for random string generation:要随机的字符


    • 下面把我们生成的函数放到请求中,然后运行一下查看效果,如图:右边显示的是左边函数生成的随机数据,每次随机的都不一样!
    • 3. CSV Data Set Config:导入本地CSV文件中的数据

    首先我们在本地E盘中创建一个CSV文件,在CSV文件中输入数据。


    • 输入数据后,保存>然后选择CSV格式,选择替换
    • ① 在jmeter中右键线程组,选择“配置元件→CSV Data Set Config”;
    • ② 配置路径;
    • ③ 配置读取数据的编码格式;
    • ④ 配置变量,CSV文件中每列对应一个变量
    :变量之间用英文逗号分隔,结尾处也不能有空格
    • 然后我们去应用这些变量,这里我选择了在http请求中的名称里引用变量,只是为了演示用!可以看到每个变量都取到值了。

    • 如果要都用到,这个时候只要在线程组里设置一下循环次数,就可以把CSV中的数据全部使用到!


    • 这里我只展现了最下面,可以看见一只使用到了G008
    • 4. 正则表达式提取器:
    • 一个接口返回值多个,每个结果都对后续的业务流程或调用的接口有影响,这个时候jmeter就需要一个(if控制器)来进行对返回值做判断.
    1. 首先需要在提取响应值的case下添加一个“后置处理器>正则表达式提取器”
    2. 对需要判断的结果做提取,格式xxx(.*?)xx提取出需要的字段
    3. 在if控制器中引用“正则表达式提取器”中声明的变量,并且==预期的结果
    4. 如果响应结果和预期结果相等,则执行“if控制器”下的case,不相等则跳过“if控制器”下的case,继续往下执行

    首先创建一个if控制器,然后在要判断返回结果的接口上,添加一个后置处理器>正则表达式提取器



    在正则表达式提取器中,上面的选择可以不用做修改:
    ① 直接设置一个提取值存放的“变量” 命名result
    ② 对接口的响应报文中定位,并提取出需要的数据(.*?)这里先用一个统一的正则表达式,后续单独写一篇“正则表达式”的使用
    ③ 模块和匹配数字可以先不管,因为我们只提取一串字符
    ④ 试运行一下,看有没有提取成功
    • 如下图:正则提取"respDesc":"(.*?)","respCode":"0000"}分成三个部分,respDesc":"()"}两边起到定位左右,左边要有respDesc":",右边是","respCode":"0000"},中间就是我们提取的内容!这里创建了一个空的http请求,用名称验证提取的变量,验证通过!
    • *注下图的响应报文做了修改,正则表达式改成了"respDesc":"(.*?)","respCode":"0000"}提取的字符串不变,还是“成功”

    • if控制器中条件的意思:正则表达式提取的实际结果==预期的结果
      预期的结果肯定是提前知道的。
      if判断如果成功,就执行“if控制器”下的子case,然后去执行下面的case;
      if判断如果不成功,则不执行“if控制器”下的子case,直接去执行下面的case;

    • 下图可以看到,我设置的if条件是,"${result}"=="成功",但是实际的值是另外的,所以if控制器下的case没有执行,直接执行了登录接口

    • 下图可以看到,我设置的if条件是,"${result}"=="成功",实际结果就是"成功",所以先执行if控制器下的case然后去执行了登录接口

    • 5. JDBC Request SQL查询数据库,返回测试数据

    上面介绍了一个CSV的链接方法,但是如果我需要参数化的数据都在数据库中怎么办???难道我复制出来然后放到CSV文件中,然后去读取、使用?这里可以使用到JDBC Request,把要测试的数据查询出来!
    ① 我们需要下载一个jdbc.jar包,不同的数据库用的jar不同,需要自行百度下载
    ② 把jdbc存放到apache-jmeter-3.0\lib文件下,然后右键测试计划,找到这个jar包!


    ③ 添加一个 JDBC Connection Configuration,然后配置:

    一下是:sqlserver 配置连数据库

    1. Variable Name:随便起个名称,后面的JDBC Request要用到,才能读取JDBC Connection Configuration里的配置
    2. Database URL:jdbc:sqlserver://IP:默认端口;databaseName=实例名
    3. JDBC Driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver写死的,每个数据库有不同的jdbc driver
    4. Username: 数据库账号
    5. Password : 数据库密码

    • 引用JDBC Connection Configuration里的配置的Variable Name配置的Name,然后在输入框里输入要查询出数据的SQL
    • 给查询的字段设置变量名称
    • 引用变量
      因为我们查询出的数据有很多,是以数组的方式存放的,jmeter并不能直接引用,需要去指定一行一行的去拿
    • ① 单行提取数据: 这里我们可以用${FC_0}、${FC_1}......${FC_N}去拿单行的数据
    • ② case循环,全部使用: 这里我们只需要把${FC_N}的N设置一个变量数组,且不会重复就行,这里我使用了“计数器”

    启动的时候是0,每次增加1,并设置了一个变量ID


    • 下面就是把两个变量拼接成一个变量就OK了! 格式:${_V(xx_${xx})} 我们的就是:{__V(FC_{ID})},后面就是把这个拼接变量放到你的case中OK啦,而且每次取的数据都不重复,具体的演示结果就不展现了!

    6. 后置处理器_JSON Extractor (提取json响应结果)


    如果要提取王康健:那么就是:$.countactName

    {
      "matchId":200,
      "subMatchId":${subMatchId},
      "contactName":"王康健",
      "contactPhone":"${randomPhoneNum}",
      "country":"上海市",
      "school":"新东方烹饪学校",
      "extraInfo":{
          "email":"wangkangjian@126.com",
          "schoolEn":"xxxxxxxxxx",
          "detailAddress":"闵行区马桥镇",
          "postCode":"111111"
      },
      "subMatchName":"${subMatchName}"
    }
    

    相关文章

      网友评论

        本文标题:02_Jmeter加强之参数化

        本文链接:https://www.haomeiwen.com/subject/vwvrjftx.html