一、Dubbo服务简介

  Dubbo是一个分布式服务架构,把核心业务抽取出来作为独立的服务,使前端应用能更快速和稳定的响应。

  Dubbo服务工作原理:服务提供方提供接口,并提供接口的实现,提供方注册服务到Zookeeper注册中心(也可以是其它分布式服务),然后消费者要调用服务时,直接去ZK上订阅该服务即可,同时因为消费者只能得到接口,而无法看到接口的实现,也保证了服务者的安全。

二、前期准备工作

  1、服务配置

  需创建一个配置文件,随意命名如:config.xml(供脚本调用),文件中配置dubbo服务接口地址及注册中心地址,文件内容为:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="zx-user-service" /> <dubbo:consumer timeout="100000" check="false"/>
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:registry address="zookeeper://192.168.77.123:2181" />
<dubbo:reference interface="com.dubbo.repeat.service.DubboService" id="dubboService" check="false" />
<dubbo:reference interface="com.dubbo.adaption.service.DubboService2" id="dubboService2" check="false" />
</beans>

  2、jdk版本

  由于LR11-Java vuser协议只支持jdk1.6版本,所以压力机本地jdk必须安装1.6版本并配置环境变量。

  

三、脚本编写

  1、协议选择

  New→Java Vuser协议

  

  2、脚本编写

  a、Java Vuser协议脚本主要包括三部分:init()、action()、end();

 import lrapi.lr;
public class Actions
{
//脚本初始化
public int init() throws Throwable {
return 0;
}//end of init
//主要功能实现
public int action() throws Throwable {
System.out.println("Dubbo服务");
return 0;
}//end of action
//脚本退出
public int end() throws Throwable {
return 0;
}//end of end
}

  b、配置文件加载及dubbo服务接口调用,需要导入相应服务的jar包;

         import java.lang.Math;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
      //
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xxx.xxx.xxx.DubboService;
import lrapi.lr;
public class Actions
{
ClassPathXmlApplicationContext context=null;
DubboService dubboService;
public int init() throws Throwable
{
         //配置文件加载--配置文件路径
         // ClassPathXmlApplicationContext使用了file前缀是可以使用绝对路径的
context = new ClassPathXmlApplicationContext(new String[] {"file:D:\\config\\config.xml"});
context.start();
         //dubbo服务调用--获得Spring中定义的Bean实例(对象)
DubboService =(DubboService) context.getBean("dubboService");
return 0;
}//end of init

  c、LR工具jdk设置及jar包导入;

  1、首先,进入Runtime Setting设置选项,Java Environment Setting→Java VM;

  

  2、其次,主服务jar包及相关依赖包导入(注意:主服务jar包必须为1.6版本,打jar包时必须注意,否正会报jar包版本较高问题,对依赖包版本没有要求);

  Runtime Setting→Java Environment Setting→Classpath

  

  jar包导入及jdk配置完成后,脚本即可正常运行。

  d、指定Dubbo服务接口调用及传参,完成脚本如下:

         import java.lang.Math;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xxx.xxx.xxx.DubboService;
import lrapi.lr;
public class Actions
{
ClassPathXmlApplicationContext context=null;
DubboService dubboService;
public int init() throws Throwable
{
context = new ClassPathXmlApplicationContext(new String[] {"file:D:\\config\\config.xml"});
context.start();
dubboService =(DubboService) context.getBean("dubboService");
return 0;
}//end of init
public int action() throws Throwable
{
lr.start_transaction("dubbo");
       //调用dubbo服务接口并传参
boolean b = dubboService.isVirtualSch("dubbo"); System.out.println("++++++++++++++"+b); if(b==true | b==false) {
lr.end_transaction("dubbo", lr.PASS); }
else
{
lr.end_transaction("dubbo", lr.FAIL);
} return 0;
}//end of action public int end() throws Throwable {
return 0;
}//end of end
}

  注:脚本调试过程中,可能会出现jar包服务不存在的问题,如果确定jar已经导入,此时只需要在Runtime Setting→classpath中,将报错缺少的服务jar包上调至首位即可,重新运行脚本问题解决。

  e、运行结果展示:

 Virtual User Script started at : 2018-11-08 14:20:43
Starting action vuser_init.
System.err: log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). Error
System.err: log4j:WARN Please initialize the log4j system properly. Error
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Actions.
Notify: Transaction "dubbo" started.
System.out: ++++++++++++++false Notify:
Notify: Transaction "dubbo" ended with "Pass" status (Duration: 0.1980).
Ending action Actions.
Ending iteration 1.

