jmeter使用BeanShell Sampler测试自己写的java接口(一)
上次直接使用jmeter里面的FTPsampler没有连接成功
现在想着自己写java代码,通过jmeter进行调用进行连接测试实现并发
代码引文:
http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888384.html
/*
* Created on 2009-9-14
* Copyright 2009 by www.xfok.net. All Rights Reserved
*
*/
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
* @author YangHua
* 转载请注明出处:http://www.xfok.net/2009/10/124485.html
*/
public class TestSftp {
/**
* 连接sftp服务器
* @param host 主机
* @param port 端口
* @param username 用户名
* @param password 密码
* @return
*/
public ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
System.out.println("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
} catch (Exception e) {
}
return sftp;
}
/**
* 上传文件
* @param directory 上传的目录
* @param uploadFile 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file=new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载文件
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
* @param sftp
*/
public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file=new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除文件
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 列出目录下的文件
* @param directory 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
return sftp.ls(directory);
}
public static void main(String[] args) {
TestSftp sf = new TestSftp();
String host = "192.168.0.1";
int port = 22;
String username = "root";
String password = "root";
String directory = "/";
String uploadFile = "D:\\tmp\\upload.txt";
String downloadFile = "upload.txt";
String saveFile = "D:\\tmp\\download.txt";
String deleteFile = "delete.txt";
ChannelSftp sftp=sf.connect(host, port, username, password);
sf.upload(directory, uploadFile, sftp);
sf.download(directory, downloadFile, saveFile, sftp);
sf.delete(directory, deleteFile, sftp);
try{
sftp.cd(directory);
sftp.mkdir("ss");
System.out.println("finished");
}catch(Exception e){
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
写测试代码,调试下载
package test;
import com.jcraft.jsch.ChannelSftp;
public class TestSftpMain {
public static void main(String[] args){
TestSftp sf = new TestSftp();
String host = "192.168.1.107";
int port = 22;
String username = "root";
String password = "wxf";
String directory = "/root/Desktop";
String uploadFile = "D:\\tmp\\upload.txt";
String downloadFile = "threadServer.py";
String saveFile = "D:\\threadServer.py";
String deleteFile = "delete.txt";
ChannelSftp sftp=sf.connect(host, port, username, password);
// sf.upload(directory, uploadFile, sftp);
sf.download(directory, downloadFile, saveFile, sftp);
// sf.delete(directory, deleteFile, sftp);
try{
sftp.cd(directory);
sftp.mkdir("ss");
System.out.println("finished");
}catch(Exception e){
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
代码是将服务器的Desktop下面的一个py文件下载到本地的D盘
运行结果:下载成功
代码没有问题。使用上面的方法还需要下载第三方jar包地址:
下载地址:CSDN有下载
在jmeter中实现调用
搞了半天,调用上面的代码失败了,总是提示Typed variable declaration : Object constructorshi
问题定位过程:
1 经过不断尝试,定位问题,以为BeanShell Sampler不允许实例化对象,只能使用匿名对象。
2 实际是因为有了类型变量声明:
下面声明了一个ChannelSftp的类型变量。也就是说代码中只能声明基础变量
3 实际是没有加载创建类型变量的jar包,在eclipse里面通过添加外部jar包加进去了所以是成功的。到了jmeter就会出现编译都失败。只是这个问题提示不好定位。
错误如下
Response message: org.apache.jorphan.util.JMeterException:
Error invoking bsh method: eval Sourced file: inline
evaluation of:
`source("F:\\javatcp\\test\\src\\test\\test11.java");
test11 ts = new test11(); . . . '' :
Typed variable declaration : Object constructor
1
2
3
4
5
6
public ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
return sftp;
}
1
2
3
4
5
6
先附上简单的调用接口方式,再解决前面的问题
beanShell测试自己的java接口:
步骤:
1 编写代码:
public class Test {
public int ad(){
return 3;
}
}
1
2
3
4
5
6
7
2 beanshell脚本
source是直接加载java,也可以加载class文件更快
vars.put(“ad”,res.toString()); 给变量ad赋值
source("F:\\javatcp\\BSFjmeter\\src\\TestAdd.java");
int res = new Test().ad(3,3);
vars.put("ad",res.toString());
1
2
3
4
Debug Sampler样本的结果
JMeterVariables:
JMeterThread.last_sample_ok=true
JMeterThread.pack=org.apache.jmeter.threads.SamplePackage@c5adae
START.HMS=173222
START.MS=1458466342471
START.YMD=20160320
TESTSTART.MS=1458467432453
ddd=2
1
2
3
4
5
6
7
8
这里实现了简单的调用
BeanShell Sampler测试还有很多强大的用法,后面测试中继续加强练习
搞了好久,前面提示了不能声明类型变量,是因为没有引入对应的jar包。现在引入jar包
jmter引入第三方jar包除了直接放到lib/ext下,还有一种方式就是如图:
然后再测试就可以通过了
---------------------
作者:测试小卒子
来源:CSDN
原文:https://blog.csdn.net/g695144224/article/details/50937839
版权声明:本文为博主原创文章,转载请附上博文链接!
jmeter使用BeanShell Sampler测试自己写的java接口(一)的更多相关文章
- [Jmeter]jmeter之BeanShell Sampler测试应用
前言: 在做接口测试的时候,有些接口做了签名校验,而签名是根据某算法进行加密,这时候,简单的接口测试工具无法完成该工作,所以想到了Jmeter,他是java编写,有强大的扩展性,足矣完成我们需要的操作 ...
- Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密
[前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...
- jmeter的BeanShell Sampler使用--导入第三方jar包
实现目的 测试接口的过程中,可能有时需要用到第三方jar包来生成一些测试数据,此时我们就可以通过BeanShell来调用自己编写的工具类,来对jmeter的功能进行扩展,以满足测试需要. 脚本实现 在 ...
- JMeter中BeanShell Sampler调试分享
BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.p ...
- Jmeter通过BeanShell Sampler获取Jmeter的Bin路径,并存入变量供后面的脚本调用
Jmeter的Bin路径是其运行路径,当把自动化测试的脚本放在Bin目录下时,为了将存储CSV的数据文件以及脚本的路径都设置成相对路径,我们需要获取到Jmeter的运行路径: 通过BeanShell ...
- JMeter中BeanShell Sampler
https://blog.51cto.com/11009785/2385492?source=dra 1.jmeter报错 jmeter.protocol.java.sampler.BeanShell ...
- Jmeter常用脚本开发之Beanshell Sampler
Beanshell Sampler Beanshell介绍:是一种完全符合java语法规范的脚本语言,且又拥有自己的一些语法和方法:是一种松散类型的脚本语言:它执行标准java语句和表达式,另外它还包 ...
- Jmeter的参数签名测试
简介 参数签名可以保证开发的者的信息被冒用后,信息不会被泄露和受损.原因在于接入者和提供者都会对每一次的接口访问进行签名和验证. 签名sign的方式是目前比较常用的方式. 第1步:接入者把需求访问的接 ...
- Jmeter组件8. BeanShell Sampler
BeanShell是一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性,像JavaScript和perl那样 ...
随机推荐
- 洛谷 P4546 & bzoj 5020 在美妙的数学王国中畅游 —— LCT+泰勒展开
题目:https://www.luogu.org/problemnew/show/P4546 先写了个55分的部分分,直接用LCT维护即可,在洛谷上拿了60分: 注意各处 pushup,而且 spla ...
- 如何得到DataTable的列名
foreach (DataColumn dc in dtfood.Columns) { string lm = dc.ColumnName; }
- C语言中clock函数的使用
#include<cstdio> #include<cstdlib> #include<ctime> using namespace std; int main() ...
- Java标签引起的陷阱
请看下面的代码,请问下面的代码是否能够通过编译: package com.yonyou.test; /** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */ public ...
- 用python做的windows和linx文件夹同步。解决自动同步、加快传输大量小文件的速度、更丰富的文件上传过滤设置。
现在工具不好用,用的pycharm自动同步,但对于git拉下来的新文件不能自动上传到linux,只有自己编辑过或者手动ctrl + s的文件才会自动同步.导致为了不遗漏文件,经常需要全量上传,速度非常 ...
- 通信端口Com口被占用的原因分析
目前在调试地磅读取程序,近一段时间无法读取,排查原因发现是com1端口被占用. 从网上找了无数个文章,最终得到一条有价值的消息, 原因如下: com1端口不能读取电子地磅的数据了,重启之后发现 有一个 ...
- Java 决策制定
有两种类型的决策在Java中的语句,它们分别是: if 语句 switch 语句 if 语句: if语句由一个布尔表达式后跟一个或多个语句. 语法: if语句的语法是: if(Boolean_expr ...
- pig 入门教程(1)
出处:http://www.codelast.com/ 本文可以让刚接触pig的人对一些基础概念有个初步的了解. 本文大概是互联网上第一篇公开发表的且涵盖大量实际例子的Apache Pig中文教程(由 ...
- Cannot uninstall 'enum34'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
更新tensorflow时遇到报错 Found existing installation: enum34 1.0.4Cannot uninstall 'enum34'. It is a distut ...
- 面试问题 - SQL 中存储过程与函数的区别
SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行. 但函数也有着更多的限制,比如不能使用临 ...