一、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. C# windows 计划任务 程序编写

    编写windows 计划任务只需要在普通的类里面使用main方法就好了,因为任务计划在创建后走的是程序的主方法,代码如下: using System; using System.Collections ...

  2. java 基础词汇 必须 第九天

    Collection 集合 List 列表集合 Set 不重复集合 Linked 链表 Vector 线程安全集合 Hash 哈希值 tree 树型结构 Map 键值对集合 add 增加 remove ...

  3. MBProgressHUD 优雅地去提示

    项目主页: MBProgressHUD 实例下载: 点击下载 快速上手: 当执行需要较长时间的任务时,使用MBProgressHUD最重要的一点是: 保证主线程是空闲的,这样可以使UI实时更新.因此: ...

  4. ref是什么?

    ref是组件的特殊属性,组件被渲染后,指向组件的一个引用.可以通过组件的ref属性,来获取真实的组件. 因为,组件并不是真正的DOM节点,而是存在于内存中的一种数据结构,称为虚拟的DOM,只有当它真正 ...

  5. cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...

  6. Linux实战教学笔记15:用户管理初级(下)

    第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...

  7. http虚拟主机的简单配置训练

    http的虚拟主机 对于某些web访问站点而言,每天的访问量很少,因此真正的放一台服务器去进行web站点是很 浪费资源的,因此我们选择了虚拟主机 web处理模块的分类(MPM) 1.perfork 一 ...

  8. 文件/etc/passwd,/etc/shadow,/etc/group

    文件/etc/passwd /etc/shadow /etc/group 计算资源的使用(并不是所有的人都可以用这台计算机的) 权限:访问资源的的能力. 用户:获取资源或者权限的凭证. 用户的容器:关 ...

  9. iOS-xib的使用1

    一.File‘s owner的解析过程和使用: 1. storyboard:描述软件界面:iOS5.0后出来的. xib:描述软件界面:是storyboard前身. 2. 项目环境里面的所有资源都要通 ...

  10. graphviz使用

    官方网站:http://www.graphviz.org/ Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源工具包.DOT是一种 ...