WebAppDbTest 項目測試
- 測試工具 ltt
- 介紹
- 安裝
- 使用方式
- 1、Drill
- 2、Hammer
- 3、Nailgun
- 測試主機規格配置
- CRUD 性能測試對比
- 1、ltt 工具測試
- 1.1、AddSingle 單條數據添加
- 1.2、AddBulk 批量數據(1000)條添加
- 1.3、GetSingle 單條數據查詢
- 1.4、GetAll 多條(1000)數據查詢
- 2、方法執行時間分析
- 2.1、查看 WeatherForecast 天氣預報數據
- 2.1.1、LiteDB 數據集記錄信息
- 2.1.2、SQLite 數據表記錄信息
- 2.2、顯示 `LiteDB.Studio` 截圖
- 2.3、測試類庫版本
- 2.4、統計結果信息
- 測試項目
WebAppDbTest
地址,https://gitee.com/dolayout/sample/tree/master/code/Sample.WebAppDbTest
測試工具 ltt
介紹
LoadTestToolbox
是一個使用 C#
開發的輕量級壓測工具,基于 .NET6
版本, 和其他壓測工具相比,LoadTestToolbox
安裝和使用都非常簡單。
LoadTestToolbox
提供了一種可靠的方式來模擬高負載情況,來確定系統的瓶頸和性能極限,并且支持以圖片輸出壓測結果。
安裝
該工具是基于 .NET6
開發,所以前提條件是宿主機環境安裝了 .NET6 SDK
,然后執行 cli
命令全局安裝:
dotnet tool install --global LoadTestToolbox
# or
dotnet tool install -g LoadTestToolbox
LoadTestToolbox
工具安裝成功,輸出如下信息:
使用方式
LoadTestToolbox
目前包含了三個工具,分別是:drill、hammer、nailgun
。
drill
,周期性發起請求,測試應用的長期穩定性;hammer
,指定范圍內遞增的并發請求,測試接口的性能;nailgun
,發起瞬間的大量請求,來測試接口性能;
1、Drill
Drill
可以通過在更長的時間內,以間隔不斷的請求,來進行測試應用的長期穩定性。
- 命令用法式例:
ltt drill --url https://www.baidu.com/ --rps 100 --duration 10 --filename drill-jd-chart.png
- 命令說明:
在上面的命令中,LoadTestToolbox
將每秒發出 100
個請求(以一致的 20
毫秒間隔),持續 10
秒,請求到 www.jd.com
。
完成后,會輸出到 笛卡爾圖
的測試結果,并且顯示每個請求和對應的響應時間。
- 輸出結果(
drill-jd-chart.png
):
2、Hammer
Hammer
可以通過指定范圍的并發請求,測試接口的性能,并返回每個請求的平均響應時間。
- 命令用法式例:
ltt hammer --url http://www.jd.com --min 1 --max 100 --filename hammer-jd-chart.png
- 命令說明:
上面的命令會同時發出 1
個請求,然后是 2
個、3
個,依此類推,最多是 100
個并發請求到 www.jd.com
。
- 輸出結果(
hammer-jd-chart.png
):
3、Nailgun
Nailgun
可以對指定的接口發起瞬間的大量請求,來測試接口性能。
- 命令用法式例:
ltt nailgun --url http://www.jd.com/ --requests 100 --filename nailgun-jd-chart.png
- 命令說明:
一次性發起 ·100· 個請求到 www.jd.com
。
- 輸出結果(
nailgun-jd-chart.png
):
上面就是 LoadTestToolbox
的三個(drill、hammer 、nailgun
)主要工具,該工具還支持各種配置,HTTP
請求方法,請求頭,請求體等。
LoadTestToolbox
項目地址:
- https://github.com/ecoAPM/LoadTestToolbox
測試主機規格配置
此處使用的騰訊電腦管家檢測電腦配置,顯示信息如下:
CRUD 性能測試對比
這里就列舉新增數據和查詢數據兩種類型的操作,其他類型操作類似,感興趣的小伙伴可自行測試。
1、ltt 工具測試
此處使用 LoadTestToolbox
的 nailgun
方式,測試 api
接口性能:
1.1、AddSingle 單條數據添加
輸入命令:
ltt nailgun --url http://localhost:8080/api/Sqlite/AddSingle --requests 100 --filename sqlite-addsingle-chart.pngltt nailgun --url http://localhost:8080/api/LiteDb/AddSingle --requests 100 --filename litedb-addsingle-chart.png
單條數據添加,輸出信息:
-
sqlite-AddSingle
-
litedb-AddSingle
1.2、AddBulk 批量數據(1000)條添加
輸入命令:
ltt nailgun --url http://localhost:8080/api/Sqlite/AddBulk --requests 100 --filename sqlite-addbulk-chart.pngltt nailgun --url http://localhost:8080/api/LiteDb/AddBulk --requests 100 --filename litedb-addbulk-chart.png
批量數據添加,輸出信息:
sqlite-AddBulk
litedb-AddBulk
1.3、GetSingle 單條數據查詢
輸入命令:
ltt nailgun --url http://localhost:8080/api/Sqlite/GetSingle --requests 100 --filename sqlite-getsingle-chart.pngltt nailgun --url http://localhost:8080/api/LiteDb/GetSingle --requests 100 --filename litedb-getsingle-chart.png
單條數據查詢,輸出信息:
sqlite-GetSingle
litedb-GetSingle
1.4、GetAll 多條(1000)數據查詢
輸入命令:
ltt nailgun --url http://localhost:8080/api/Sqlite/GetAll --requests 100 --filename sqlite-getall-chart.pngltt nailgun --url http://localhost:8080/api/LiteDb/GetAll --requests 100 --filename litedb-getall-chart.png
多條數據查詢,輸出信息:
sqlite-GetAll
litedb-GetAll
2、方法執行時間分析
2.1、查看 WeatherForecast 天氣預報數據
2.1.1、LiteDB 數據集記錄信息
- 執行
sql
語言分組查詢:
SELECT *.Summary,COUNT(*) AS total,[MAX(*.TemperatureC),MIN(*.TemperatureC)] TemperatureC,[MAX(*.TemperatureF),MIN(*.TemperatureF)] TemperatureF
FROM WeatherForecast
WHERE Date > '2024-12-31 23:59:59'
GROUP By Summary;
- 輸出結果:
2.1.2、SQLite 數據表記錄信息
- 執行
sql
語言分組查詢:
select Summary,count(Id) as total,'[' || MAX(TemperatureC) || ',' || MIN(TemperatureC) || ']' TemperatureC,'[' || MAX(TemperatureF) || ',' || MIN(TemperatureF) || ']' TemperatureF
from WeatherForecast
where Date > '2024-12-31 23:59:59'
GROUP BY Summary;
- 輸出結果:
2.2、顯示 LiteDB.Studio
截圖
- a1、執行
sql
語句:
SELECT $ FROM ActionExecInfo
order by ActionName;
- a2、輸出結果:
- b1、執行
sql
語句:
SELECT *.Database,*.ActionName,COUNT(*) AS total,[MAX(*.ExecTime),MIN(*.ExecTime)] ExecTime
FROM ActionExecInfo
GROUP By ActionName;
- b2、輸出結果:
2.3、測試類庫版本
– | SQLite | LiteDB |
---|---|---|
Version | 3.41.2 | 5.0.17 |
Nuget Package | FreeSql.Provider.Sqlite v3.2.805 | LiteDB.Async v0.1.7 |
2.4、統計結果信息
兩種數據庫對應的 CRUD
方法執行信息都記錄在 LiteDB
數據庫中,數據集是 ActionExecInfo
,數據結果統計信息如下:
db | AddSingle/1 | AddBulk/1000 | GetSingle/1 | GetAll/1000 | UpdateSingle/1 | UpdateBulk/30 | DeleteSingle/1 | DeleteBulk/30 |
---|---|---|---|---|---|---|---|---|
sqlite | 8641658 | 15284705 | 17047918 | 17099044 | 19176842 | 33778531 | 36320740 | 44810895 |
litedb | 5076062 | 16464773 | 16745788 | 17053847 | 24372806 | 25277966 | 34729345 | 35131508 |
- 折線統計圖顯示信息:
- 柱狀統計圖顯示信息:
說明:以上數值越小越好,執行時間單位:毫秒/ms。
操作類型后面跟的是數據行數,例如:AddSingle/1,執行單次數據添加操作,數據量1條。