UI自动化 +Java自动化脚本2

我们在上一篇java自动化脚本中用到了HttpurlConnection的网络请求方式,这里我们用得失okhttp网络请求方式编写我们的脚本

附上代码:(代码里面的注释很详细,自己看看就懂了)

本文主要介绍登陆和上传图片用okhttp编写Java测试脚本

首先我们需要导包lib(包里面我们放了七个包)

自己看吧,在哪里呢Jmeter lib里面找找看,可能有,哈哈哈,实在没有的下载吧

我们继续util包Jdurl.java

package com.yuliguo.util;

public class Jdurl {
    //服务器基类
    public  static  final  String JD_SERVER="http://39.107.102.34:8080/jd/";
    //登录
    public  static  final  String JD_LOGIN="login";
    //发送图片的url
    public  static  final  String JD_SEND="send";
}

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

package com.yuliguo.entity;

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



entity包Send.java

package com.yuliguo.entity;

public class Send {
    public  int statue;
    public  String message;
}

jdlogin包JDLogin.java

package com.yuliguo.jdlogin;

import com.google.gson.Gson;
import com.yuliguo.entity.Login;
import com.yuliguo.util.Jdurl;
import com.yuliguo.util.MD5util;
import okhttp3.*;
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.IOException;

public class JdLogin extends AbstractJavaSamplerClient{
    //声明成员变量
    public  SampleResult sampleResult;
    //返回给jmeter界面参数的方法

    @Override
    public Arguments getDefaultParameters() {
        //实例化Arguments=
        Arguments arguments=new Arguments();
        //往里面加入参数
        arguments.addArgument("username","zhangsan1");
        arguments.addArgument("password","123456");
        return arguments;
    }

    @Override
    public void setupTest(JavaSamplerContext context) {
        super.setupTest(context);
        //实例化
        sampleResult=new SampleResult();
    }

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        //获取参数
        String name=javaSamplerContext.getParameter("username");
        String pwd=javaSamplerContext.getParameter("password");
        //对密码进行MD5机密
//        String md5_pwd= MD5util.getPwd(pwd);
        //开始统计我们的响应时间
        sampleResult.sampleStart();
        //实例化okhttpClient
        OkHttpClient okHttpClient=new OkHttpClient();
        //设置body 提交参数
        RequestBody body=new FormBody.Builder().add("username",name)
                .add("password",pwd).build();
        //将body设置到request
        Request request=new Request.Builder()
                .url(Jdurl.JD_SERVER+Jdurl.JD_LOGIN).post(body).build();
        //下面会执行观察者模式,也就是接口回调,发送数据给服务器
        Call call=okHttpClient.newCall(request);
        //创建观察者模式返回数据,也就是常说的接口回调
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
            //当网络请求成功以后,获取内容进行解析
                String  json=response.body().string();
                System.out.println(json);
                //进行json解析
                //实例化gson
                Gson gson=new Gson();
                Login login=gson.fromJson(json,Login.class);
                //获取状态
                int statue=login.statue;
                System.out.println("statue="+statue);
                //返回结果给察看结果树
                sampleResult.setResponseData(json,"UTF-8");
                //设置返回数据类型
                sampleResult.setDataType(SampleResult.TEXT);
                //判断
                switch (statue){
                    case 0:
                        sampleResult.setSuccessful(true);
                        sampleResult.setResponseCodeOK();
                        break;
                    case 1:
                        sampleResult.setSuccessful(false);
                        break;
                }

            }
        });
        //结束统计响应的时间
        sampleResult.sampleEnd();

        return sampleResult;

    }

    @Override
    public void teardownTest(JavaSamplerContext context) {
        super.teardownTest(context);
    }
    public  static  void main(String[] args){
        Arguments params = new Arguments();

        params.addArgument("username", "zhangsan1");//设置参数,并赋予默认值1
        params.addArgument("password", "123456");//设置参数,并赋予默认值2

        JavaSamplerContext arg0 = new JavaSamplerContext(params);

        JdLogin test = new  JdLogin();

        test.setupTest(arg0);

        test.runTest(arg0);

        test.teardownTest(arg0);
    }
}

jdlogin包SendImage.java(注意:我们在最后打的注释我是想在控制台先打印一下看是否ok,然后我们token值会因为我们每次登陆而发生改变)

package com.yuliguo.jdlogin;

import com.google.gson.Gson;
import com.yuliguo.entity.Send;
import com.yuliguo.util.Jdurl;
import okhttp3.*;
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.File;
import java.io.IOException;

public class SendImage extends AbstractJavaSamplerClient {
    //实例化对象
    public SampleResult sampleResult;
    //获取Jmeter界面值得方法

