zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    js对象的深度克隆
    通用事件监听函数
    JavaScript封装
    Ajax
    MarkDown怎么在博客园展现出来
    MarkDown语法学习
    暑期培训第三周SDN总结
    暑期培训遇到的floodlight+mininet+ubuntu的问题
    Ubuntu14.04搭建mininet与可视化工具miniedit介绍
    Ubuntu 14.04 安装 Sublime Text 3,并用Sublime Text 3 安装Package Control
  • 原文地址:https://www.cnblogs.com/zgq123456/p/9817630.html
Copyright © 2011-2022 走看看