文档章节

分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测

泥水佬
 泥水佬
发布于 2017/09/11 16:15
字数 1269
阅读 94
收藏 0
点赞 0
评论 0

由于Beetle.DT是一个分布式压力测试工具,所以在使用上并不像普通工具那样安装运行这么简单;由于工具涉及到测试管理中心,节点和管理端等工具; 所以必须要进行相应的部署才能运行。接下来详解一下如果安装Beetle.DT并进行简单的HTTP,SQL和TCP相关压力测试。

运行环境要求

现有版本的Beetle.DT只能运行在windows+.net 4.5的基础上(暂只支持Console模试运行)在功能完善后会进行win service服务和.net core版的扩展开发。工具运行主要部署两大应用服务(已编译在Public目录下)分别是:测试管理中心和测试运行节点,通过配置相关网络信息确保节点和中心有效地进行交互通讯。

测试管理中心

项目Beetle.DTCenter是测试管理中心的运行程度,中心需要配置两个服务地址分别是节点通讯端口和管理通讯端,对应端口是9091和9092;如果想修改服务地址和端则通过配置文件修改(Beetle.DTCenter.exe)

<appSettings>
    <!-- ... -->
    <add key="server-host" value=""/>
    <add key="server-port" value="9091"/>

    <add key="manager-host" value=""/>
    <add key="manager-port" value="9092"/>
    <!-- ... -->
  </appSettings>

节点服务

项目Beetle.DTNode是测试节点服务,节点服务除了包括自身的服务外目录下还包括了Beetle.DTProcess;Beetle.DTProcess的主要用途是用于加载运行测试用例;Beetle.DTProcess并不需要配置任何信息,不过它必须存放在Beetle.DTNode对应的目录下。Beetle.DTNode主要是配置Beetle.DTCenter对应的server-host和server-port,确认节点能有效的指向对应的测试中心。

<appSettings>
    <!-- ... -->
    <add key="server-host" value="127.0.0.1"/>
    <add key="server-port" value="9091"/>
    <!-- ... -->
  </appSettings>

管理工具

当测试中心和节点都部署完成后,就可以使用管理工具登陆到测试中心进行测试用例的创建,文件上传,节点监控和测试运行等相关操作。 打开管理工具后输入管理端的服务地址,然后连接进入管理端;进入后就可以创建测试目录和上传文件,在选择测试目录和运行节点后点击测试按钮就进行测试界面。 

在测试界面上点击同步即可以把测试用例同步到所选择的节点上,然后输入相应的配置信息点击运行进行测试用例即可;在测试运行过程中下面的图表会显示当前不同时间段内测试请求响应的并发结果 

测试完成后可以通过查看详细报表来查看测试的情况 

HTTP,SQL和TCP测试

Beetle.DT自身只是一个测试工具,所以在没有测试用例的情况工具是完全起不了任何作用。为让大家更好的了解工具的用途,所以编写了几个基础的测试用例,通过这些测试用例可以对http,sql和tcp进行简单的压力测试。

编写测试用例

实际业务都存在多样性,对于简单的测试用例是不可能满足不同业务的需要,所以在使用工具的时候就不得不进行测试用例编写。由于需要符合工具运行要求所以编写测试用例也需要遵循着工具制定的规则;在编写测试用例的时候必须引用Beetle.DTCore项目,然后承继TestCase重写OnExecute写入需要测试的代码取可;如果测试代码是异步的情况则需要重写Execute的主方法,手动调用Completed方法来告诉工具测试用例什么时候完成。以下是几个基础测试用例的实现代码

  • HTTP
public class HttpGet : TestCase<Config>
	{
		public override string Name
		{
			get
			{
				return "HTTP_GET";
			}
		}

		private long mIndex = 0;

		private List<string> mUrls = new List<string>();

		public override void Init()
		{
			base.Init();
			mUrls.AddRange(this.Config.Urls.Split(';'));
		}

		public string GetUrl()
		{
			mIndex++;
			return mUrls[(int)(mIndex % mUrls.Count)];
		}

		protected override void OnExecute()
		{
			System.Net.WebRequest wReq = System.Net.WebRequest.Create(GetUrl());
			System.Net.WebResponse wResp = wReq.GetResponse();
			System.IO.Stream respStream = wResp.GetResponseStream();
			using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8))
			{
				reader.ReadToEnd();
			}
		}
	}

	public class Config
	{

		public string Urls { get; set; }
	}
  • SQL
public class MySqlDriver : DriverTemplate<MySqlConnection, MySqlCommand, MySqlDataAdapter, MySqlParameter, MysqlBuilder>
	{
	}

	public abstract class sqlbase : TestCase<SQLConfig>
	{
		public override void Init()
		{
			Peanut.DBContext.SetConnectionString(DB.DB1, Config.Connection);
			base.Init();
		}
		protected override void OnExecute()
		{
			base.OnExecute();
			Peanut.SQL sql = Config.Sql;
			sql.Execute();
		}
	}
	public class MSSQL : sqlbase
	{
		public override void Init()
		{
			Peanut.DBContext.SetConnectionDriver<Peanut.MSSQL>(DB.DB1);

			base.Init();
		}

		public override string Name
		{
			get
			{
				return "mssql";
			}
		}

	}

	public class MYSQL : sqlbase
	{
		public override void Init()
		{
			Peanut.DBContext.SetConnectionDriver<MySqlDriver>(DB.DB1);
			base.Init();
		}

		public override string Name
		{
			get
			{
				return "mysql";
			}
		}

	}

	public class SQLConfig
	{
		public string Connection { get; set; }
		public string Sql { get; set; }
	}
  • TCP