    @Override
    public Arguments getDefaultParameters() {
        //实例化对象
        Arguments arguments=new Arguments();
        arguments.addArgument("userId","");
        arguments.addArgument("token","");
        arguments.addArgument("image","");
        arguments.addArgument("image1","");
        arguments.addArgument("image2","");
        return arguments;
    }
    //初始化对象
    @Override
    public void setupTest(JavaSamplerContext context) {
        super.setupTest(context);
        //实例化对象
        sampleResult=new SampleResult();
    }
    //运行测试用例的方法

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        //写脚本步骤
        //1.继承AbstractJavaSamplerClient,重写4个方法
        //2.在getDefaultParameters指定jmerter界面需要添加的值
        //3.声明成员变量SampleResult
        //4.在setupTest里面实例化 SampleResult对象
        //5.在runTest里面返回sampleResult
        //6.在runTest获取jemter里面输入值
        //7.在runtest里面统计开始的时间和结束的时间 通过sampleResult.sampleStart()开始
        //sampleResult.sampleEnd()结束,一般在网络请求之前开始,在网络请求之后结束
        //8.在runTest实例化okhttpClient
        String userId = javaSamplerContext.getParameter("userId");
        String token = javaSamplerContext.getParameter("token");
        String image = javaSamplerContext.getParameter("image");
        String image1 = javaSamplerContext.getParameter("image1");
        String image2 = javaSamplerContext.getParameter("image2");
        //开始统计时间
        sampleResult.sampleStart();
        //实例化okhttpclient
        OkHttpClient client = new OkHttpClient();
        //文字提交的 content-type : application/x-www-form-urlencode
        //图片提交 content-type: multipart/form-data okhttp这个框架支持键可以重复使用
        //实例化file
        File file1 = new File(image1);
        File file2 = new File(image2);
        //实例化
        RequestBody body = new MultipartBody.Builder()
                .addFormDataPart("username", userId)
                .addFormDataPart("token", token)
                .addFormDataPart("image", image)
                .addFormDataPart("image", file1.getName(), RequestBody.create(MediaType.parse("image/jpg"),
                        new File(image1)))
                .addFormDataPart("image", file2.getName(), RequestBody.create(MediaType.parse("image/jpg"),
                        new File(image1)))
                .build();
        //将body加入到请求里面
        Request request = new Request.Builder()
                .post(body)
                .url(Jdurl.JD_SERVER + Jdurl.JD_SEND)
                .build();
        //发送请求
        Call call = client.newCall(request);
        //观察者模式
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //返回给查看结果数
                String result = response.body().string();
                System.out.println(result);
                //进行解析
                Gson gson = new Gson();
                Send send = gson.fromJson(result, Send.class);
                //获取statue
                int statue = send.statue;
                System.out.println(statue);
                //判断设置成功还是失败
                sampleResult.setResponseData(result, "UTF-8");
                switch (statue) {
                    case 0:
                        sampleResult.setSuccessful(true);
                        break;
                    case 1:
                        sampleResult.setSuccessful(false);
                        break;
                }

            }
        });
        //结束统计时间
        sampleResult.sampleEnd();
        //如果这里不返回数据,查看结果数是看不到的,聚合报告统计时间也看不到
        return sampleResult;

    }
    //测试用例结束的时候

//    @Override
//    public void teardownTest(JavaSamplerContext context) {
//        super.teardownTest(context);
//    }
//    public static void main(String[] args) {
//        // write your code here
//
//        Arguments params = new Arguments();
//
//        params.addArgument("userId", "2");//设置参数,并赋予默认值1
//        params.addArgument("token", "a998989fd3a5bd5d4b25f08fa3d1f6ef");//设置参数,并赋予默认值2
//        params.addArgument("image", "世界在我脚下");//设置参数,并赋予默认值2
//        params.addArgument("image1", "/Users/yuliguo/Desktop/a.jpg");//设置参数,并赋予默认值2
//        params.addArgument("image2", "/Users/yuliguo/Desktop/b.jpg");//设置参数,并赋予默认值2
//
//        JavaSamplerContext arg0 = new JavaSamplerContext(params);
//
//
//        SendImage test = new  SendImage();
//
//        test.setupTest(arg0);
//
//        test.runTest(arg0);
//
//        test.teardownTest(arg0);
//    }
}

然后呢?我们该进行打包操作了,然后将打包好的文件放到ext文件里面。

注意:这里跟上一篇有点区别,我们多加了如图的后三个(ext里面哈)

到这里我们就可以启动我们的Jmeter了,不多说了。

补充:

上图的807行注释去掉,因为可能会影响Jmeter的数据返回,就到这里。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值