一、环境配置
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)被测接口信息
接口定义
请求数据结构
返回数据结构
类似如下脚本:
----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
1 •public 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、对已经写好的项目,进行一下编译
打jar包(可能有jar冲突,这个要视warning来解决)
三、Java脚本常见问题
1、Spring导入配置报错 无法找到对应的string类
Alt + Enter 导入正确String包,或手动修改
2、运行main方法时报错
3、解决jar编译冲突
( http://stamen.iteye.com/blog/2030552)
在与 依赖树的组合包名进行排包
四、jmeter操作
1、导入maven打好的jar包放到lib/ext做外部扩展
3、打开jmeter
添加线程组
添加Java请求
添加查看结果树等监控配置
4、jmeter需要以管理员身份打开,否则会出现:
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>