四、问题发现-添加负载机失败及问题解决

  性能测试过程中,LR在处理大并发情况下,存在因本地压力机线程及其它资源不足导致无法施加更大的压力,此时需添加两一台压力机作为负载机使用,但是Java Vuser协议与http协议稍有不同,会报“Error: Compilation process failed.”。

  1、添加负载机;

  

  2、连接负载机,status为ready即为连接成功;

  

  3、运行场景报错“Error: Compilation process failed.“,初始化失败。

  原因分析:无法加载脚本所需jar包导致。

  

  解决方法:

    由于在远程负载机的本地没有找到相应的jar包,所以报软件包不存在错误,必须创建相同的lib目录及配置文件目录分别用来存放jar包与config.xml配置文件。

    配置文件目录:D:\\config\\config.xml;

    jar包目录:存放jar包的绝对路径目录;

    注:路径必须完全一致,否则LR无法成功加载配置文件和jar包。

    问题解决。

【LoadRunner】LR编写Dubbo协议脚本的更多相关文章

  1. Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

    脚本开发-利用loadrunner开发Windows Sockets协议脚本 by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 实践举例 Socket服务端简单实 ...

  2. LoadRunner编写Socket协议脚本方法

    本文主要介绍使用LoadRunner手工编写Windows Socket协议测试脚本的方法. 通过LoadRunner编写Windows Socket协议测试脚本,总体说来,比较简单.就像把大象放进冰 ...

  3. [LoadRunner]性能测试实践_Hessian协议脚本编写

    第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...

  4. 使用LR编写HTTP协议Json报文格式接口脚本实战

    最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧. //实战代码如下所示:Action() { lr_start_tra ...

  5. LR编写webservice协议接口

    转自:http://lovesoo.org/use-loadrunner-call-webservice-interface-testing-optimization-summary.html 本文主 ...

  6. loadrunner之Java Vuser协议脚本编写

    步骤:1.根据自己使用的lr版面选择jdk 1)LR11   1.6   32位 2)LR12   1.7   32位 2.安装好jdk,并搭建java环境变量,安装好java代码编写工具 3.在sr ...

  7. [LoadRunner]性能测试实践_Hessian协议脚本编写2

    协议选取和运行配置请参考:http://www.cnblogs.com/whylaughing/p/5430821.html 这次直接贴代码让大家参考: import lrapi.lr; import ...

  8. LR回放https协议脚本失败: 错误 -27778: 在尝试与主机“www.baidu.com”connect 时发生 SSL 协议错误

    今天用LR录制脚本协议为https协议,回放脚本时出现报错: Action.c(14): 错误 -27778: 在尝试与主机"www.baidu.com"connect 时发生 S ...

  9. LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]

    Loadrunner默认发送是通过sockets(将http转换为sockets)发送的,而sockets默认SSL的版本为SSL2和SSL3.HTTPS协议录制的脚本以SSL3版本回放时会使sock ...

随机推荐

  1. segment and section for c++ elf

    http://blog.csdn.net/jiafu1115/article/details/12992497 写一个汇编程序保存成文本文件max.s. 汇编器读取这个文本文件转换成目标文件max.o ...

  2. 认识http客户端

    最简单的http客户端就是我们的浏览器,浏览器地址输入baidu.com,就会返回响应内容,打开network,都是http请求,第一个就是www.baidu.com的请求,旁边第一个General就 ...

  3. 问题 D: C++ 习题 输出日期时间--友元函数

    题目描述 设计一个日期类和时间类,编写display函数用于显示日期和时间.要求:display函数作为类外的普通函数,分别在Time和Date类中将display声明为友元函数.在主函数中调用dis ...

  4. Family Gathering at Christmas(思维题)

    Family Gathering at Christmas 时间限制: 1 Sec  内存限制: 128 MB提交: 13  解决: 4[提交] [状态] [讨论版] [命题人:admin] 题目描述 ...

  5. MySQL 主从同步 Slave_IO_Running: No

    MariaDB [chen]> show slave status \G *************************** 1. row ************************* ...

  6. caffe RandomHue和RandomSaturation

    https://www.cnblogs.com/wangyblzu/p/5710715.html HSV和RGB一样是一种图像的颜色模型,h表示色调,s表示饱和度 1.RandomHue void R ...

  7. jQuery对表单、表格的操作以及更多应用

    表单和表格都是HTML的重要组成部分,分别用于采集.提交用户输入的信息和显示列表数据. 表单应用:一个表单有3个基本组成部分: ①表单标签:包含处理表单数据所用的服务器端程序URL以及数据提交到服务器 ...

  8. iOS MapKit地图

    地图框架:#import <MapKit/MapKit.h> 基本属性和方法: 属性: 地图类视图:MKMapView 地图类型:MKMapType mapType 地图旋转:rotate ...

  9. 在windows7上配置xampp虚拟主机

    在设置之前最好关闭xampp1.修改hosts文件进入C:\Windows\System32\drivers\etc目录,找到hosts文件.在# Localhost (DO NOT REMOVE) ...

  10. c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

    引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...