zoukankan      html  css  js  c++  java
  • 【LoadRunner】LR编写Dubbo协议脚本

    一、Dubbo服务简介

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

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

    二、前期准备工作

      1、服务配置

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

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

       2、jdk版本

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

      

    三、脚本编写

      1、协议选择

      New→Java Vuser协议

      

      2、脚本编写

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

     1 import lrapi.lr;
     2 public class Actions
     3 {
     4     //脚本初始化
     5     public int init() throws Throwable {
     6         return 0;
     7     }//end of init
     8     //主要功能实现
     9     public int action() throws Throwable {
    10         System.out.println("Dubbo服务");
    11         return 0;
    12     }//end of action
    13     //脚本退出
    14     public int end() throws Throwable {
    15         return 0;
    16     }//end of end
    17 }

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

     1         import java.lang.Math;
     2         import java.util.ArrayList;
     3         import java.util.HashMap;
     4         import java.util.List;
     5         import java.util.Map;
          //
    6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 import com.xxx.xxx.xxx.DubboService; 8 import lrapi.lr; 9 public class Actions 10 { 11 ClassPathXmlApplicationContext context=null; 12 DubboService dubboService; 13 public int init() throws Throwable 14 {
             //配置文件加载--配置文件路径
             // ClassPathXmlApplicationContext使用了file前缀是可以使用绝对路径的
    15 context = new ClassPathXmlApplicationContext(new String[] {"file:D:\config\config.xml"}); 16 context.start();
             //dubbo服务调用--获得Spring中定义的Bean实例(对象)
    17 DubboService =(DubboService) context.getBean("dubboService"); 18 return 0; 19 }//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服务接口调用及传参,完成脚本如下:

     1         import java.lang.Math;
     2         import java.util.ArrayList;
     3         import java.util.HashMap;
     4         import java.util.List;
     5         import java.util.Map;        
     6         import org.springframework.context.support.ClassPathXmlApplicationContext;        
     7         import com.xxx.xxx.xxx.DubboService;
     8         import lrapi.lr;
     9         public class Actions
    10         {
    11         ClassPathXmlApplicationContext context=null;
    12         DubboService dubboService;
    13         public int init() throws Throwable 
    14         {
    15             context  = new ClassPathXmlApplicationContext(new String[] {"file:D:\config\config.xml"});
    16             context.start();        
    17             dubboService =(DubboService) context.getBean("dubboService");
    18             return 0;
    19         }//end of init
    20         public int action() throws Throwable 
    21         {
    22             lr.start_transaction("dubbo");
    23        //调用dubbo服务接口并传参
    24             boolean b = dubboService.isVirtualSch("dubbo");
    25 
    26             System.out.println("++++++++++++++"+b);
    27 
    28             if(b==true | b==false)
    29 
    30             {
    31             lr.end_transaction("dubbo", lr.PASS);
    32 
    33             }
    34             else
    35             {
    36             lr.end_transaction("dubbo", lr.FAIL);
    37             }
    38         
    39             return 0;
    40         }//end of action
    41         
    42         public int end() throws Throwable {
    43             return 0;
    44             }//end of end
    45         }

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

     

      e、运行结果展示:

     1 Virtual User Script started at : 2018-11-08 14:20:43
     2 Starting action vuser_init.
     3 System.err: log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).                                                                                                                                                      Error
     4 System.err: log4j:WARN Please initialize the log4j system properly.                                                                                                                                                      Error
     5 Ending action vuser_init.
     6 Running Vuser...
     7 Starting iteration 1.
     8 Starting action Actions.
     9 Notify: Transaction "dubbo" started.
    11 System.out: ++++++++++++++false                                                                                                                                                      Notify:
    12 Notify: Transaction "dubbo" ended with "Pass" status (Duration: 0.1980).
    13 Ending action Actions.
    14 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包。

        问题解决。

  • 相关阅读:
    MySQL Lock--gap before rec insert intention waiting
    MySQL Index--InnoDB引擎的主键索引
    MySQL Binlog--事务日志和BINLOG落盘参数对磁盘IO的影响
    MySQL Partition Table--分区表优缺点
    MySQL DataType--当整数列遇到小数
    MySQL DataType--日期格式
    MySQL DataType--隐式类型转换
    MySQL Hardware--RAID卡常用信息查看
    DBA常用SQL之表空间与数据文件
    DBA常用SQL之数据库基础信息
  • 原文地址:https://www.cnblogs.com/zhang-zhi/p/9929447.html
Copyright © 2011-2022 走看看