jmeter+dubbo接口开发
1、在自己安装的Linux机器上面安装zookeeper服务
1) 在data路径下使用输入命令:wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
如果没有wget命令,使用yum进行下载:( yum install wget* -y)
2)tar -zxvf文件名
tar -zxvf zookeeper-3.4.14.tar.gz
3)在zookeeper的主路径下新建下面两个文件名
mkdir {logs,data},这个命令一下子创建两个文件夹
4)进入到conf目录下,修改zookeeper配置文件(备份一个,防止设置错误,无法恢复)
备份文件命令: cp zoo_sample.cfg zoo.cfg
修改配置文件zoo.cfg:vim zoo.cfg
在配置文件的tickTime=2000行下添加一下内容:
dataDir=/root/data/zookeeper-3.4.14/data
dataLogDir=/root/data/zookeeper-3.4.14/logs
配置集群方式,这需要写多个,ip值就是对应的主机ip,因为是不同的主机所以端口号可以完全一样,如图
在之前设置的dataDir中新建myid文件, 写入一个数字, 该数字表示这是第几号server. 该数字必须和zoo.cfg文件中的server.X中的X一一对应.
5)在配置文件vim /etc/profile中添加下面两句
#zookeeper
export ZK_HOME=/data/zookeeper-3.4.14
export PATH=………………:$PATH:$ZK_HOME/bin(path前面路径不要动,添加上后面部分即可)
使用source /etc/profile实时更新修改的配置文件
6)启动
切换到bin目录下启动:./zkServer.sh start
查看是否启动成功: zkServer.sh status
连接 (-Initiating client) :连接本机可以直接使用 zkCli.sh
连接其他地址,使用: zkCli.sh -server ip:2181(2181为默认端口)
然后使用ls /:前提条件:添加环境变量
配置文件说明:
1、myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识;
2、zoo.cfg 文件是zookeeper配置文件 在conf目录里;
3、log4j.properties文件是zk的日志输出文件 在conf目录里用java写的程序基本上有个共同点日志都用log4j,来进行管理;
2、在idea工具里面完成dubbo消费提供者和消费者模块
1)创建一个发送接口文件SmsService,文件内容如下:
package com.pertest.server;
public interface SmsService {
/*
* 定义一个发短信的接口
* @param content 内容
* @param platform平台,分别对应LIANTONG,YIDONG,DIANXIN
* @return 正常返回发送成功,失败即可,这里为了展示发送的手机号和内容平台,直接把内容再返回去
*/
String sendSms(String mobile, String content, String platform);
}
2)创建SmsServiceImpl文件,该文件模拟是发送信息,文件内容为:
package com.pertest.server.impl;
import com.pertest.server.SmsService;
import org.springframework.stereotype.Service;
@Service
@Component
public class SmsServiceImpl implements SmsService {
public String sendSms(String mobile, String content, String platform) {
try{
Thread.sleep(2000); // 模拟调用短信接口耗时2s
return String.format("发送结果:%s, 手机号码:%s, 内容:%s, 平台:%s", "SUCCESS", mobile,content,platform);
}
catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
3)编辑pom.xml文件,需要将用到的其他依赖包都添加进来
4)在resources下添加日志文件log4j.xml,文件中包含了日志文件的格式
5)在resources下添加日志文件applicationProvider.xml,文件中包含注册地址,注册地址(zookeeper所在的地址),用dubbo协议在28080端口暴露服务,接口的位置,实现bean(对应第二步骤)
6)在创建包com.pertest.main,下创建调用java文件MyMainPertest,文件内容如下:
package com.pertest.main;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyMainPertest {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"applicationProvider.xml"});
context.start();
System.out.println("按任意键退出");
System.in.read();
}}
7)编译,进行调试
8)打Maven包
view--Tool windows----Maven--install---绿色运行键
消费端:
1)将一些依赖包添加进来,包括消费提供端的刚刚打的Maven包
<dependency>
<groupId>com.pertest</groupId>
<artifactId>dubbo_provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2)在resources下添加日志文件log4j2.xml,文件中包含了日志文件的格式
3)在resources下添加日志文件customer.xml,文件中包含调用的信息
4)在创建包com.pertest.main,下创建调用java文件ConsumerApplicationTests这个类名会在jmeter中用到:
1.写一个测试方法,GetStringTest随便取名字
public static String GetStringTest(String mobile, String content, String platform){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:customer.xml");写一个//步骤3对应的文件目录
context.start();
SmsService smsService = (SmsService) context.getBean("demoService");
String s = smsService.sendSms(mobile, content, platform);//消息发送端中编写的那个接口
return s;
}
2.//主函数进行调用
public static void main(String[] args) {
String mobile = "18262988703";
String content = "pertest";//内容
String platform = "test";//平台
String result = GetStringTest(mobile,content,platform); // 调用java接口
System.out.println("+++++++++"+result);
}
3.//jmeter每次执行的内容部分
public SampleResult runTest(JavaSamplerContext args0) {
//setValues(args);
SampleResult sr = new SampleResult();
sr.setSampleLabel("JmeterDubboTest");//在jmeter结果树查看显示的内容
sr.sampleStart(); //事务开始,开始计算时间
try {
String result = GetStringTest(mobile,content,platform); // 调用java接口
sr.setResponseData("From dubbo provider:"+result,null); //输入方法结果
sr.setDataType(SampleResult.TEXT); //输入结果保存内容
System.out.println(result); //在jmeter的控制台终端显示
sr.setSuccessful(true); //设置测试结果true
}
catch (Throwable e) {
sr.setSuccessful(false); //设置测试结果false
e.printStackTrace();//失败进行捕获跟踪
}
finally {
sr.sampleEnd(); // 事务结束,计算时间
}
return sr;
}
4.最后打包:view--Tool windows----Maven--install---绿色运行键
5.如果未制定打包文件的位置,则在src同级的target目录下面
在Maven找包方法:
1)进入直接在 maven仓库中搜索:https://mvnrepository.com ,找到需要的包的对应版本,并复制对应的依赖配置
2)直接复制该信息,并粘贴在pom.xml里面就可以啦
3、修改成jmeter的参数化脚本,并在jmeter里面完成调用
关于脚本部分:
在消费端添加上一下内容:
// 定义全局变量
private String mobile;
private String content;
private String platform;
// 此方法为参数化内容,可以显示在jmeter界面中,如果返回为null,则不显示
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("mobile",""); //名字自定义参数化
params.addArgument("content",""); //进入jmeter页面可以看到这个参数
params.addArgument("platform","");
return params;
}
// 执行初始化内容,每个线程执行一次,通常建议在该方法中获取参数值,而不是RunTest方法中使用,以便尽可能减少测试开销
public void setupTest(JavaSamplerContext arg0){
mobile = arg0.getParameter("mobile");
content = arg0.getParameter("content");
platform = arg0.getParameter("platform");
}
// 在测试运行结束时进行本次测试所需的清理工作,也是一个线程执行一次
public void teardownTest(JavaSamplerContext arg0) {
}
1)将消费端的jar包放到到lib--ext目录下
2)打开jmete,添加java请求
3)就可以看到刚刚的ConsumerApplicationTests方法,以及设置的参数化值
4)最后的运行结果如图: