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. Razor Pages

    学习Razor Pages笔记 学习内容:https://learnrazorpages.com Razor页面都是以.cshtml结尾,其中内容页面必须具有以下三个特征: 1,文件名首位不能是下划线 ...

  2. SQL 练习31

    查询任何一门课程成绩在 70 分以上的姓名.课程名称和分数 SELECT Sname,cname,Course.CId,SC.score from Student,Course,sc WHERE St ...

  3. Linux虚拟机系统中进行redis的哨兵模式配置

    一.配置步骤 开一台虚拟机1.创建三个redis配置文件:/etc/redis下pidfile "/var/run/redis6380.pid" redis的id号port 638 ...

  4. WebAPI中controller添加[AllowAnonymous]无效的解决方法

    对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...

  5. PE文件结构(32/64差异)

    1 基本概念 下表描述了贯穿于本文中的一些概念: 名称 描述 地址 是"虚拟地址"而不是"物理地址".为什么不是"物理地址"呢?因为数据在内 ...

  6. Mysql 中隐式转换

    案例一:条件字段函数操作 假设你现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号(tradeid).交易员 id(operator).交易时间(t_modified)等字段.为 ...

  7. 数据库中sql分类

    -- sql语句分类:--   1)数据定义语句(DDL):--            create/alter/drop--   2)数据操作语句(DML):--            insert ...

  8. Android:绘制字符

    根据FontMetrics的特点,将字符在矩形框中居中显示:

  9. java 后台解密小程序前端传过来的信息,解密手机号

    package com.llny.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; import ...

  10. Vue Router路由导航及传参方式

    路由导航及传参方式 一.两种导航方式 ①:声明式导航 <router-link :to="..."> ②:编程式导航 router.push(...) 二.编程式导航参 ...