Jmeter 参数化

参数化在接口性能,接口自动化中都非常重要,需要重点掌握,接下来就针对Jmeter 4.0  的参数化做详细介绍。

 

1、用户定义的变量
  应用场景:可定义同时被应用到多个线程且不常变动的公共参数,例如请求协议,IP地址,请求方式,资源,端口号等
  变量定义步骤:

  1)新增用户定义变量的组件:单击测试计划再右键点击--选择添加--配置原件--点击用户定义的变量

  

  2)设置你要的变量

  

  3)调用变量:  ${变量名}--在对应的地方调用变量,第二步定义了三个变量,本步均已调用如下

  

  设置"用户定义的变量"有什么用处呢,最大的好处就是易于维护脚本,例如我们请求的IP地址一般不会变,且每个请求都必须用到,如果变化了,几个请求还好逐个修改就好,可若是成千上万个请求呢,

  这时你就要庆幸你在最初设置的变量了,只要修改当初你设置的变量值即可,所有调用了这个变量的值都会一起修改,大大节省了维护脚本的时间及成本。

  注:要把"用户定义的变量"这个组件放在最外面,这样才会作用于整个测试计划内的线程,个人建议,在开始创建线程的时候就要完成参数化。

2、函数助手

  就是Jmeter中有提供了一些帮助我们完成某项功能的函数,可能不好理解,那么我们以一个例子来解释Jmeter中常用函数的功能以及如何使用。

  例子:百度账号登录功能

  先来看看百度账号登录的界面,如下截图

  

  1)首先找到Jmeter的函数助手,参考如下。

  

  2)何时需要使用到函数呢,那就是我们要实现某个功能的时候,要实现某个功能首先应该想到的是,是否有一个函数可以帮我们去解决,若没有对应的函数方法则考虑自己封装一个。

  我们来分析百度用户名密码登录功能,其至少需要我们输入两个请求参数,分别为用户名,密码,然后通过点击登录按钮触发。

    1>我们在做并发测试等多线程操作时,用户名是不能重复的,那么是否有一个函数可以帮我们实现这个功能呢

    _RandomString------随机字符串,可以真实模拟客户数据,具体设置参考下图。

    

    2>那如果是用手机号登录呢,那我们要实现手机号的随机,而手机号一般都有前三位数字的限定,函数设置参考下图。

    __Random----随机数,可获得某个范围内的随机整数。

    手机号前三位我们固定取135,那么调用函数时就是135${__Random(00000000,99999999,)}。

    由于除了固定的前三位,还有8位数字要随机产生,所以最小值是八个零,最大值是八个九

    

    3>若提供一些固定的值给你,如何去将这些值作为你的请求参数。

    _CSVRead---数据以csv文件方式提供,则用此函数来实现读取,需要准备一个csv文件(文件内只有两列,分别为user_name,user_pwd,含若干条数据)

    

    将生成的函数字符串应用到我们的请求当中去,如下方式调用,用户名需要一列值,密码需要以列值。

    

    调试脚本

    确定文件中的值是否有正确被读取到,需要注意的是我们必须在线程中设置线程数>1或是循环次数>1,否则读取的永远是文件中的第一条数据

    

    点击执行登录请求后,查看结果(察看结果数组件),主要查看请求数据是否为文档中的值,若是则说明你已经成功读取了文档中的数据。

    

    当然读取csv文档中的数据还有另外的方法,如在"配置原件"组件的"CSV数据文件设置"中也可设置,在此也给大家简单介绍下,同样看图说话。

    个人建议若是配置原件能解决的就用配置原件,不建议用函数,以此为例在配置原件的"CSV数据文件设置"中将每列的值设置成变量,若是以后文件的地址变动了,只要修改这一处的地址即可,若你使用函数实现的,那么有调用的地方都要修改

    非常的麻烦,所有建议优先考虑配置原件。

    

    4>其他函数

    >>_UUID--生成ID,基本是唯一的,生成随机字符串如(6c29a9d0-55d2-40ce-a4a4-58a96c4de950),调用函数方式 ${_UUID}

    >>_counter计数器函数

    在函数助手中设置好后,可同其他函数一样被调用,每被调用一次计数器自动加一,这个函数有一个参数是布尔型的,可填写TRUE/FALSE,

    FALSE代表全局计数器,通常被用于记录发送了多少次请求,其只作用于调用这个计数器函数的请求,统计这个请求被执行了多少次。

    TRUE代表这个函数是每个用户自己的计数器,通常被用于记录测试计划运行了多少遍。

    

    若想查看计数器是否生效可用察看结果树查看,如下

    

    >>_intSum  ---求和  调用函数 ${__intSum(1,2,sum)},如下填写的1,2也可换成变量,即可以是确定的数相加也可是变量之间的相加,也可是函数之间的相加,前提是变量或函数的值都为整数,

      如 ${__intSum(${__CSVRead(E:\user.csv,0)},${__CSVRead(E:\user.csv,1)},${__CSVRead(E:\user.csv,2)},sum)}

      而sum储存了这个函数求得的和,又可以作为一个变量被别处引用。

     

    >>__StringFromFile   从文本文件中读取字符串

      ---函数原理同CSVRead函数类似,每次调用函数,都会从文件中读取下一行。当到达文件末尾时,函数又会从文件开始处重新读取,直到循环结束。
      如果在一个测试脚本中对该函数有多次引用,那么每一次引用都会独立打开文件,即使文件名是相同的(如果函数读取的值,在脚本其他地方也有使用,那么需要修改变量名)。
      如果在打开或者读取文件时发生错误,那么函数就会返回字符串"**ERR**"。

      备注:1,可连续读取多个文件,文件命名时需要标上编号,如test1,test2,test3,test4等,如下填写1,4,即从test1-test4均会被顺序读取,若是4个文件均被读取完了,循环还未结束,进程会被停止,不会像CSVRead一样从头再读取一遍

      

      推荐:此路径下的文章对某些常用函数有详细介绍https://www.cnblogs.com/linglingyuese/archive/2013/03/06/linglingyuese-three.html

