使用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-22
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.1-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a79b47f72837feb5d160a64668cd7972ea0800ea190ed17dc02036bf48071d9 |
|
MD5 | de53a424968615a65dca185fa793c6d8 |
|
BLAKE2b-256 | 4efba10ce6b60c85fbb3517961e87821f140c24fd104be62301d3e2ccaa893b9 |
Hashes for atomic_bomb_engine-0.24.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db0fb9c7262d0468d37828d311b7c0a0c3a9128d3b27259e758d8c609c926e8b |
|
MD5 | 2d9bd277b166e54e8a827b492d98cdfd |
|
BLAKE2b-256 | 6dc4c115a240315943409b3901aad204eb55e7ba4c28845432789045eed8780d |
Hashes for atomic_bomb_engine-0.24.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b8b088cd0ef6dfc062028920833ec21db51ca5a7a242a1f97fac0ebd3d399a5d |
|
MD5 | 525d15313c144649407892dc92213265 |
|
BLAKE2b-256 | 4272d6968dc5d0a4b1af28dc02e1fd6458b385eab9e944ae1bc5e5dc2bdb0cbd |
Hashes for atomic_bomb_engine-0.24.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49488a853049ec376ceb3c12d6402285eaf3acd7717a4ee02b34f158942d5771 |
|
MD5 | 66d13e81c0721e6558b560a9d7ead4e6 |
|
BLAKE2b-256 | e155e86f9eeb2d8ccc0baebd8184c0c1417324a478eef6738f73b281a1c80637 |
Hashes for atomic_bomb_engine-0.24.1-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f2524df94fcac9870f856a52f2028d8892a04d74a2f00b88f1b1036dbb9b50a3 |
|
MD5 | 6ac0711455a952d46a86147547926423 |
|
BLAKE2b-256 | a403f642d7a2b20f049a13f07aa326b0b45fbb2fb3ff100fac5b247cb8e66d11 |
Hashes for atomic_bomb_engine-0.24.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 00be4d09c27de088d868e2f2b3538e829333f8965ccc1456d188bfd050ba6d3c |
|
MD5 | 7d2006bce6ad519359cbbb4d18ebdd65 |
|
BLAKE2b-256 | 9e70c8577b58a5e19307096c9993b31cfe9f17ed503ae52405d80b90c83b55a3 |
Hashes for atomic_bomb_engine-0.24.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d4e608fbf69a3f198115759dceb7881079e174137b56f72c2eea7a69ac82d05 |
|
MD5 | 20506bf33af11a32d0030586e03b109f |
|
BLAKE2b-256 | 1aba3707238f53392622f5aabf975f7d7003c5357427e90700285598be89adf5 |
Hashes for atomic_bomb_engine-0.24.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | be1a3ae81d46fd9aeb7469eeb3c8f140c48d6ec998f673c1a1443406392c7395 |
|
MD5 | 11185a7edb2ccfd2f0ad9a8457a014e3 |
|
BLAKE2b-256 | a9706c450049800bfbe7d6153938f8ebf261db8ea50951e586c5da0141b8a367 |
Hashes for atomic_bomb_engine-0.24.1-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 922f9280f6cd78cdb153c901e6372225cdcc1d236da03d20339ce30e00970ced |
|
MD5 | 899ae1958fbcb191bb64b08cd0cb4175 |
|
BLAKE2b-256 | 8e15d8b94d3d69757c122f01599b365810ae4819c46329b6e4092159fa52c122 |
Hashes for atomic_bomb_engine-0.24.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 38d855af31802ecfecf04ad63e09cd6c168888543b253163cadfe4e0120b5817 |
|
MD5 | 0ba571a03ac0d7dbce40f96e08cd0fd7 |
|
BLAKE2b-256 | ba348546b66ee9dbf8c50f892381ad1652f60c78884b281280d690fcbda3e92a |
Hashes for atomic_bomb_engine-0.24.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab78c0e60e386d2c9600216266718851c5153ec15158019815339d7abf92b18b |
|
MD5 | b185aeb7be25e7856e52f03366cd7180 |
|
BLAKE2b-256 | 2a6b24a30bc07e0b59e472f1da4b0b6b61665b6bd67e0afecef9e77c6f6680f6 |
Hashes for atomic_bomb_engine-0.24.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 586a0b2e2a57b633d121604b54b945d4c0aa287db5cbf209666da1f58bcf5c6e |
|
MD5 | 1566a702a3cfd73f8eacc16df5ce18b6 |
|
BLAKE2b-256 | ca2f6d5966f43136eeba00b3bded548e5875ba186a4cc0fd90ae1597d09dd2f3 |
Hashes for atomic_bomb_engine-0.24.1-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bdc1e1f1fa66819e87feabd5c3f39a7d0490c23e251fd54850d9eb7b4071eb49 |
|
MD5 | a99d34b0c555ecb965f194cdd46c5c3a |
|
BLAKE2b-256 | f819634f123f12e6124374dd7e7d7551e5bbe000946215c5bceb90727241c93a |
Hashes for atomic_bomb_engine-0.24.1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 440eb946aefda61ffeba107005e98d79e505b8fae7cae20970018a0cd998b0fa |
|
MD5 | 37148723c2f39fb5e467012f3355765b |
|
BLAKE2b-256 | c4102acda9a3c9fb0348d1ff3bf66e50b54d065604ab4c8b0228d59bf650c38d |
Hashes for atomic_bomb_engine-0.24.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c4d3043e942bcb66acf192d70afe700bbbe6780b46aba782a9cad046158cecf |
|
MD5 | 44ee2f6b77ae9016dae7bb39171b1903 |
|
BLAKE2b-256 | aa90c70cc67099f5832731266864404b2f8675860631f2e85224d1151d57e4e9 |
Hashes for atomic_bomb_engine-0.24.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95e04b71448d0269610470b3ed60a36a789d7407e71786b6d3d76daf98e062dd |
|
MD5 | 8b8da63b26b2e72ddf6018a7a4dab182 |
|
BLAKE2b-256 | aada40e4004dd53210c2dd1157c6b2ad21afb7bd02b1f7a83f55b8e507950fc7 |
Hashes for atomic_bomb_engine-0.24.1-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e99dc885a541180d789baa89c4ed9c396ba1fc9a19b66084f476acd9982116f2 |
|
MD5 | e0705237bc05dacfd5538276ed2b7cb1 |
|
BLAKE2b-256 | 543bf722e24db5a2ae0e3b4bc686eb4717923a189b84cdeaf8beb046d676b309 |
Hashes for atomic_bomb_engine-0.24.1-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a8a03d386e3abd51744d129fc5a254120999eac20233007789d7db944c0bc85 |
|
MD5 | d339b04228490960abf110b3e8476ac5 |
|
BLAKE2b-256 | 32af8544028a39552024e436105567f8df0829d721931f8755ce6a4065e8dca8 |
Hashes for atomic_bomb_engine-0.24.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e7f8c0ee4a1d4d2dd83ee89184ac01c9c78c8816bc23a8136787348e9634e50 |
|
MD5 | a09461a7ca651c78d8435a07ef36e965 |
|
BLAKE2b-256 | 73cb839efaec4efaa4fa4b032a833ded2a5d54fc086b1a5449e506180805123e |
Hashes for atomic_bomb_engine-0.24.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7b28b43ece6c259fe60b6c0c454c2580cc77422a4bc5d54463b6d65930787cd |
|
MD5 | 37e661d6f172457da8c9ca8d12507caf |
|
BLAKE2b-256 | 48795c2b94b195e56f1cb7d87ed74fa0a38e0f07909ff702865e4cb9d9fe0301 |