使用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
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.21.0-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc8d14cef7c06f017cd6acf697acf2a25cf8f2a7d1c13492b26fbedf994a26d1 |
|
MD5 | 23080fd7d7655a3aa3aba7bc1b1b9fc3 |
|
BLAKE2b-256 | 6a871829f41de17ac03be2aa41155bab2a4fb9c05eb92c7b7875e8a0da2120e2 |
Hashes for atomic_bomb_engine-0.21.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0df73dd07a7fbe1c65ef964edee839c8e84dfde9f0e177fb5667752f2b38b7f |
|
MD5 | 48b70dca1cab1afe49735f4c46323db2 |
|
BLAKE2b-256 | 39f68a6827b03c6df8855585c52bc74004b67841edd2eeb2e3fc2c6fd2d2eb01 |
Hashes for atomic_bomb_engine-0.21.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90a9ba2c6f7591590d371052ec6dc1b0b5e895112631c34ed53c31ee50d398f4 |
|
MD5 | 39584e37efee2be1e21805e156022edf |
|
BLAKE2b-256 | a4b1d1084182ad4b9f14c8f605471fee738697f1b2d1e4912a81f4fadb6a8d57 |
Hashes for atomic_bomb_engine-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42209077873a0e9ffe7bfbed55b90262e67ec2f516ec995d219b1f2e6a184d71 |
|
MD5 | 3e88a23e08bc3be994b83d6c8bc509c1 |
|
BLAKE2b-256 | eb383a49bc668d2c2f60d9f905b8f1c1ff1645bab7df92c044ff4c3a1b025056 |
Hashes for atomic_bomb_engine-0.21.0-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32f6e0743c1e2e2c1fd794c9499469197b2b6a34e0a551832748498ccdf5ab54 |
|
MD5 | f1826ec448008ddea941ae7a869496b1 |
|
BLAKE2b-256 | d1e5faae6dd4e8a085a1fda07d09da34c39526d10c07476ad07fd8687bb872ab |
Hashes for atomic_bomb_engine-0.21.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb33720ec1247ec0529e0040a4a50833f2dc62095960070cdc74a5fdb384e8ac |
|
MD5 | f96fe05790239122af9f04763eacd6a1 |
|
BLAKE2b-256 | a33fb3a82e035db6e9a81dfaca43d0ec31e395ab994d84591dd9c6fb608fd460 |
Hashes for atomic_bomb_engine-0.21.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24ffaa0a7c86bfd6fbb2cb56bc5c09755eb1a280d8d580eaa43532edacaa133d |
|
MD5 | 46405805a12beed3b32abb59c6a229f5 |
|
BLAKE2b-256 | 5bdd648c69f33587291f17ddd40e8d2470d997febe3c9db5cc1086da86430422 |
Hashes for atomic_bomb_engine-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27ebdfa62a3be588cbc86b656487b5b0b41cde721cb290963e5fabd35f897da8 |
|
MD5 | a5742d1b13ca122f5b62f2f3fd632847 |
|
BLAKE2b-256 | 395166952766e77b0445ece424bec23f62d7868e740393994be8dcd5851331d8 |
Hashes for atomic_bomb_engine-0.21.0-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72a736be3fb20c5b390fa1e4859a736b45a73d0b4abf3ce4b8573b1450fb9876 |
|
MD5 | 783b232c0d6f3dce63b40e3caa1d2f9e |
|
BLAKE2b-256 | 50af949885983d3b3c7722504c6b72749d34f96eeb11547079e5b254bbe3b802 |
Hashes for atomic_bomb_engine-0.21.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a4d5cdf281a4a339a65965a2e75c21b4119359aff03386ea85b4a3a9b3db5f0 |
|
MD5 | cc9f41d1439011f9635fd5305524b4d3 |
|
BLAKE2b-256 | 6ecfbf8ce2c5e1e660d786d9dfebaaca197ee25c71374fec7d7dce081f9948f3 |
Hashes for atomic_bomb_engine-0.21.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e30007cb53faf9000d344bf2319452b370124a672665aa4b4cb6a0bc5c21d0fb |
|
MD5 | 976b0dbabfed6b4ea3708449aa6db899 |
|
BLAKE2b-256 | c1364d0c826278c68f517b4b488fe7c62e3ea6b0497180897ec23bcb1c9f97b6 |
Hashes for atomic_bomb_engine-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53ef33a3a6ecebea7f314704bcfd3e4b45622fb40bab018df987c8ccd4bc685f |
|
MD5 | b9d4c3a3a39c1c15a891d786ea0f93d5 |
|
BLAKE2b-256 | 2168700fe7986b770439588c748bb9a65e259c960bf86b6015455c1d6594d734 |
Hashes for atomic_bomb_engine-0.21.0-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 457ab2d75da25e8329d94470437117ad1d02e468b247bc9d3f4b4fb5b279151f |
|
MD5 | b0bda6e615e012bb1554c32c1ebf1ed0 |
|
BLAKE2b-256 | 0801db9ea43c6e4e141f44c471408061e00fe87c22ea6169f1cb8390f64dc03d |
Hashes for atomic_bomb_engine-0.21.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 080b6d9984aff5d6983117ccfcd39d194b63d9610d543615695619e76a6f4a85 |
|
MD5 | 3a068677f95e8f9434e140562082887f |
|
BLAKE2b-256 | 60b746ae33bcca546619d6b8aa117a444d8c39b68bb4e7ccc3f340e603512ca4 |
Hashes for atomic_bomb_engine-0.21.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94e21d67fbd28f1b4aacb3425f9005e4c3991c103a0560d7039fd7b6fbf97369 |
|
MD5 | bc4bd87b60929e1288b59a5ce0bd2681 |
|
BLAKE2b-256 | 0a61466dac3ccbe5fb5e4e27ebefbf6f2e481b785bb9e04ff1a81a62e037c138 |
Hashes for atomic_bomb_engine-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ede595db35a27cd67f46c58321483a9da598a76045490f07d54983ee08916b2f |
|
MD5 | f021e8703424189137509fb2589cdfaf |
|
BLAKE2b-256 | 4eb755677fc8ff5efdba11d87728834c246f8a7f2967b2e9349837e7793e85c9 |
Hashes for atomic_bomb_engine-0.21.0-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d6558541170c5da6d99a14684b40c77822581afbbabc65715f0f1308f9ee7ab |
|
MD5 | c5608cc951fffd418f523f1a22c953b9 |
|
BLAKE2b-256 | 54cf230f9dd08fec5dd881c0fd236d0b3c0efb21ec3dd73926747016580ff717 |
Hashes for atomic_bomb_engine-0.21.0-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | face411a1bbecb8bb2ff79bdf527768a9d3c7a607db6c5a99691e929043ad535 |
|
MD5 | cfe7ed9bfde57279867f9e07b2b55e22 |
|
BLAKE2b-256 | dba673a4923664ea7e68b8c1f90231a87d5102783c7b671791dbd201010d92ff |
Hashes for atomic_bomb_engine-0.21.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89bbd997ece3fd9e9dac9f5c0aaec9502af863ea0df658be6d263e646a507c7e |
|
MD5 | aab47f37c8e1f652c405217538261157 |
|
BLAKE2b-256 | 36448a342e95295f025031d5c300c23959dc703bafbaf4c6c5041eb88635453f |
Hashes for atomic_bomb_engine-0.21.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c65ec4a274ba809b657f9559014b58b9775fb75b2013d7f5220b266939f7304 |
|
MD5 | 9e8245bcc9c318e53e574cc36d5f88f9 |
|
BLAKE2b-256 | d9379e8698d25271c24e133a09fae5d9afa43dfaaf064a5f8a8a259e9a4814d7 |