上次直接使用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接口(一)的更多相关文章

  1. [Jmeter]jmeter之BeanShell Sampler测试应用

    前言: 在做接口测试的时候,有些接口做了签名校验,而签名是根据某算法进行加密,这时候,简单的接口测试工具无法完成该工作,所以想到了Jmeter,他是java编写,有强大的扩展性,足矣完成我们需要的操作 ...

  2. Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密

    [前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...

  3. jmeter的BeanShell Sampler使用--导入第三方jar包

    实现目的 测试接口的过程中,可能有时需要用到第三方jar包来生成一些测试数据,此时我们就可以通过BeanShell来调用自己编写的工具类,来对jmeter的功能进行扩展,以满足测试需要. 脚本实现 在 ...

  4. JMeter中BeanShell Sampler调试分享

    BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.p ...

  5. Jmeter通过BeanShell Sampler获取Jmeter的Bin路径,并存入变量供后面的脚本调用

    Jmeter的Bin路径是其运行路径,当把自动化测试的脚本放在Bin目录下时,为了将存储CSV的数据文件以及脚本的路径都设置成相对路径,我们需要获取到Jmeter的运行路径: 通过BeanShell ...

  6. JMeter中BeanShell Sampler

    https://blog.51cto.com/11009785/2385492?source=dra 1.jmeter报错 jmeter.protocol.java.sampler.BeanShell ...

  7. Jmeter常用脚本开发之Beanshell Sampler

    Beanshell Sampler Beanshell介绍:是一种完全符合java语法规范的脚本语言,且又拥有自己的一些语法和方法:是一种松散类型的脚本语言:它执行标准java语句和表达式,另外它还包 ...

  8. Jmeter的参数签名测试

    简介 参数签名可以保证开发的者的信息被冒用后,信息不会被泄露和受损.原因在于接入者和提供者都会对每一次的接口访问进行签名和验证. 签名sign的方式是目前比较常用的方式. 第1步:接入者把需求访问的接 ...

  9. Jmeter组件8. BeanShell Sampler

    BeanShell是一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性,像JavaScript和perl那样 ...

随机推荐

  1. Python Class 的实例方法/类方法/静态方法

    实例方法.类方法.静态方法 class MyClass(object): class_name = "MyClass" # 类属性, 三种方法都能调用 def __init__(s ...

  2. bzoj 2039 & 洛谷 P1791 人员雇佣 —— 二元关系最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2039 https://www.luogu.org/problemnew/show/P1791 ...

  3. POJ 1664 放苹果(递归或DP)

    一.Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t ...

  4. JVM体系结构之六:堆Heap之2:新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  5. python 基础 字典 小例子

    统计单词次数 作为字典存储 cotent = "who have an apple apple is free free is money you know" result = { ...

  6. java 学习众多API和手册资源下载

    这个资源包里面有jdk api 还有SSH框架的手册,数据库的手册,Jquery手册等等,还有正则表达式等, 希望可以帮助有需要的人 链接:http://希望pan.baidu.com/s/1pJ60 ...

  7. C语言连接mysql -select

    C语言实现查询mysql数据库的行数,列的属性,以及每条记录. /* select.c */ #include <stdio.h> #include <stdlib.h> #i ...

  8. R语言对矩阵按某一列排序

    [plain] view plaincopy a <- c(5,4,3,2,1) b <- c(1,2,3,4,5) c <- cbind(a,b) [plain] view pla ...

  9. storm源码分析之topology提交过程

    storm集群上运行的是一个个topology,一个topology是spouts和bolts组成的图.当我们开发完topology程序后将其打成jar包,然后在shell中执行storm jar x ...

  10. Python中读取,显示,保存图片的方法

    一 opencv import cv2 as cv # load img = cv.imread(imagepath) # shape=(height, width, channel) h,w,c = ...