使用Jmeter的小知识点

第一个知识点:登录成功后,其他请求需要用到token值的处理方法如下:

点击配置元件-HTTP信息配置管理器

添加如下图所示的请求头信息即可:这样子,其他接口发送请求的时候,请求头就会附带这个token,就可以免登录了

 

 

第二个知识点:对于请求的请求体(body data)里面使用json格式来发送请求,需要在信息头配置如下信息:

 

 注意:如果服务器不支持解析json数据,那么就不能使用json格式来发送请求了

 

 

 

 

第三个知识点:请求时,不同传参方式需注意的点:

1、如果使用的parameters来传值,不用操心content-type,也不需要设置

2、如果使用的body data来传值,

【1】、如果非json格式来传值,以这种形式来传值,就是类似于parameters来传值了,但是,content-type必须设置成:application/x-www-form-urlencoded; charset=UTF-8,如下图所示:

传值方式如下图所示,那么就得在图二中操作

 

 图二:

 

【2】、如果使用的json格式来传值,那么请看第二个知识点所解释的来设置.

 

第四个知识点:对于变量的使用

【1】在pameters中可以使用变量,如下图所示:

 

 

【2】在body data中可以使用变量,如下图所示:

 

 

 

 

第五个知识点:跨线程使用变量的几种常用方法:

注意:在使用时要注意线程组的执行顺序,需要勾选测试计划里的独立运行每个线程组按钮

 

 

 

 

【1】、Bean Shell内置变量来存取值

第一步:通过创建后置处理器--Bean Shell PostProcessor,props.put("属性名","值")  -----设置属性并赋值 ,如下图所示:

方法一:多个paramters需要用空格隔开,然后代码中通过bsh.args[index]来获取相应的变量值

 

方法二:直接通过变量名来赋值

  

 第二步:通过创建BeanShell PreProcessor 前置处理器,通过props.get("属性名") 获取属性值后,在把值存入到变量中,最后在使用的地方直接用变量名就可以取值了,如下图所示:

 

 

 

  

  

【2】、通过创建后置处理器--Bean Shell PostProcessor,使用beanshell设置全局变量

注:为什么很多地方有些说parameters里面需要添加bean shell区域中要用到的变量,并且还得在${__setProperty(newJsession,${seesion},)}加一个逗号,有没有能给我解说的大佬呀?

  jmeter自带函数__setProperty

  设置变量如下图所示:

 

 

 

其他地方要使用变量通过:${__property(变量名)}  或者是:${__P(变量名)}

 

 

 

 

 

 

第六个知识点:Bean Shell常用内置变量

    JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

  • log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

  • ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext

  • vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

    a) vars.get(String key):从jmeter中获得变量值

    b) vars.put(String key,String value):数据存到jmeter变量中

    更多方法可参考:org.apache.jmeter.threads.JMeterVariables

  • props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。 

    a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义 

    b) props.put("PROP1","1234"); 

  • prev - (SampleResult):获取前面的sample返回的信息,常用方法:

    a) getResponseDataAsString():获取响应信息

    b) getResponseCode() :获取响应code

    更多方法可参考:org.apache.jmeter.samplers.SampleResult

  • sampler - (Sampler):gives access to the current sampler

 

第七个知识点:两种常用后置处理器,获取服务器返回的相应数据,例如:token,cookie、其他接口需要的值

【1】、正则表达式提取器(Regular Expression Extractor)

例如:提取cookie时,如下所示:

因为cookie是在响应头里面的所以需要注意选择响应头去提取,而不是body,这一点绝对要看清楚了

 

 

 

 

例如:提取token时,因为是在响应体里面,所以直接选择body,一般默认是body,不需要改变,如下所示:

 

 

 

 

 

 

 

 

提取其他值,跟提取token的方式一模一样

【2】、JSON提取器(JSON Extractor),因为token在data--》token_info---->token,所以层级关系通过$.data.token_info.token来获取token的值

若存在几个token_info,通过下标来选择,下标从1开始,例如:$.data.token_info[1].token ,若想要获取其他值,可以通过$.data.code等等,想获取什么就用“点”

 

 

第八个知识点:逻辑控制器的使用

 

 

第九个知识点:使用正则表达式提取器提取服务器的响应值需要注意的地方

需注意,要通过查看Text模式去查看返回的json数据,因为正则表达式是根据Text模式排序来取值的

如果用Json模式去查看返回的json数据,会导致里面的值排序不一样,导致我们在写正则表达式的时候写错,从而提取不到我们想要的值,例如我想提取id的值,如图所示:

用观察结果树中,使用Text模式查看到的json数据,id后面的是regname

 

使用Json模式查看到的json数据,id后面的是pwd

 

 

 正确的正则表达式如下图所示:

 

第十个知识点:文件上传

 

posted on 2023-08-25 15:42  福气满满好运连连  阅读(75)  评论(3编辑  收藏  举报