最近在研究用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了