分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测
由于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)
| 1 2 3 4 5 6 7 8 9 | < 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://www.cnblogs.com/smark/p/7505551.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#最佳工具集合:IDE、分析、自动化工
- 下一篇: .net core 使用Redis的发布