使用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.2-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09ac509a2932306581b1a0755af6019d4045c5c44bd05189a4b1eb29284ca10f |
|
MD5 | d35e731776ab67fed22fa19f1c60013c |
|
BLAKE2b-256 | 655d12e7dd2ee01a427df6a4427960a995249eb72607b4e18900bd1ca29d2d18 |
Hashes for atomic_bomb_engine-0.21.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14abe1731fa152c0f163ef3df53c809b2a91644dc90f98eb2933e7d768b6e257 |
|
MD5 | ba89e4fd286f76ed841d84ac6771a028 |
|
BLAKE2b-256 | 0d78bf4c0b725b653280c94772479b8cb82fed2f9ff54d08471a6e8f4037f1b5 |
Hashes for atomic_bomb_engine-0.21.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9b438fcb8bd89fd1f11111e1be341d746a5d6218b6cdacf273c8879322e3f21 |
|
MD5 | 4e743f1b126ce178d867f7373d219439 |
|
BLAKE2b-256 | 047309a1b19c62d194f3c652e3b93f4287a267275e46a4207442e42b039c00c6 |
Hashes for atomic_bomb_engine-0.21.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b388027f685f49fb75e80693e381c96d595c55637b736eb90f27879bd4f61d6a |
|
MD5 | 65b061efd82b373ac893e63c05d8e71a |
|
BLAKE2b-256 | 0996f2a52c133863d50635180dc6f364348ca256d7b34341968f2762f019274f |
Hashes for atomic_bomb_engine-0.21.2-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa63659e2dc143baced77d5b8b38d415421864156a203c4332cc20b3abe4fca1 |
|
MD5 | 8f329bd50f4fba3303bdf2b2b29bdeeb |
|
BLAKE2b-256 | 726208bdbb48d4440872a6eda62f1fe9f25259490d7788b77fe2e70f8b16f2e5 |
Hashes for atomic_bomb_engine-0.21.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 81d477a478b4c9465fbf9145ef8b570e7fc180d70652af63ffa5205e0e28193c |
|
MD5 | 0e2887b9f6bd4d02dc4433b22992844b |
|
BLAKE2b-256 | 35a76ac0aa1833309d80f68acb91f1f142d9f8f57b233265c4135e44c0479a82 |
Hashes for atomic_bomb_engine-0.21.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | acdd08a5a69f5f03ba057377ed95cad122ce681548b9c78601cc0faf6d5a8e9b |
|
MD5 | 63e0d93af1700b780bffc50680f4f37a |
|
BLAKE2b-256 | 194e557240223d7b3b370b523b1628630b023152f8f282ab8e5c62aeab950501 |
Hashes for atomic_bomb_engine-0.21.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab76d3e3b3a2c00e057ff4ac51a20b35d5429c42ed201232ae21c8c843f8dd73 |
|
MD5 | 49f33446f1fb00f467c612fe69e02813 |
|
BLAKE2b-256 | 9e919b3f82b149c557f50d056eb53dae48859625275d70d48aa9ea29e964a80c |
Hashes for atomic_bomb_engine-0.21.2-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2411b26e23d0bfc70c8e8818fbdabf808bfcaef0b167088212926ebfae953e1 |
|
MD5 | 280e469774c1b880738b9e2cd61275f7 |
|
BLAKE2b-256 | ee7a959bdee0054f884cccf252f745232236594a4cd979c34c2b6834fbede760 |
Hashes for atomic_bomb_engine-0.21.2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9919644c9c45686e73d7d5a5722cdc7f0670741570363c561436b5b84910494a |
|
MD5 | 813b33f7ca01ae519834b828ac25e9ac |
|
BLAKE2b-256 | b90198cf849676e62c40f2e26d4eae0b2860c77c72c8ba80ec0702a121fee0ff |
Hashes for atomic_bomb_engine-0.21.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1bf059f876fec3a5eea0b7db01a5c035fa2b5678da12178c3dbbeab29be598fa |
|
MD5 | ff8f218132aa1d4cc182a4a722ad07d1 |
|
BLAKE2b-256 | 2ea39760f9762e45ec9e458583fccc3b90b56372022699f0e2b65e39a2758e00 |
Hashes for atomic_bomb_engine-0.21.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e266d386c5b28a5d40dfdf5c51d6e534aab1bb9c5f936c6d7406f29235b7d68d |
|
MD5 | 086916762e62b29d0824fb7c09414ccc |
|
BLAKE2b-256 | 09fa79550a682d3ce5b657abbbaaa705996fe1305271c68c33b81dd3820b8e13 |
Hashes for atomic_bomb_engine-0.21.2-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4efe6d3d4941c92c4f2421e47992b337f21c28851064b12bfad7b9248945a409 |
|
MD5 | 69dbbf0e4bc1700d7b5dfb87bb57a4d9 |
|
BLAKE2b-256 | d9862d9afbb0607c840887bc2100327738f8a3e8dce889ab938215132cc2759b |
Hashes for atomic_bomb_engine-0.21.2-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1a34849076deb159032877fbb599c780c774e74cad29bf2e02cecb38aa355d4 |
|
MD5 | a55def55d82a25c340bcc06ad0926eb4 |
|
BLAKE2b-256 | a525e51a022fbcdd8a4493f8ead713cbfe5cceb77d0b6442f731af629061c6b0 |
Hashes for atomic_bomb_engine-0.21.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb6d01a34374ba6492dea52fb9f704906999035291aef39f7cb075f020764c76 |
|
MD5 | 5b47c2f17ac1f95864ee18b9b8c04416 |
|
BLAKE2b-256 | da9be46fe2e6621c6b75e6652744815ba35a870d2ab1a47c69fe233b7cf3e45d |
Hashes for atomic_bomb_engine-0.21.2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d17c8188133f83297a1fa9e7a309bd71805beabe5cd071fcc0c7c941a432bb9f |
|
MD5 | 37e2514830471f41f907f3f836248227 |
|
BLAKE2b-256 | c921330338738c6ac4ac4c471c3347f27bc82416d8da365e329014be1def5592 |
Hashes for atomic_bomb_engine-0.21.2-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 525940fabfaea0e3ea2d4da726f650a242406527e32c5bffe2a816b20a8455b1 |
|
MD5 | 982adf5fb3be7427b1efb5057f2dcf98 |
|
BLAKE2b-256 | 698a070869a41702b576aca5905fe30fe97c8658b46a2514738b7f449777db41 |
Hashes for atomic_bomb_engine-0.21.2-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb0b8d0d8d0842e793fff1cb4840616b54e61a4319377769b05e358b2f299882 |
|
MD5 | 8186d12af00b84b594d8da3b2948a0be |
|
BLAKE2b-256 | 7495b7f24a2ea1f48d17a4806c1d48bd9c40fcb077c9c5b5b5f96545c8ecce83 |
Hashes for atomic_bomb_engine-0.21.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8787cbace13e423cfdd4b826fb8c548a8905b97a1f6c2c7f9d1e30cef41dbdce |
|
MD5 | 1453c5afc34fe483c1385a858ee616aa |
|
BLAKE2b-256 | 00abccb036527f6597bfc2b5f46e010a1281b4fc7911bac2f6ed8c167758e899 |
Hashes for atomic_bomb_engine-0.21.2-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b916a88ffda9cc924903407c3bfb0ba842e1c732c97fe1066a0c35a4a92cb599 |
|
MD5 | ea5509cc5586ca5a0923128daf506052 |
|
BLAKE2b-256 | 34fb6d18e6e125dcea4188f9df4b445e3b43cd32a0e7e930a6a950d17d5e3e61 |