由于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/


分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测的更多相关文章

  1. .net分布式压力测试工具(Beetle.DT)

    肯定有人会问为什么会写这样一个开源工具?和现有的有什么差别?不过对于一个程序员来说写东西还真不需要理由的:),主要原因是工作有点闲(开玩笑),不过说实话一个程员怎可能会停止写代码呢(作为一个奔4的程序 ...

  2. Centos下分布式跟踪工具Pinpoint的完整部署记录

    一.Pinpoint简单介绍Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统.分布式跟踪系统.一般来说,前端向后台发起一个查询请求,后台服务可能 ...

  3. 分布式压测系列之Jmeter4.0第一季

    1)Jmeter4.0介绍 jmeter是个纯java编写的开源压测工具,apache旗下的开源软件,一开始是设计为web测试的软件,由于发展迅猛,现在可以压测许多协议比如:http.https.so ...

  4. web压测工具http_load原理分析

    一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...

  5. 面向Web应用的并发压力测试工具——Locust实用攻略

    1. 概述 该方案写作目的在于描述一个基于Locust实现的压力测试,文中详细地描述了如何利用locustfile.py文件定义期望达成的测试用例,并利用Locust对目标站点进行并发压力测试. 特别 ...

  6. 为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname

    之前总结了 jmeter 分布式测试的过程,在部署过程中提到,要在 system.properties 中配置自己的 IP. 至于为什么要这么做,源于这一次 debug 的过程. 运行环境 mint, ...

  7. 渗透测试工具SQLmap

    一.简介 SQLmap 是一款用 Python 编写的开源渗透测试工具,用来自动检测和利用 SQL 注入漏洞. 二.Windows 下安装 2.1 安装 Python 环境 注:Python 3.0会 ...

  8. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】

    概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...

  9. jmeter压测、操作数据库、分布式、 linux下运行的简单介绍

    一.jmeter压测 1.如何压测 常规性能压测:10-15分钟 稳定性测试:一周.2天等 如果想要压测10分钟,勾选永远,勾选调度器,填写600秒.也可以使用固定启动时间. 2.tps.响应时间 ( ...

随机推荐

  1. 【 js 基础 】【 源码学习 】backbone 源码阅读(一)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  2. [补档]暑假集训D3总结

    考试 集训第一次考试,然而- -   总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monot ...

  3. Hbase集群监控

    Hbase集群监控 Hbase Jmx监控 监控每个regionServer的总请求数,readRequestsCount,writeRequestCount,region分裂,region合并,St ...

  4. hexdump命令的使用

    hexdump命令是Linux下的打印16进制的利器,它可以按我们指定的格式输出16进制,特别有用,配合eeprom来用简直是绝配. 今天我们来介绍一个hexdump命令的使用: 首先我们准备一个测试 ...

  5. nstallation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED报这个错的原因???

    [2015-06-05 20:37:51 - 05ListView列表控件] ------------------------------ [2015-06-05 20:37:51 - 05ListV ...

  6. Java框架概述

    一.框架的意义 1.什么是框架? 框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现.有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑. ...

  7. .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  8. C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)

    C/C++ 知识点---sizeof使用规则及陷阱分析 原文出处:[胖奇的专栏] 1.什么是sizeof 首先看一下sizeof在msdn上的定义:     The sizeof keyword gi ...

  9. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

    简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...

  10. 调用Class.forName()要抛出异常

    今天学JDBC时,用到下面的程序: package bo; import java.sql.Connection; import java.util.ArrayList; import java.ut ...