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常用脚本的更多相关文章

  1. Jmeter系类(31) - JSR223(1) | 控件介绍

    JSR233 介绍 JSR223控件执行JSR223脚本代码用于创建/更新所需的某些变量 JSR223可以使用其内置的变量,有助于精简脚本,提高开发测试的效率 由于JSR223脚本编译方式基本相同,J ...

  2. Jmeter系类(32) - JSR223(2) | Groovy常见内置函数及调用

    常见内置函数及调用 获取相关函数 获取返回数据并转换为String字符串 prev.getResponseDataAsString() 例子 String Responsedata = prev.ge ...

  3. JavaEE-实验一 Java常用工具类编程

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

  4. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

  5. Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!

    有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能.查看最流行的扩展机制,比较性能并分析哪一个是最好的. 这是乐队之战,JMeter风格. Beanshell V. JSR223 V ...

  6. Java常用类详解

    目录 1. String类 1.1 String的特性 1.2 String字面量赋值的内存理解 1.3 String new方式赋值的内存理解 1.4 String 拼接字面量和变量的方式赋值 1. ...

  7. Java常用类,这一次帮你总结好!

    常用类 常用类概述: 内部类 Object类 包装类 数学类 时间类 字符串 String Builder和StringBuffer DecimalFormat 一.内部类 概念:在一个类内部再定义一 ...

  8. java多线程系类:基础篇:06线程让步

    本系类的知识点全部来源于http://www.cnblogs.com/skywang12345/p/3479243.html,我只是复制粘贴一下,特在此说明. 概要 本章,会对Thread中的线程让步 ...

  9. java多线程系类:基础篇:03Thread中的start()和run()的区别

    这个系类的内容全部来源于http://www.cnblogs.com/skywang12345/p/3479024.html.特别在此声明!!! 概要 Thread类包含start()和run()方法 ...

随机推荐

  1. Linux UDP服务器编程

    UDP主要使用sendto()和recvfrom() recvfrom() 函数原型如下: #include <sys/types.h> #include <sys/socket.h ...

  2. MATLAB—数组运算及数组化编程

    文章目录 前言 一.数组的结构和创建 1.数组及其结构 2.行数组的创建 3.对数组构造的操作 二.数组元素编址及寻访 1.数组元素的编址 2.二维数组元素的寻访 三.数组运算 非数的问题 前言 编程 ...

  3. 题解 party?

    传送门 挺遗憾的一个题 考场上想到的思路是题解的退化版,可以有71pts(赛时以为只有20pts),但因为这一场的策略原因没有打-- 首先发现颜色种类数很少,可以直接bitset上树剖维护,炸不了空间 ...

  4. @ControllerAdvice注解(全局异常捕获)

    背景 @ControllerAdvice 注解 通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute 适用于所有@RequestMapping方法的 ...

  5. C#基础知识---匿名方法使用

    一.匿名方法使用 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Tex ...

  6. CentOS7 yum方式安装MySQL5.7 + 远程连接

    1 下载并安装MySQL官方的 Yum Repository [root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-commu ...

  7. Quartz任务调度(1)概念例析快速

    实例解析概念 在quartz中,有几个核心类和接口:Job.JobDetail.Trigger.Calendar.Scheduler.下面我们结合实例来分析这些类的角色定位.现在我们有一个新闻网站,它 ...

  8. 同步(synchronized)

    转载至:https://www.cnblogs.com/dolphin0520/p/3923737.html 一.什么时候会出现线程安全问题? 在单线程中不会出现线程安全问题,而在多线程编程中,有可能 ...

  9. 关于Junit中Assert已经过时

    在junit4.12之后,Assert就过时了,提供了TestCase来取代: 同样在TestCase中原本比较常见的一些方法也已经取消了,例如:assertNotEquals.assertThat. ...

  10. SpringBoot笔记(3)

    一.配置文件 1.文件类型 1.1.properties 同以前的properties用法 1.2.yaml 1.2.1.简介 YAML 是 "YAML Ain't Markup Langu ...