使用rust开发的高性能python压测工具
Project description
atomic-bomb-engine-py
atomic-bomb-engine的python包装实现
前端仓库
atomic-bomb-engine-front
使用条件:
- python版本 >= 3.8
- windows(x86), linux(x86), mac
使用方法:
-
准备开始
通过pip安装 (0.5.0版本之前)
pip install atomic-bomb-engine-py
在python中引用时注意,需要引用atomic_bomb_engine, 而不是atomic_bomb_engine_py
为了避免混淆,0.5.0版本之后,pip更换了包名,更改为atomic-bomb-engine,
pip install atomic-bomb-engine
在python中导入
import atomic_bomb_engine
异步使用的时候,还需要引用asyncio
import asyncio
-
开始压测
-
单接口压测(功能与多接口压测重叠,已废除) -
多接口压测
-
多接口压测可以使用batch_async方法进行操作,函数签名和解释如下
async def batch_async(
test_duration_secs: int,
concurrent_requests: int,
api_endpoints:List[Dict],
step_option:Dict[str, int]=None,
verbose:bool=False,
should_prevent:bool=False) ->Dict:
"""
批量压测
:param test_duration_secs: 测试持续时间
:param concurrent_requests: 并发数
:param api_endpoints: 接口信息
:param step_option: 阶梯加压选项
:param verbose: 打印详细信息
:param should_prevent: 是否禁用睡眠
"""
使用assert_option方法可以返回断言选项字典
assert_options=[
atomic_bomb_engine.assert_option("$.code", 429),
atomic_bomb_engine.assert_option("$.code", 200)
])
jsonpath如果不会用的话,建议去jsonpath学习
使用step_option方法可以返回阶梯加压选项字典
def step_option(increase_step: int, increase_interval: int) -> Dict[str, int]:
"""
生成step option
:param increase_step: 阶梯步长
:param increase_interval: 阶梯间隔
"""
同样的本包中也包含了一个对api_endpoint的包装:endpoint方法,方便调用,endpoint中的assert_options中也可以套用assert_option方法
async def run_batch():
result = await atomic_bomb_engine.batch_async(
test_duration_secs=10,
concurrent_requests=10,
api_endpoints=[
atomic_bomb_engine.endpoint(
name="test1",
url="https:xxxxx1.xx",
method="get",
weight=1,
timeout_secs=10,
assert_options=[atomic_bomb_engine.assert_option(jsonpath="$.code", reference_object=200)]
),
atomic_bomb_engine.endpoint(
name="test2",
url="https://xxxxx2.xx",
method="get",
weight=1,
timeout_secs=10)
])
print(result)
监听时可以使用BatchListenIter生成器
async def listen_batch():
iterator = atomic_bomb_engine.BatchListenIter()
for message in iterator:
if message:
print(message)
else:
await asyncio.sleep(0.3)
压测+同时监听
async def main():
await asyncio.gather(
run_batch(),
listen_batch(),
)
if __name__ == "__main__":
asyncio.run(main())
压测时使用ui界面监控
0.5.0版本后,添加了ui页面,支持批量压测方法
导入
from atomic_bomb_engine import server
使用
import asyncio
import atomic_bomb_engine
from atomic_bomb_engine import server
@server.ui(port=8000)
async def run_batch():
result = await atomic_bomb_engine.batch_async(
test_duration_secs=120,
concurrent_requests=100,
verbose=False,
api_endpoints=[
atomic_bomb_engine.endpoint(name="test-baidu",url="https://baidu.com",method="GET",weight=1,timeout_secs=10),
atomic_bomb_engine.endpoint(name="test-google", url="https://google.com", method="GET", weight=1, timeout_secs=10),
])
print(result)
return result
if __name__ == '__main__':
asyncio.run(run_batch())
使用server.ui装饰器,可以给批量压测方法启动一个简单的web服务器,不需要再手动监听BatchListenIter生成器
内部架构图
[0.19.0] - 2024-04-16
Added
- 增加了初始化和参数模版功能
setup_options=[
atomic_bomb_engine.setup_option(
name="初始化-1",
url="https://xxx.xxx/api/short/v1/list",
method="get",
timeout_secs=10,
jsonpath_extract=[
atomic_bomb_engine.jsonpath_extract_option(key="test-msg", jsonpath="$.msg"),
atomic_bomb_engine.jsonpath_extract_option(key="test-code", jsonpath="$.code"),
]
)],
上述实例展示了如何在初始化的时候调用某个接口,并且通过jsonpath将数据提取出来,保存在全局变量test-msg和test-code中 提取完全局变量后,就可以在后续的api_endpoints中使用
api_endpoints=[
atomic_bomb_engine.endpoint(
name="test-1",
url="http://127.0.0.1:8000/a",
method="POST",
weight=1,
timeout_secs=10,
json={"name": "{{test-msg}}", "number": "{{test-code}}"},
),
]
上述实例展示了如何在请求中使用全局变量,使用双大括号即可使用
Fixed
- 修复了如果http状态码错误时,不会记录
- 修复了json反序列化的问题
[0.20.0] - 2024-04-17
Added
断言更改为异步生产消费,提升性能
bug和需求
- 如果发现了bug,把复现步骤一起写到Issus中哈
- 如果有需求也可以在Issues中讨论
- 本程序是本人业余时间开发,不太准备保证时效性,但是如果有时间,一定第一时间回复和修改bug
[0.22.0] - 2024-04-18
Added
前端进行了性能优化
[0.24.0] - 2024-04-18
Added
异步断言使用了补偿消息,保证消息的一致性
bug和需求
- 如果发现了bug,把复现步骤一起写到Issus中哈
- 如果有需求也可以在Issues中讨论
- 本程序是本人业余时间开发,不太准备保证时效性,但是如果有时间,一定第一时间回复和修改bug
TODO
- 前端展示页面 ✅
- 接口关联 ✅
- 每个接口可以配置思考时间
- 增加form支持 ✅
- 增加附件支持
- 断言支持不等于等更多表达方式
联系方式
- 邮箱:qyzhg@qyzhg.com
- 微信:qy-zhg
👏🏻👏🏻👏🏻欢迎加群交流
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for atomic_bomb_engine-0.24.0-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fe72e75d054ce0b21cd89fc172ca731c5ba7114a960c987b61b560727fca4c2 |
|
MD5 | 8049bafe3de3f9e4adacf62943604a7c |
|
BLAKE2b-256 | c21f4eabdfd09063f7491f6279eab1dc8a95fbde6a5c876252f20ebee84818dd |
Hashes for atomic_bomb_engine-0.24.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac468cd6334146a3e8033dfe7e9680e87246a41d5bd086c3fb3ed9abfa15bedf |
|
MD5 | 9e3ba6757bbf19f5ddaf9b43a62f7244 |
|
BLAKE2b-256 | 86c90337e95e6ef32d79af73b2fc72e55e65ed4537b8fb117d9b592be23c676b |
Hashes for atomic_bomb_engine-0.24.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e599397a1c55ad966d50fc119c129ef1019f6e45cd89477620789f0eb5342aa |
|
MD5 | 0185a493cb4f96f66ce788ed3d4ca79b |
|
BLAKE2b-256 | 695d06bb4701ee28c2a1f538ff275afa4da486b5d9e397491434983705c82333 |
Hashes for atomic_bomb_engine-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db5a073fcb8bcf956cb33595ba48adf24c6b3cf9f80486f4bf4c0fd93344ebd7 |
|
MD5 | b42c52452ceaf10ebd80b525a1fb9739 |
|
BLAKE2b-256 | ce0db97dcafb5be3f9d39bd20be820074c0656441fb38e71020e6161f0c1df69 |
Hashes for atomic_bomb_engine-0.24.0-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fd8bfe6d09bf47b24ca5271d82e3d0f91ae8f3b080823fe7fe13135baa40619 |
|
MD5 | 48d812a5ed66159fa1d8ff5909d0407c |
|
BLAKE2b-256 | 84eb830a5e3508c8b6976542244aeb3803409fd1d040c661f485be797589dadb |
Hashes for atomic_bomb_engine-0.24.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 884e5fc20435f15aa818ff9c28596d560b63d0bca6a1ff57dcf939db259c5bcf |
|
MD5 | 0f28bfc869f15c399df661881e712f33 |
|
BLAKE2b-256 | 96c788bd54142849bcdb6663b44f3873074678b3a41ce177c2c44fd9b856604a |
Hashes for atomic_bomb_engine-0.24.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad36f10b2300f0d5553d10b5bf665de1d1054710dca5cda88b19a9bf03bb51b9 |
|
MD5 | 218064a7662976e0a644594b9482fffa |
|
BLAKE2b-256 | 2679e5c70f775c16db793f9b54da6ca4ba6f7577e0a3538c031735eb94f39457 |
Hashes for atomic_bomb_engine-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c736e640340c0a3948077d6b19bb18557f58f800e5304f39959e46391c0be4d |
|
MD5 | 7b27f72aae4ddd9ad7b190385550fe24 |
|
BLAKE2b-256 | 38c00e2d0ade90d19b9c9c4e297785a028c51602148d10ddb4b5d2d167d09e5a |
Hashes for atomic_bomb_engine-0.24.0-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21ee1f9ddb224e40ee84d7b03276d3db7eadc02301cd7b291ec7fcf1f49b5957 |
|
MD5 | 4f5c0702d4e3d7cafb91c028e95bd2b4 |
|
BLAKE2b-256 | e935eef9e8ace69d319a86ec67bc2a2fcdb5e2a907ea5a127ff7d0a3b2618034 |
Hashes for atomic_bomb_engine-0.24.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d262218b4f30ff3f16e51d43ad3ee21dad2adc1761122eeae1f08de72010a37 |
|
MD5 | f60420ff26c913367894edfa3a5716f0 |
|
BLAKE2b-256 | 97922164844ffd599b907542e4745f9cfbe67214d784b08ae5be4b1da9d60af3 |
Hashes for atomic_bomb_engine-0.24.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f4548d25ceae8a9440b40f7254c84fa6298aa38fa846a6d353bf6f87e985277 |
|
MD5 | b3cb96ac4e6b9383d4686881b5e04d9b |
|
BLAKE2b-256 | df5e5afa774ae94f65e6edde00bb29a333b68f8b16e281748d05ab610c206913 |
Hashes for atomic_bomb_engine-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f379bac1efb890b1b4084ec2111db219ef05752e018b297674ea360218182c1 |
|
MD5 | 5290ec762a571e41f5cb098475aac7f8 |
|
BLAKE2b-256 | 08883bf3fe6341f826c6c11888fc467bcad2d9492854797b67977ec41b99c8c8 |
Hashes for atomic_bomb_engine-0.24.0-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d5290452f84465e5238930e93e0a39ff9170449b7bc16bf2a50896a3afa9bf7 |
|
MD5 | 62aab68901cd8edca7b8984b9694e7e5 |
|
BLAKE2b-256 | 74f0fdb866c536f4554a69610d14fb5f7beeb465785881dc3d1a029fd326b2a3 |
Hashes for atomic_bomb_engine-0.24.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d453678bb4c04426070e5d564b4259d11d5105bd8e8b6355040781974dc3006e |
|
MD5 | e6ff9efdc388d6d62e6aae174a457151 |
|
BLAKE2b-256 | 5ec72fb027ef6e2f1bfeb5b7874b8dc57e92acbfa0caa50362ba258a94fa1210 |
Hashes for atomic_bomb_engine-0.24.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5585d12f6974315e0dbbc63a81eef7f7a4aca3076de9f6e2d241b2ad5c4b5839 |
|
MD5 | c11db06cf49fd8436086ac6568063e03 |
|
BLAKE2b-256 | 7623cd8e8f08b45819ed128472c048948ce99e3613f57e6ab9fb5ee1b6bc8dd4 |
Hashes for atomic_bomb_engine-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2acc4cab5fa1d05ed86d62584897ebb4000d96f9b46bf07e23a1261ba42de7fd |
|
MD5 | 91399757991e8cbbc1aabe38f2713be9 |
|
BLAKE2b-256 | 5543ac535a4707c5ca8f02b73fec2f57379a1e275a5480b4277164332ec03519 |
Hashes for atomic_bomb_engine-0.24.0-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77b47d8f969f62464c1a8b060d5e1a9ff64432d05096673ca5e3a05cde4f410e |
|
MD5 | b3a41317dc387d906c6272cd063eca92 |
|
BLAKE2b-256 | 1ab0fd50620e6f9d27e4b660d5120e3feb7a7794c0774727d7ec0dc692628164 |
Hashes for atomic_bomb_engine-0.24.0-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 410d4d7d18f385929f48a296a62573e4721c44c6b484837e277282b4c6e50407 |
|
MD5 | ef6feef9afca90540da2bb6d15cae82f |
|
BLAKE2b-256 | d38020a3677da134253426344bfdb15ab913c463d7bfaaaacff8e91f20460dae |
Hashes for atomic_bomb_engine-0.24.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbb20f6ae25cd246a19df0052c2b87b60298b42cc1dbc2079cf538dd95e7257b |
|
MD5 | ffff4918c342e4f754886a59aa949747 |
|
BLAKE2b-256 | 8d5f8275e2e79eff8902225ec01b3281b089fbe3670a8280fe389361a21fe102 |
Hashes for atomic_bomb_engine-0.24.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e41116de70c6461b02ffe908f9bad40eb4de18910a72eab6170a3bd91c144739 |
|
MD5 | 2b00c8c7d02a60e600437a068f7a0890 |
|
BLAKE2b-256 | 208c3872a83a965f9dedf40314f9b83d028e7a3f86a814c093d0a28369b810c6 |