3、读取数据库中表的值作为参数值

  1)要读取数据库的数据必须先连接上数据库,我们可在配置原件中选择JDBC Connection Configuration,设置连接数据库。

   而连接数据库,需先配置驱动,驱动软件为mysql-connector-java-5.1.25-bin.jar,数据库jar包是由java打包成的数据库驱动,不需要解压,直接放进C:\apache-jmeter-4.0\lib\ext)--重启jmeter

   所有的查询接口都是从数据库查数据,执行sql语句是jdbc请求,sql语句注意要放在请求后面,顺序不能反了。

 

  

  2)连接上数据库后,我们要读取数据里面的数据,那么可以添加取样器中的JDBC Request,查询我们需要的值

  

  3)注意在引用数据库中查到的数据时,要用角标,如 user_name_0

4、动态关联

  下个请求要用到上个请求的返回参数,而且这个返回参数里面的数据是动态生成的,然后我们通过技术(比如说正则表达式提取器,json提取器,xpath提取器)

  动态的把他的返回参数的值取到,然后给我第二个变量里面去用,这就是我们说得动态关联。

  案例描述:充值请求需要用到登录请求的返回参数中的cookie,我们来动态关联一下

  1)先看看登录请求返回参数中cookie在哪

  

  2)知道在哪后我们开始去获取这个返回信息,通过正则表达式提取器来获取,重点是要确认左边界和右边界,且通过左边界与右边界只能找到一个,唯一的一个。

    因为是要获取登录请求后的返回参数,所以我们要用到置处理器中选择正则表达式提取器来获取返回值,左边界和右边界之间的内容就是要获取的值。

  

  3)由于登录跟充值是在不同的线程,那么我们从登录线程获得的值如何跨线程传递给充值线程呢,我们可用全局变量来实现数据跨线程传递。

    设置全局变量setproperty-->beanshell sampler编译--->接收全局变量property

    1>设置全局变量,全局变量名称我们取setsession,将从登录请求获得的返回信息session赋值给这个全局变量

    

    2>运行全局变量需要用到取样器中的Bean shell Sampler,这是一个java解释器,我们用它来实现全局变量跨线程操作

    

    3>使用全局变量,用_property函数来实现

    

    4>调试脚本,把获取全局变量函数${__property(setsession,,)}赋值给充值请求的参数,运行并检查充值的请求数据是否有登录的cookie信息。

5、Jmeter脚本录制

   1)设置Jmeter代理

    1>测试计划--添加--非测试原件--HTTP代理服务器

     

    2>设置脚本归属的线程--注意端口号,目标控制器选择脚本归属的线程(如下选择百度账号注册线程)

    

    3>为了避免Jmeter抓取到太多我们不需要的东西,我们先要设置过滤,过滤掉一些静态资源(如图片),设置如下,点击“启动”

    

    4>设置浏览器代理,本人使用的是Chrome浏览器,步骤为:浏览器右上方有三个竖点,点击并选中设置-->选择高级-->选择打开代理设置->跳出如下对话框进行设置。

    

    5>开始录制脚本,以某个登录功能为例,先输入用户名,密码-->再设置浏览器代理(避免录制到不需要的数据)-->点击登录按钮-->查看线程下就有录制到的登录脚本-->关闭浏览器代理及点击jmeter的":停止"

    最后处理并查看我们录制到的登录脚本

    

   

  如果完全使用文字描述的话,可能大部分人看了也不知道操作,云里雾里,没什么借鉴价值,故本人使用了大量的截图并尽可能的标示清楚,就是希望读者能明白每一句话的含义,从而达到自己动手的能力。

不过这样导致了版面不美观,但个人认为比起美观实用还是最重要的。

    

 

    

    

posted @ 2018-09-15 12:02  bandao  阅读(260)  评论(0)    收藏  举报