JSR223 和Beashell 使用方法
Posted 安好_世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSR223 和Beashell 使用方法相关的知识,希望对你有一定的参考价值。
A.JSR223 是基于 groovy 的语法,所以先了解下常用 JSR223 的方法
1. log:用来记录日志文件,写入到 jmeber.log 文件,使用方法:log.info(“This is log info!”);
2. ctx ( JmeterContext ) 通 过 它 来 访 问 context , 使 用 方 法 可 参 考 : org.apache.jmeter.threads.JMeterContext。
3. vars - (JMeterVariables):操作 jmeter 变量,提供读取/写入访问变量的方法。这个 变量实际引用了 JMeter 线程中的局部变量容器(本质上是 Map),它是测试用例与 BeanShell 交互的桥梁,常用方法: a) vars.get(String key):从 jmeter 中获得变量值 b) vars.put(String key,String value):数据存到 jmeter 变量中
4. 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");
5. prev - (SampleResult):获取前面的 sample 采样的结果,常用方法: a) getResponseDataAsString():获取响应信息 b) getResponseCode() :获取响应 code 我本地开发一个接口进行演示,看下我的请求
B.Beashell:
正则表达式获取的值存在本地:
代码如下:
String getdata = vars.get("lastmileTrackingNumber1");
String filename = "C:/Desktop/data/invioce/lastmileTrackingNumber50.txt";
FileWriter writer;
try {
writer = new FileWriter(filename,true);
writer.write(getdata);
writer.write("\\r\\n");
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
C.那其他接口如何引用这个值呢?我们需要借助于 csv data 这个插件
我们需要用到文件的 lastmileTrackingNumber值的时候,就用 lastmileTrackingNumber去引用即可,见 图中插件配置第三行,变量名命名;
元件配置解释:
1、Filename:文件名,指保存信息的文件目录,可以相对或者绝对路 径,可通过 browse 按钮添加引用的文件
2、File encoding:csv 文件编码,可以不填,一般为 UTF-8
3、Variable Names(comma-delimited):变量名称,因为我们只有一 个 lastmileTrackingNumber参数,变量使用格式 ${name},多个参数也支持,参数顺序 跟文件里的列相对应,比如第一个参数对应第一列,用逗号分隔,第 二个参数对应第二列
4.ignore first line:按照字面意思理解即可,就是第一行要不要 取值的意思
5. Delimiter(use \'\\t for tab\'):定义分隔符为\',\',若参数化文 档中有多列,则每列间用逗号分隔,跟上文第 3 条对应一起理解
6. 是否允许引用数据。默认设置为 false。例如数据样式为:"101-005-98536","57" 时,此处需设置为 true,一般默认为 false 即 可,这个一般都是默认;
7. Recycle on EOF?:是否循环读取参数文件内容。默认设置为 true。 设置为 true 时,当已经读取完参数文件内的测试用例数据,还需要 继续获取用例数据时,此时会循环读取参数文件数据;设置为 false 时,若已至文件末尾,则不再继续读取测试数据。
8. Sotp thread on EOF?:当读取到参数文件末尾时,是否停止读取 线程。默认为 false。当 Recycle on EOF? 设置为 true 时,此项 不起任何作用。当且仅当 Recycle on EOF? 为 false 时,此项配置 才生效;
举例理解:
a. 当 Recycle on EOF 选择 true 时,Stop thread on EOF 选择 true 和 false 无任何意义,通俗的讲,在前面控制了不停的循环读 取,后面再来让 stop 或 run 没有任何意义
b. 当 Recycle on EOF 选择 false 时,Stop thread on EOF 选择 true,线程 4 个,参数 3 个,那么只会请求 3 次
c. 当 Recycle on EOF 选择 false 时,Stop thread on EOF 选择 flase,线程 4 个,参数 3 个,那么会请求 4 次,但第 4 次没有参数 可取,不让循环,所以第 4 次请求错误
9. Sharing mode:共享模式,即参数文件变量作用域。主要有以下 几种方式:
All threads:当前测试计划中的所有线程组中的所有的线程均有效。
Current thread group:当前的线程组中的线程有效。
Current thread:当前线程有效。
举例理解:
1.All threads:计划中所有线程,假如说有线程 1 到线程 n (n>1),线程 1 取了一次值后,线程 2 取值时,取到的是 csv 文件中 的下一行,即与线程 1 取的不是同一行。
2.Current thread group:当前线程组,假设有线程组 A、线程组 B, A 组内有线程 A1 到线程 An,线程组 B 内有线程 B1 到线程 Bn。取之 情况是:线程 A1 取到了第 1 行,线程 A2 取第 2 行,现在 B1 取第 1 行,线程 B2 取第 2 行。
3.Current thread:当前线程。假设测试计划内有线程 1 到线程 n (n>1),则线程 1 取了第 1 行,线程 2 也取第 1 行。
以上是关于JSR223 和Beashell 使用方法的主要内容,如果未能解决你的问题,请参考以下文章
Java:在应用程序中嵌入脚本引擎:JSR 223 (ScriptEngine) 仍然是一个好的解决方案吗?