Dubbo接口测试

一、环境配置
1、安装jdk,配置环境变量
2、安装maven,配置环境变量
  maven下载地址:http://maven.apache.org ;版本要求:3.2.5(必须使用此版本,高级版本IDE兼容性有问题)其实就是个压缩包,下载完毕后,解压,配置一下环境变量就可以用了!
  准备环境要求--jdk环境,jdk安装和环境变量的配置:http://wiki.ds.gome.com.cn/pages/viewpage.action?pageId=3671198
maven安装:
  从官网下载maven包到本地,并压缩到本地目录下,如: D:\Maven\apache-maven-3.2.1
  ---------配置环境变量
  --------打开cmd.exe 输入mvn clean (会提示错误,没关系),这时会生成C:\Users\xxx\.m2文件夹
  --------下载settings.xml 到.m2 文件夹,是的maven可以访问公司内部搭建的maven仓库,http://maven.ds.gome.com.cn/nexus/
环境变量配置:右键计算机,选择属性-->高级系统设置-->环境变量

点击环境变量,在用户变量下,新建/修改环境变量MAVEN_HOME,P\ATH. 设置MAVEN_HOME为Maven解压缩路径,如D:\Maven\apache-maven-3.2.1;如果不存在Path变量,则新增Path,使得值为%MAVEN-HOME%\bin;%JAVA_HOME%\bin;如果已经存在PATH变量,则在PATH变量开头新增%MAVEN_HOME%\BIN;

打开命令提示符,输入:mvn -version,如果配置成功,会显示mvn的版本号

注意配置:
打开setting.xml,配置本地的仓库和公司内部搭建的maven仓库,配置如下:

注意:
基于Linux系统上安装:
  tar -zxvf apache-maven-3.0-bin.tar.gz
  虽然直接使用该目录配置环境变量就能使用Maven了,这里推荐做法是:在安装目录旁平行地创建一个符号链接,方便日后升级。
  ln -s 目录名 链接名
  M2_HOME环境变量指向符号连接,并改path环境变量。
  export M2_HOME=/home/dev/maven-link
  export PATH=$PATH:$M2_HOME/bin
检查Maven安装:
  echo $M2_HOME
  M2_HOME 是必须要配置的,相当于配JAVA_HOME是为了查找java、javac等可执行文件一样,我认为这方便OS查找mvn.bat可执行文件。
  如果想让Maven跑的更快点,可以根据自己的情况来设置MAVEN_OPTS.
我们日常中使用最频繁的,如:
  mvn clean :清空输出目录(即target目录)
  mvn compile:编译源代码
  mvn package:生成构件包(一般为jar包或war包)
  mvn install: 将构件包安装到本地仓库
  mvn deploy:将构件包部署到远程仓库
maven项目结构规范:
  主代码:src/main/java
  测试代码:src/test/java
  包名:groupId + artifactId

3、安装ideaIU-14.0.3.exe
  Intellij IDEA配置:
    以64位版本运行将IDEA的快捷键进行修改,idea.exe ---> idea64.exe

    显示行号:

    中文乱码:控制台输出乱码,调整这两个框,选择GBK,GB2312,UTF-8要有耐心,慢慢改总有一款能改对

4、安装之后,在项目中找到pom.xml,以idea的方式打开,如图:

打开设置如图:

如图下面的红框中的地址要与setting.xml这个文件放的位置路径一致,以及与setting.xml中配置的本地仓库位置一致

5、如果项目没有添加jdk,在下图位置添加jdk

6、在pom.xml中配置上相关的接口的配置

7、如果相应的包未下载下来,可以按照下图方式进行包的加载

至此,环境就部署好了
二、脚本开发
jmeter------java请求
JMeter基本工作原理如图:

1、需求分析准备
  跟开发沟通需求后需要准备以下脚本开发配置
  a)被测接口POM配置maven 依赖项(坐标)(方便导入被测jar包)
  b)dubbo配置bean(被测接口spring zookeeper服务器配置)(被测接口spring接口名称、组、消费者等相关配置)
  c)被测接口信息
    接口定义
    请求数据结构
    返回数据结构
类似如下脚本:

2、pom文件介绍
  ----org.apache.jmeter jmeter包(Java请求ApacheJMeter java 和 _core包)
  ----org.apache.zookeeper zookeeper包
  ----com.github.sgroschupf.zkclient zookeeper客户端包
  ----org.apache.maven.plugins maven插件包
  ----com.alibaba.dubbo 阿里巴巴公司开源的dubbo包
  ----com.alibaba.fastjson 阿里巴巴公司开源的速度最快的 json和对象转换工具
  ----junit 单元测试框架
  ----org.slf4j.slf4j-api slf4j:全称为Simple Logging Facade for JAVA:java 简单日志接口
3、需要继承Jmeter的抽象类AbstractJavaSamplerClient
jmeter如图:
 
