Jmeter系类(33) - JSR223(3) | java常用脚本
Json 相关
解析 Response
import groovy.json.JsonSlurper
def responseStr = prev.getResponseDataAsString()
def jsonSlurper = new JsonSlurper()
// String 转 Object,通过 mData["key"] 获取值
def mData = jsonSlurper.parseText(responseStr)
打印 Json
import groovy.json.JsonOutput def book = new Book(id: 1, name: 'Thinking in Java')
def jsonOutput = new JsonOutput()
def result = jsonOutput.toJson(book)
//普通输出
println(result)
//格式化输出
println(jsonOutput.prettyPrint(result))
AssertResult相关
常用断言封装
void assertEqual(String expect, String expectDesc, String actual, String actualDesc) {
if (expect != actual) {
def errorMessage = "\'" + expectDesc + "\'" + " is not equal " + "\'" + actualDesc + "\'" + " ,expect: " + expect + " , but got: " + actual
AssertionResult.setResultForFailure(errorMessage)
}
}
void assertEqual(int expect, String expectDesc, int actual, String actualDesc) {
if (expect != actual) {
def errorMessage = "\'" + expectDesc + "\'" + " is not equal " + "\'" + actualDesc + "\'" + " ,expect: " + expect + " , but got: " + actual
AssertionResult.setResultForFailure(errorMessage)
}
}
Thread相关
获取线程总数
// JSR223 脚本
ctx.getThreadGroup().getNumThreads() // ${__groovy(,)}函数调用
${__groovy(org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads())} // 通过以下方法获取,会有一个 warn 级别的报错
${__groovy(ctx.getThreadGroup().getNumThreads(),)}
获取当前线程号
// Jmeter函数,适合调试
${__threadNum}
获取当前脚本路径
原因:在使用sample 的 upload file 功能时,传入 相对路径./uploadFile.pdf 会产生未知错误,需要传入绝对路径。所以提前获取当面脚本路径
import org.apache.jmeter.services.FileServer;
FileServer.getFileServer().getBaseDir(); # 直接调用
${__groovy(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();,)}
Cookie 相关
获取指定Cookie
import org.apache.jmeter.protocol.http.control.Cookie
import org.apache.jmeter.protocol.http.control.CookieManager def cookieManager = sampler.getCookieManager()
def size = cookieManager.getCookies().size()
for (i in 0..<size) {
def cookie = cookieManager.get(i)
/*SESSION为指定的cookie的name*/
if ("SESSION" == cookie.getName()) {
vars.put("sessionName", cookie.getName())
vars.put("sessionValue", cookie.getValue())
vars.put("sessionDomain", cookie.getDomain())
vars.put("sessionPath", cookie.getPath())
} else {
log.error("-------Cookies : " + cookie.getName() + "----------- " + cookie.getValue())
}
}
Property 相关
操作Property
Property是全线程共享,概念类似Java Class中的全局变量
在 JSR223 脚本中设置Property,不可直接调用 Jmeter 函数:${__setProperty(,,)}
需要设置、获取Property,可以调用以下方法:
import org.apache.jmeter.util.JMeterUtils
// 通过该方法只能设置 String 类型的value
JMeterUtils.setProperty("key", "value")
JMeterUtils.getProperty("key")
疑惑
- 这节讲的脚本,部分都是JSR223(2)里面的内置函数重了,到底用哪个?
- 内置函数收集归纳的是Groovy的,本篇是java的。两篇不论是内置函数,还是脚本都可以适用
- 注意JSR223控件的语言别选择错了,用Groovy内置函数方便选择Groovy。选择java应该也可以~~~,毕竟是Groovy基于jvm的,会不会报错,我没试过,大家可以试下
Jmeter系类(33) - JSR223(3) | java常用脚本的更多相关文章
- Jmeter系类(31) - JSR223(1) | 控件介绍
JSR233 介绍 JSR223控件执行JSR223脚本代码用于创建/更新所需的某些变量 JSR223可以使用其内置的变量,有助于精简脚本,提高开发测试的效率 由于JSR223脚本编译方式基本相同,J ...
- Jmeter系类(32) - JSR223(2) | Groovy常见内置函数及调用
常见内置函数及调用 获取相关函数 获取返回数据并转换为String字符串 prev.getResponseDataAsString() 例子 String Responsedata = prev.ge ...
- JavaEE-实验一 Java常用工具类编程
该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1. 使用类String类的分割split 将字符串 “Solutions to selected exercises ca ...
- Java常用的加密解密类(对称加密类)
Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...
- Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能.查看最流行的扩展机制,比较性能并分析哪一个是最好的. 这是乐队之战,JMeter风格. Beanshell V. JSR223 V ...
- Java常用类详解
目录 1. String类 1.1 String的特性 1.2 String字面量赋值的内存理解 1.3 String new方式赋值的内存理解 1.4 String 拼接字面量和变量的方式赋值 1. ...
- Java常用类,这一次帮你总结好!
常用类 常用类概述: 内部类 Object类 包装类 数学类 时间类 字符串 String Builder和StringBuffer DecimalFormat 一.内部类 概念:在一个类内部再定义一 ...
- java多线程系类:基础篇:06线程让步
本系类的知识点全部来源于http://www.cnblogs.com/skywang12345/p/3479243.html,我只是复制粘贴一下,特在此说明. 概要 本章,会对Thread中的线程让步 ...
- java多线程系类:基础篇:03Thread中的start()和run()的区别
这个系类的内容全部来源于http://www.cnblogs.com/skywang12345/p/3479024.html.特别在此声明!!! 概要 Thread类包含start()和run()方法 ...
随机推荐
- Linux UDP服务器编程
UDP主要使用sendto()和recvfrom() recvfrom() 函数原型如下: #include <sys/types.h> #include <sys/socket.h ...
- MATLAB—数组运算及数组化编程
文章目录 前言 一.数组的结构和创建 1.数组及其结构 2.行数组的创建 3.对数组构造的操作 二.数组元素编址及寻访 1.数组元素的编址 2.二维数组元素的寻访 三.数组运算 非数的问题 前言 编程 ...
- 题解 party?
传送门 挺遗憾的一个题 考场上想到的思路是题解的退化版,可以有71pts(赛时以为只有20pts),但因为这一场的策略原因没有打-- 首先发现颜色种类数很少,可以直接bitset上树剖维护,炸不了空间 ...
- @ControllerAdvice注解(全局异常捕获)
背景 @ControllerAdvice 注解 通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute 适用于所有@RequestMapping方法的 ...
- C#基础知识---匿名方法使用
一.匿名方法使用 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Tex ...
- CentOS7 yum方式安装MySQL5.7 + 远程连接
1 下载并安装MySQL官方的 Yum Repository [root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-commu ...
- Quartz任务调度(1)概念例析快速
实例解析概念 在quartz中,有几个核心类和接口:Job.JobDetail.Trigger.Calendar.Scheduler.下面我们结合实例来分析这些类的角色定位.现在我们有一个新闻网站,它 ...
- 同步(synchronized)
转载至:https://www.cnblogs.com/dolphin0520/p/3923737.html 一.什么时候会出现线程安全问题? 在单线程中不会出现线程安全问题,而在多线程编程中,有可能 ...
- 关于Junit中Assert已经过时
在junit4.12之后,Assert就过时了,提供了TestCase来取代: 同样在TestCase中原本比较常见的一些方法也已经取消了,例如:assertNotEquals.assertThat. ...
- SpringBoot笔记(3)
一.配置文件 1.文件类型 1.1.properties 同以前的properties用法 1.2.yaml 1.2.1.简介 YAML 是 "YAML Ain't Markup Langu ...