public class SocketTcpUtf : Beetle.DTCore.TestCase<TcpConfig>
	{
		public byte[] mData;

		private BeetleX.Clients.IClient mClient;

		public override void Init()
		{
			base.Init();
			mData = GetData();
			mClient = BeetleX.ServerFactory.CreateTcpClient(Config.Host, Config.Port);
			mClient.ClientError = OnNetError;
			mClient.Receive = OnReceive;
		}

		private void OnReceive(IClient c, IBinaryReader reader)
		{
			foreach (IBuffer item in reader.GetBuffers())
			{
				item.Free();
			}
			Completed();
		}

		private void OnNetError(IClient c, Exception e, string message)
		{
			Completed(e);
		}
		protected virtual byte[] GetData()
		{
			return Encoding.UTF8.GetBytes(Config.Data);
		}
		public override string Name
		{
			get
			{
				return "TCP_UTF_DATA";
			}

		}
		public override void Execute()
		{
			mClient.Send(mData);
		}
	}
	public class SocketTcpHex : SocketTcpUtf
	{
		public override string Name
		{
			get
			{
				return "TCP_HEX_DATA";
			}
		}
		protected override byte[] GetData()
		{
			   return Enumerable.Range(0, Config.Data.Length)
					 .Where(x => x % 2 == 0)
					 .Select(x => Convert.ToByte(Config.Data.Substring(x, 2), 16))
					 .ToArray();
		}

	}

	public class TcpConfig
	{
		public string Host { get; set; }

		public int Port { get; set; }

		public string Data { get; set; }
	}

github https://github.com/IKende/Beetle.DT

云码 http://git.oschina.net/ikende/Beetle.DT

 

 

© 著作权归作者所有

共有 人打赏支持
泥水佬

泥水佬

粉丝 63
博文 74
码字总数 41338
作品 6
广州
架构师
泥水佬/Beetle.DT

Beetle.DT(分布式压力测试工具) 基于.NET实现的分布式压力测试工具,用户可以根据需求编写相关的测试用例;通过工具的管理界面即可以把测试用例推送到服务中心, 再根据实际压测的需求把测...

泥水佬
2017/09/08
0
0
sysbench压测MyCAT的shell脚本

sysbench压测MyCAT的shell脚本 Harries Blog™2017-12-260 阅读 httpCDNdbRESTcatLuaIOmysqljavadb2 中间件MyCAT自己之前也简单 测试 过, 总结 过。最近做 分布式 测试,我大体分了三个阶段...

Harries Blog™
2017/12/26
0
0
压测工具的实践

压测工具apache ab /webbentch 1.Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。ab命令 对发出负载的计算机要求很低,既不...

dfwasds
2016/05/29
0
0
压测2.0:云压测 + APM = 端到端压测解决方案

从压力测试说起 压力测试是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。与功能测试不同,压测是以软件响应速度为测试目标的,尤其是针对在较短...

OneAPM蓝海讯通
2016/04/14
72
0
Http服务压力测试工具Alex(自带Web UI)

Alex Alex是基于vegeta library和boom封装的压力测试web UI。Vegeta提供稳定的qps压力源,boom提供稳定的并发数压力源。github地址 https://github.com/ireaderlab/alex English Alex架构图 ...

shellquery
2016/05/19
1K
3
python grpc 应用

1、rpc介绍 2、grpc 3、基于grpc协议文件传输 4、基于grpc协议jmeter压测获取实时结果 5、基于grcp协议获取jmeter最终压测报告,并将报告保存至client端 6、压测中途停止jmeter grpc server ...

西索oO
2017/06/03
0
0
jmeter分布式部署

前言 最近小编在做压力测试,用到的工具是jmeter,之前小编在jmeter压测分析中提到了针对测试报告,可以对代码、打包方式和服务器架构做调整和优化,但是还有一点需要注意,就是jmeter本身只...

weienjun
2017/12/18
0
0
mysql工具链--devops

MySQL 监控: mytop、orzdba、Percona-toolkit、Maatkit、innotop、myawr、SQL级监控mysqlpcap、拓扑可视化工具 MySQL基准测试: mysqlsla、sql-bench、Super Smack、Percona's TPCC-MYSQL ......

落叶刀
2016/06/03
56
0
基于 .NET 的分布式压力测试工具--Beetle.DT

基于.NET实现的分布式压力测试工具,用户可以根据需求编写相关的测试用例;通过管理工具即可以把测试用例推送到服务中心, 再根据实际压测的需求把测试用例分配到不同节点上运行。工具会根据...

泥水佬
2017/09/06
1K
3
跨平台网络服务器框架--PSS

目前代码更新更新在github上,就不维护多个服务器SVN了。 请到github上自取 ,地址为 https://github.com/freeeyes/PSS PSS 是易于开发,基于插件的,跨平台网络服务器框架,支持开发者使用插...

自由的眼
2014/11/17
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
5分钟前
2
0
第15章FTP服务搭建与配置

15.1FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz rz把 window 上的文件传输到 linux 上 sz 把 linux 上的文件传输到 ...

Linux学习笔记
13分钟前
0
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
17分钟前
6
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
37分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部