首页 > 编程知识 正文

jmeter并发测试1000,jmeter测试登录功能

时间:2023-05-05 06:17:59 阅读:12374 作者:3903

根据需求,产品的部分功能使用thrift-RPC协议进行接口的添加、删除、变更、调查,前期使用Junit对其进行测试,为了简化RPC接口测试和提高后期的性能测试需求,使用Jmeter

前期准备:

开发了IDL编写的Thrift文件。 在dataService.thrift中,相关的接口函数和数据类型定义如下:

枚举v status { on,off } struct vdata { 1: requiredstringtablename; 2:请求字符串时间; 3: required string jsons; 4:可选v状态状态; } structvcondition { 1: requiredstringtablename; 2:要求i64开始时间; 3:请求i64结束时间; }服务数据服务{字符串写入(1: vdata数据); string read (1: vcondition condition; }

在本地部署thrift.exe并设置环境变量后,在与dataService.thrift相同的目录中运行。

thrift-r-genjavadataservice.thrift//备注:我在这里使用的是java语言;

成功运行后,在此目录下生成gen-java文件夹,将其打开到api目录下,然后单击DataService.java、VCondition.java、VData.java、VStatus.java

基于Jmeter的jar代码描述:

创建Maven项目,然后编辑pom.xml以添加依赖关系,如下所示:

ependenciesdependencygroupidorg.Apache.thrift/groupidartifactidlibthrift/artifactidversion0. 11.0/version/ependencydependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter/artifact id/ependencydependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-test/artifact id/ependencydependencygroupidorg.Apache.logging.log4j/groupidartifactidlog 4j-API/artifactidversion2.8.2/version ependencydependencygroupidorg.Apache.logging.log4j/groupidartifactidlog 4j-core/artifactidversion2.8/2

然后,将本地Jmeter版本目录Jmeter_Homelibext中的ApacheJMeter_core.jar和ApacheJMeter_java.jar作为外部依赖包进行手动操作

将以前生成的四个java文件导入到项目中,将包名称设置为com.test.thrift.api,然后在项目包名称下创建ReadRPC.java类。 必须根据Jmeter中java类的请求继承AbstractJavaSamplerClient。 代码如下。

package com.test.RPCTest; import com.test.thrift.API.data service; import com.test.thrift.API.v condition; 导入o

rg.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;import org.apache.jmeter.samplers.SampleResult;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;public class ReadRPC extends AbstractJavaSamplerClient{ private TTransport tTransport; private DataService.Client dataService; private TProtocol tProtocol; private VCondition vCondition; @Override public Arguments getDefaultParameters(){ //默认参数值,包括服务ip、端口、目标表、起止时间等 Arguments arguments=new Arguments(); arguments.addArgument("IP", "127.0.0.1"); arguments.addArgument("Port", "8888"); arguments.addArgument("TableName", "vle::test.trpc"); arguments.addArgument("StartTime", "1539752449"); arguments.addArgument("EndTime", "1539752449"); return arguments; } @Override public void setupTest(JavaSamplerContext context) { //初始化参数,并通过TTransport模式TBinaryProtocol二进制协议与服务端建立连接 // TODO Auto-generated method stub String ip=context.getParameter("IP"); int port=context.getIntParameter("Port"); String tableName=context.getParameter("TableName"); long startTime=context.getLongParameter("StartTime"); long endTime=context.getLongParameter("EndTime"); tTransport=new TSocket(ip,port,30000); vCondition=new VCondition(); try { tTransport.open(); tProtocol=new tBinaryProtocol(tTransport); dataService=new DataService.Client(tProtocol); vCondition.setTablename(tableName); vCondition.setStarttime(startTime); vCondition.setEndtime(endTime); } catch (Exception e) { // TODO: handle exception } super.setupTest(context); } @Override public SampleResult runTest(JavaSamplerContext context) { // TODO Auto-generated method stub SampleResult sampleResult = new SampleResult(); sampleResult.setDataEncoding("utf8"); sampleResult.sampleStart(); try { String msg=dataService.read(tCondition);//执行读操作,返回响应结果信息到msg if(null==msg){//为空判断 sampleResult.setSuccessful(false); sampleResult.setResponseMessage("响应结果为空!"); sampleResult.setSampleLabel("RPC读取"); sampleResult.setResponseOK(); sampleResult.setResponseData("响应结果为空!"); sampleResult.setDataType(SampleResult.TEXT); return sampleResult; } else { sampleResult.setSuccessful(true); sampleResult.setSampleLabel("RPC读取"); sampleResult.setResponseOK(); sampleResult.setResponseData(msg); System.out.println("msg="+msg); sampleResult.setDataType(SampleResult.TEXT); return sampleResult; } } catch (Exception e) { // TODO: handle exception sampleResult.setSuccessful(false); e.printStackTrace(); } finally{ sampleResult.sampleEnd(); } return sampleResult; } public void teardownTest(JavaSamplerContext context){ tTransport.close();//关闭连接 super.teardownTest(context); }}

在main函数中调用ReadRPC相关函数,代码如下:

public static void main( String[] args ) { JmeterRPC jrpc=new JmeterRPC(); jrpc.read(); } public void read(){ Arguments arguments=new Arguments(); arguments.addArgument("IP", "127.0.0.1"); arguments.addArgument("Port", "8888"); arguments.addArgument("TableName", "vle::test.trpc"); arguments.addArgument("StartTime", "1539752449"); arguments.addArgument("EndTime", "1539752449"); JavaSamplerContext context=new JavaSamplerContext(arguments); ReadRPC rpc=new ReadRPC(); rpc.setupTest(context); rpc.runTest(context); rpc.teardownTest(context); }

运行程序输出msg=[{".........相关响应数据.............."}]

调试成功后保存后,选中项目右键“Export”->“Java”->“Runnable JAR file”,点击“Next”,设置输出路径和依赖库,如下图所示:

备注:选择第一种方式将依赖包打sqdcs;

将打好的RPC.jar包拷贝到JMeter_Homelibext下,启动jmeter控制台打印该jar信息,如下图所示:

启动完成后添加Java请求,显示读取类名,配置相关参数,如下图所示:

执行结果如下:

之后便可以通过该jar进行RPC相关接口测试,而且保证其他测试人员无需写代码便可进行测试。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。