BeanShell组件
完全符合java的语法
以及自带语法的组件,总共有6种
信息打印
//在日志中打印张三
log.info("张三");
错误信息打印
//在日志中打印错误信息
log.error("打印错误信息");
拼接打印
//不支持整类,需要使用字符串拼接
log.info(123 + "");
java打印
//java打印,在控制台显示
System.out.println("java打印");
1.对于 [用户定义的变量] 可以直接通过vars.get()取值
2.对于通过 [正则表达式] 或其他表达式获取到的中间变量可以直接通过vars.get()取值
3.不同的BeanShell之间可以相互设置或者获取值
获取变量
//获取用户定义变量中的值
log.info(vars.get("name"));
定义变量
//定义一个变量
vars.put("age","18");
//定义一个变量
props.put("age","18");
//获取线程组1中BeanShell取样器1定义变量的值
log.info(props.get("age"));
注意:执行的时候记得勾选测试计划中的 [独立运行每个线程组] ,因为线程组执行是无序的
//获取响应码
log.info(prev.getResponseCode());
//获取响应的内容
log.info(prev.getResponseDataAsString());
准备一个java文件
public class Test{
public int sum(int a,int b){
return a+b;
}
}
BeanShell调用java文件
//引入java文件 (java文件所在的路径)
source("D:\\Test.java");
//创建一个对象并调用方法
int result = new Test().sum(5,6);
//拼接打印
log.info(result + "");
准备的项目及代码内容——将项目打包成jar包
在测试计划中引入jar包
BeanShell调用jar包
//导包(import跟的是java中的包名.类名)
import com.xj.Test;
//创建一个对象并调用方法
int result = new Test().sum(5,6);
//拼接打印
log.info(result + "");
原理:通过cmd命令执行python.py文件,然后将获取输出并打印的值作为返回结果
准备如下代码的一个pthon文件
import time
def get_random_number():
times = str(int(time.time()))
print(times)
if __name__ == '__main__':
get_random_number()
BeanShell调用python文件
//导包
import java.io.BufferedReader;
import java.io.InputStreamReader;
//组建cmd命令并执行python文件
String command = "cmd /c python D:/test.py";
Runtime rt = Runtime.getRuntime(); //初始化一个运行时对象
Process pr = rt.exec(command); //通过运行时对象运行cmd命令。
//运行时等待
pr.waitFor();
//调用pr进程对象获取到它的输入流。读取pr文件流的内容,并且保存到reponse_data
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuilder response = new StringBuilder();
String line = "";
while((line=br.readLine())!=null){
response.append(line);
}
String reponse_data = response.toString();
br.close();
//打印返回的内容
log.info("reponse_data:"+reponse_data);
准备如下代码的一个pthon文件
import argparse
import time
def get_random_number():
# 接收cmd命令里面的参数
parse = argparse.ArgumentParser()
parse.add_argument("-t", "--ticket")
args = parse.parse_args()
ticket = args.ticket
# print("ticket:%s" % ticket)
# 随机数
times = str(int(time.time()))
print(ticket + times)
if __name__ == '__main__':
get_random_number()
BeanShell调用python文件
//导包
import java.io.BufferedReader;
import java.io.InputStreamReader;
//组建cmd命令并执行python文件
String command = "cmd /c python D:/test.py -t admin";
Runtime rt = Runtime.getRuntime(); //初始化一个运行时对象
Process pr = rt.exec(command); //通过运行时对象运行cmd命令。
//运行时等待
pr.waitFor();
//调用pr进程对象获取到它的输入流。读取pr文件流的内容,并且保存到reponse_data
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuilder response = new StringBuilder();
String line = "";
while((line=br.readLine())!=null){
response.append(line);
}
String reponse_data = response.toString();
br.close();
//打印返回的内容
log.info("reponse_data:"+reponse_data);
准备如下代码的一个pthon文件
import argparse
def get_random_number():
# 接收cmd命令里面的参数
parse = argparse.ArgumentParser()
parse.add_argument("-t", "--ticket", action="append")
args = parse.parse_args()
ticket = args.ticket
print("ticket:%s" % ticket)
if __name__ == '__main__':
get_random_number()
BeanShell调用python文件
//导包
import java.io.BufferedReader;
import java.io.InputStreamReader;
//组建cmd命令并执行python文件
String command = "cmd /c python D:/test.py -t admin -t 123";
Runtime rt = Runtime.getRuntime(); //初始化一个运行时对象
Process pr = rt.exec(command); //通过运行时对象运行cmd命令。
//运行时等待
pr.waitFor();
//调用pr进程对象获取到它的输入流。读取pr文件流的内容,并且保存到reponse_data
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuilder response = new StringBuilder();
String line = "";
while((line=br.readLine())!=null){
response.append(line);
}
String reponse_data = response.toString();
br.close();
//打印返回的内容
log.info("reponse_data:"+reponse_data);
准备如下代码的一个pthon文件
import argparse
def get_random_number():
# 接收cmd命令里面的参数
parse = argparse.ArgumentParser()
parse.add_argument("-t", "--ticket", action="append")
args = parse.parse_args()
ticket = args.ticket
print("ticket:%s" % ticket)
if __name__ == '__main__':
get_random_number()
使用 “用户定义的变量” 定义一个变量
BeanShell调用python文件
传参的方式1:可以使用
${}
取值
//导包
import java.io.BufferedReader;
import java.io.InputStreamReader;
//组建cmd命令并执行python文件
String command = "cmd /c python D:/test.py -t admin -t ${name}";
Runtime rt = Runtime.getRuntime(); //初始化一个运行时对象
Process pr = rt.exec(command); //通过运行时对象运行cmd命令。
//运行时等待
pr.waitFor();
//调用pr进程对象获取到它的输入流。读取pr文件流的内容,并且保存到reponse_data
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuilder response = new StringBuilder();
String line = "";
while((line=br.readLine())!=null){
response.append(line);
}
String reponse_data = response.toString();
br.close();
//打印返回的内容
log.info("reponse_data:"+reponse_data);
传参的方式2:可以使用
vars.get()
获取值之后在拼接
//导包
import java.io.BufferedReader;
import java.io.InputStreamReader;
String names = vars.get("name");
//组建cmd命令并执行python文件
String command = "cmd /c python D:/test.py -t admin -t " + names;
Runtime rt = Runtime.getRuntime(); //初始化一个运行时对象
Process pr = rt.exec(command); //通过运行时对象运行cmd命令。
//运行时等待
pr.waitFor();
//调用pr进程对象获取到它的输入流。读取pr文件流的内容,并且保存到reponse_data
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
StringBuilder response = new StringBuilder();
String line = "";
while((line=br.readLine())!=null){
response.append(line);
}
String reponse_data = response.toString();
br.close();
//打印返回的内容
log.info("reponse_data:"+reponse_data);