4、Jmeter实现java接口的压测,需要先按照接口文档编写接口测试用例并且调试通过。
 1public class LFindRedCouponsByIds extends AbstractJavaSamplerClient
 2 •{
 3 •   public void setupTest(JavaSamplerContext args)
 4         // setupTest类用于实现测试前置,连接那些服务器,调用那些方法等 (初始化方法,类似于LR的init和Junit中的setUp() )
 5 
 6 •   { }
 7 •   public Arguments getDefaultParameters()
 8         // getDefaultParameterslei类用于从外部( Jmeter界面)获取参数
 9 
10 •   { }
11 •   public boolean setParam(JavaSamplerContext args)
12         // setParam类用于将参数传递到类之中
13 
14 •   { }
15 •   public SampleResult runTest(JavaSamplerContext args)
16         // runTest类为调用测试接口方法部分,使用传递进来的参数 (类似于LR的Action,result.sampleStart()一个事务开始,result.sampleEnd()一个事务 结束)
17 
18 •   { }
19 •   public void teardownTest(JavaSamplerContext args)
20         // teardownTest类用于调用接口完成之后的收尾工作,输出调用服务处理时间,释放相关资源等 (类似于LR的end和Junit中的tearDown())
21 
22 •   { }
23 }

5、对已经写好的项目,进行一下编译

 
 6、如果Java脚本调试通过,要封装成一个jar包,如图:
注意:打jar前需要把<scope> provided </scope>打开(重要)
    打jar包(可能有jar冲突,这个要视warning来解决)
7、封装好之后如图:
8、把封装好的包放在jmeter的C:\Users\zhaichao.DS\Desktop\红包压测\apache-jmeter-2.13\lib\ext下
9、打开jmeter,新建Java请求。
三、Java脚本常见问题
1、Spring导入配置报错 无法找到对应的string类
 
 
修改方式:
Alt + Enter 导入正确String包,或手动修改
2、运行main方法时报错
此报错是POM文件里jmter依赖信息有错误导致,需要检查pom文件,(<!--<scope>provide</scope>-->没有注销导致)修改正确后在重新执行main方法。记住刷新一下包
3、解决jar编译冲突
使用maven dependency:tree 命令打印依赖树
http://stamen.iteye.com/blog/2030552
在与 依赖树的组合包名进行排包
四、jmeter操作
1、导入maven打好的jar包放到lib/ext做外部扩展
2、设置项目需要的压测场景
3、打开jmeter
  添加线程组
  添加Java请求
  添加查看结果树等监控配置
注意:由于是Java请求,是通过打印日志看返回结果的。点击 图片,查看jmeter输出的日志信息。
4、jmeter需要以管理员身份打开,否则会出现:
5、如果jmeter报jmeter Java.lang.OutOfMemoryError:PermGen space问题:如图
 
在jmeter.bat 中修改:PermSize JVM出事分配的非堆内存
  –set HEAP=-Xms512m -Xmx1024m
  –set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
  –set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
  –set TENURING=-XX:MaxTenuringThreshold=2
  –set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
  –set PERM=-XX:PermSize=256m -XX:MaxPermSize=512m
 6、在执行主方法的时候如果报错如下:
 1 Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'promotionAndCouponManager': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException
 2     at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:175)
 3     at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:103)
 4     at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1523)
 5     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
 6     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
 7     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
 8     at ContextGetBean.getBean(ContextGetBean.java:12)
 9     at CouponActivity.setupTest(CouponActivity.java:20)
10     at CouponActivity.main(CouponActivity.java:67)
11     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
13     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
14     at java.lang.reflect.Method.invoke(Method.java:606)
15     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
16 Caused by: java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException
17     at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistryFactory.createRegistry(ZookeeperRegistryFactory.java:37)
18     at com.alibaba.dubbo.registry.support.AbstractRegistryFactory.getRegistry(AbstractRegistryFactory.java:94)
19     at com.alibaba.dubbo.registry.RegistryFactory$Adpative.getRegistry(RegistryFactory$Adpative.java)
20     at com.alibaba.dubbo.registry.integration.RegistryProtocol.refer(RegistryProtocol.java:240)
21     at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.refer(ProtocolFilterWrapper.java:60)
22     at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.refer(ProtocolListenerWrapper.java:63)
23     at com.alibaba.dubbo.rpc.Protocol$Adpative.refer(Protocol$Adpative.java)
24     at com.alibaba.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:392)
25     at com.alibaba.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:300)

解决办法就是添加zkclient的jar,maven工程的话增加如下引用:

1 <dependency>
2     <groupId>com.github.sgroschupf</groupId>
3     <artifactId>zkclient</artifactId>
4     <version>0.1</version>
5 </dependency>

 

 

 
 

转载于:https://www.cnblogs.com/zhaic/articles/7047890.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值