WebAppDbTest 项目测试
- [测试工具 ltt](#测试工具 ltt)
- 测试主机规格配置
- [CRUD 性能测试对比](#CRUD 性能测试对比)
-
- [1、ltt 工具测试](#1、ltt 工具测试)
-
- [1.1、AddSingle 单条数据添加](#1.1、AddSingle 单条数据添加)
- [1.2、AddBulk 批量数据(1000)条添加](#1.2、AddBulk 批量数据(1000)条添加)
- [1.3、GetSingle 单条数据查询](#1.3、GetSingle 单条数据查询)
- [1.4、GetAll 多条(1000)数据查询](#1.4、GetAll 多条(1000)数据查询)
- 2、方法执行时间分析
-
- [2.1、查看 WeatherForecast 天气预报数据](#2.1、查看 WeatherForecast 天气预报数据)
-
- [2.1.1、LiteDB 数据集记录信息](#2.1.1、LiteDB 数据集记录信息)
- [2.1.2、SQLite 数据表记录信息](#2.1.2、SQLite 数据表记录信息)
- [2.2、显示 `LiteDB.Studio` 截图](#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
命令全局安装:
csharp
dotnet tool install --global LoadTestToolbox
# or
dotnet tool install -g LoadTestToolbox
LoadTestToolbox
工具安装成功,输出如下信息:
使用方式
LoadTestToolbox
目前包含了三个工具,分别是:drill、hammer、nailgun
。
drill
,周期性发起请求,测试应用的长期稳定性;hammer
,指定范围内递增的并发请求,测试接口的性能;nailgun
,发起瞬间的大量请求,来测试接口性能;
1、Drill
Drill
可以通过在更长的时间内,以间隔不断的请求,来进行测试应用的长期稳定性。
- 命令用法式例:
bash
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
可以通过指定范围的并发请求,测试接口的性能,并返回每个请求的平均响应时间。
- 命令用法式例:
bash
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
可以对指定的接口发起瞬间的大量请求,来测试接口性能。
- 命令用法式例:
bash
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
项目地址:
测试主机规格配置
此处使用的腾讯电脑管家检测电脑配置,显示信息如下:
CRUD 性能测试对比
这里就列举新增数据和查询数据两种类型的操作,其他类型操作类似,感兴趣的小伙伴可自行测试。
1、ltt 工具测试
此处使用 LoadTestToolbox
的 nailgun
方式,测试 api
接口性能:
1.1、AddSingle 单条数据添加
输入命令:
bash
ltt nailgun --url http://localhost:8080/api/Sqlite/AddSingle --requests 100 --filename sqlite-addsingle-chart.png
ltt nailgun --url http://localhost:8080/api/LiteDb/AddSingle --requests 100 --filename litedb-addsingle-chart.png
单条数据添加,输出信息:
-
sqlite-AddSingle
-
litedb-AddSingle
1.2、AddBulk 批量数据(1000)条添加
输入命令:
bash
ltt nailgun --url http://localhost:8080/api/Sqlite/AddBulk --requests 100 --filename sqlite-addbulk-chart.png
ltt nailgun --url http://localhost:8080/api/LiteDb/AddBulk --requests 100 --filename litedb-addbulk-chart.png
批量数据添加,输出信息:
sqlite-AddBulk
litedb-AddBulk
1.3、GetSingle 单条数据查询
输入命令:
bash
ltt nailgun --url http://localhost:8080/api/Sqlite/GetSingle --requests 100 --filename sqlite-getsingle-chart.png
ltt nailgun --url http://localhost:8080/api/LiteDb/GetSingle --requests 100 --filename litedb-getsingle-chart.png
单条数据查询,输出信息:
sqlite-GetSingle
litedb-GetSingle
1.4、GetAll 多条(1000)数据查询
输入命令:
bash
ltt nailgun --url http://localhost:8080/api/Sqlite/GetAll --requests 100 --filename sqlite-getall-chart.png
ltt 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
语言分组查询:
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
语言分组查询:
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
语句:
sql
SELECT $ FROM ActionExecInfo
order by ActionName;
- a2、输出结果:
- b1、执行
sql
语句:
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条。