最近在研究用Java写自动化,然后在Jmeter中进行测试,Java我们首先还是导包,这些太easy不说了,有些包可能没有,自己百度去下载,我们直接上代码,跟之前博客测试的服务器接口测试一样的,我们先做一个简单的登录测试Java脚本的编写

附上代码:util包UrlUtil.java

package com.yuliguo.util;

 public class UrlUtil {
     //定义服务器基类 static类型 可以调用final不可修改
     public static final  String JD_SERVER="http://39.107.102.34:8080/jd/";
     //定义登录接口
     public static  final  String JD_LOGIN="login";




 }



因为我的数据库密码没有进行MD5加密所有不用写,但是有加密的就可以Md5进行编译

util包MD5util.java

package com.yuliguo.util;

 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;

 public class MD5util {
     public static String getPwd(String pwd) {
         try {
             // 创建加密对象
             MessageDigest digest = MessageDigest.getInstance("md5");

             // 调用加密对象的方法,加密的动作已经完成
             byte[] bs = digest.digest(pwd.getBytes());
             // 接下来,我们要对加密后的结果,进行优化,按照mysql的优化思路走
             // mysql的优化思路:
             // 第一步,将数据全部转换成正数:
             String hexString = "";
             for (byte b : bs) {
                 // 第一步,将数据全部转换成正数:
                 // 解释:为什么采用b&255
                          /*
                           * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)
                           * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)
         35                  * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000
         36                  * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000
         37                  * 0000 0000 1001 1100 此时的temp是一个int类型的整数
         3                  */
                 int temp = b & 255;
                 // 第二步,将所有的数据转换成16进制的形式
                 // 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数
                 // 因此,需要对temp进行判断
                 if (temp < 16 && temp >= 0) {
                     // 手动补上一个“0”
                     hexString = hexString + "0" + Integer.toHexString(temp);
                 } else {
                     hexString = hexString + Integer.toHexString(temp);
                 }
             }
             return hexString;
         } catch (NoSuchAlgorithmException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return "";
     }
 }



entity包Login.java(这是我们解析gson的类)

package com.yuliguo.entity;

 public class Login {
     public int userId;
     public String username;
     public String tpken;
     public String message;
     public int statue;
 }



jdlogin包JDLogin.java

package com.yuliguo.jdlogin;

//首先我们需要继承Jmeter里面的一个类 AbstractJavaSamplerClient


 import com.google.gson.Gson;
 import com.yuliguo.entity.Login;
 import com.yuliguo.util.MD5util;

 import com.yuliguo.util.UrlUtil;
 import org.apache.jmeter.config.Arguments;
 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
 import org.apache.jmeter.samplers.SampleResult;

 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.net.HttpURLConnection;
 import java.net.URL;

 public class JDLogin extends AbstractJavaSamplerClient{
     //定义成员变量
     //这个对象主要是返回Jemter里面的察看结果树和聚合报告里面的响应时间
     public  SampleResult sampleResult;
     //返回给Jemter界面参数
     @Override
     public Arguments getDefaultParameters() {
         //返回给界面参数通过Arguments
         //实例化Arguments
         Arguments arguments=new Arguments();
         //设置参数
         arguments.addArgument("username","zhangsan");
         arguments.addArgument("password","123456");
         return arguments;
     }
     //返回测试用例执行之前的方法


     @Override
     public void setupTest(JavaSamplerContext context) {
         super.setupTest(context);
         //在测试用例执行之前实例化对象
         sampleResult=new SampleResult();
     }

     //运行测试用例的时候执行
     @Override
     public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
         //获取Jmeter里面设置的参数
         String name=javaSamplerContext.getParameter("username");
         String pwd=javaSamplerContext.getParameter("password");
         //对密码进行加密
 //        String after_pwd= MD5util.getPwd(pwd);
         //post提交 ,拼接参数需要提交的参数
         String json="username="+name+"&password="+pwd;

         //开始计算响应时间
         sampleResult.sampleStart();
         String login= UrlUtil.JD_SERVER+UrlUtil.JD_LOGIN;
         try{
             //网络请求http
             URL url=new URL(login);
             //设置连接
             HttpURLConnection connection= (HttpURLConnection) url.openConnection();
             //设置是不是提交参数
             //设置是否向HttpConnection输出
             connection.setDoOutput(true);
             // 设置是否从httpUrlConnection读入
             connection.setDoInput(true);
             //设置网络请求方式
             connection.setRequestMethod("POST");
             connection.setRequestProperty("Connection","Keep-Alive");
             connection.setRequestProperty("Charset","UTF-8");
             //设置文本类型
             connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
             //获取读取流
             PrintWriter pw=new PrintWriter(connection.getOutputStream());
             pw.print(json);
             pw.flush();
             pw.close();
             //获取网络请求
             if (connection.getResponseCode()==200){
                 //获取数据进行解析
                 BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));
                 //读取返回数据
                 String result=reader.readLine();
                 //设置将username和password返回给查看结果树
                 sampleResult.setResponseData(result,"UTF-8");
                 //使用gson解析
                 Gson gson=new Gson();
                 Login login1=gson.fromJson(result,Login.class);
                 if (login1.statue==0){
                     sampleResult.setSuccessful(true);
                 }else {
                     sampleResult.setSuccessful(false);
                 }

             }




         }catch (Exception e){


         }

 //        //设置将username和password返回给查看结果树
 //        sampleResult.setResponseData(name+pwd,"utf-8");
 //        //设置返回数据
 //        sampleResult.setSuccessful(true);
         //结束响应时间
         sampleResult.sampleEnd();



         return sampleResult;
     }
     //测试用例执行之后的方法

     @Override
     public void teardownTest(JavaSamplerContext context) {
         super.teardownTest(context);
     }
 }


这里我们使用的是HttpurlConnection的网络请求方式。

我们将这个项目的包导出来,然后放到我们Jmeter   ext包下,我们然后老套路进行就ok了