Skip to main content

使用rust开发的高性能python压测工具

Project description

atomic-bomb-engine-py

atomic-bomb-engine的python包装实现

logo

前端仓库

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=None,
       setup_options:List[Dict[str, Any]]|None=None,
       verbose:bool=False,
       should_prevent:bool=False,
       assert_channel_buffer_size:int=1024,
       timeout_secs=0,
       cookie_store_enable=True
) ->Dict:
 """
     批量压测
     :param test_duration_secs: 测试持续时间
     :param concurrent_requests: 并发数
     :param api_endpoints: 接口信息
     :param step_option: 阶梯加压选项
     :param setup_options: 初始化选项
     :param verbose: 打印详细信息
     :param should_prevent: 是否禁用睡眠
     :param assert_channel_buffer_size: 断言队列buffer大小
     :param timeout_secs: http超时时间
     :param cookie_store_enable: 是否为客户端启用持久性cookie存储。
 """

使用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=60,
   # 并发量
   concurrent_requests=200,
   # 阶梯设置(每5秒增加30个并发)
   step_option=atomic_bomb_engine.step_option(increase_step=30, increase_interval=5),
   # 接口超时时间
   timeout_secs=10,
   # 是否开启客户端启用持久性cookie存储
   cookie_store_enable=True,
   # 全局初始化
   setup_options=[
     atomic_bomb_engine.setup_option(
       name="初始化-1",
       url="http://localhost:8080/setup",
       method="get",
       jsonpath_extract=[
         atomic_bomb_engine.jsonpath_extract_option(key="test-msg", jsonpath="$.msg"),
         atomic_bomb_engine.jsonpath_extract_option(key="test-code", jsonpath="$.code"),
       ]
     )],
   # 是否开启详细日志
   verbose=False,
   # 被压接口设置
   api_endpoints=[
     atomic_bomb_engine.endpoint(
       # 接口任务命名
       name="test-1",
       # 针对每个接口初始化
       setup_options=[
         atomic_bomb_engine.setup_option(
           name="api-初始化-1",
           url="http://localhost:8080/api_setup",
           method="get",
           jsonpath_extract=[
             atomic_bomb_engine.jsonpath_extract_option(key="api-test-msg-1", jsonpath="$.msg"),
             atomic_bomb_engine.jsonpath_extract_option(key="api-test-code-1", jsonpath="$.code"),
           ]
         )
       ],
       # 被压接口url
       url="http://localhost:8080/direct",
       # 请求方式
       method="POST",
       # 权重
       weight=1,
       # 发送json请求
       json={"name": "{{api-test-msg-1}}", "number": 1},
       # 断言选项
       assert_options=[
         atomic_bomb_engine.assert_option(jsonpath="$.number", reference_object=1),
       ],
       # 思考时间选项(在最大和最小之间随机,单位毫秒)
       think_time_option=atomic_bomb_engine.think_time_option(min_millis=500, max_millis=1200),
     ),
   ])
 print(result)
 return 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=60,
    # 并发量
    concurrent_requests=200,
    # 阶梯设置(每5秒增加30个并发)
    step_option=atomic_bomb_engine.step_option(increase_step=30, increase_interval=5),
    # 接口超时时间
    timeout_secs=10,
    # 是否开启客户端启用持久性cookie存储
    cookie_store_enable=True,
    # 全局初始化
    setup_options=[
      atomic_bomb_engine.setup_option(
        name="初始化-1",
        url="http://localhost:8080/setup",
        method="get",
        jsonpath_extract=[
          atomic_bomb_engine.jsonpath_extract_option(key="test-msg", jsonpath="$.msg"),
          atomic_bomb_engine.jsonpath_extract_option(key="test-code", jsonpath="$.code"),
        ]
      )],
    # 是否开启详细日志
    verbose=False,
    # 被压接口设置
    api_endpoints=[
      atomic_bomb_engine.endpoint(
        # 接口任务命名
        name="test-1",
        # 针对每个接口初始化
        setup_options=[
          atomic_bomb_engine.setup_option(
            name="api-初始化-1",
            url="http://localhost:8080/api_setup",
            method="get",
            jsonpath_extract=[
              atomic_bomb_engine.jsonpath_extract_option(key="api-test-msg-1", jsonpath="$.msg"),
              atomic_bomb_engine.jsonpath_extract_option(key="api-test-code-1", jsonpath="$.code"),
            ]
          )
        ],
        # 被压接口url
        url="http://localhost:8080/direct",
        # 请求方式
        method="POST",
        # 权重
        weight=1,
        # 发送json请求
        json={"name": "{{api-test-msg-1}}", "number": 1},
        # 断言选项
        assert_options=[
          atomic_bomb_engine.assert_option(jsonpath="$.number", reference_object=1),
        ],
        # 思考时间选项(在最大和最小之间随机,单位毫秒)
        think_time_option=atomic_bomb_engine.think_time_option(min_millis=500, max_millis=1200),
      ),
    ])
  print(result)
  return result


if __name__ == '__main__':
    asyncio.run(run_batch())

使用server.ui装饰器,可以给批量压测方法启动一个简单的web服务器,不需要再手动监听BatchListenIter生成器

内部架构图

architecture.png

[0.19.0] - 2024-04-16

Added

  • 增加了初始化和参数模版功能
setup_options=[
  atomic_bomb_engine.setup_option(
    name="初始化-1",
    url="http://localhost:8080/setup",
    method="get",
    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",
    # 针对每个接口初始化
    setup_options=[
      atomic_bomb_engine.setup_option(
        name="api-初始化-1",
        url="http://localhost:8080/api_setup",
        method="get",
        jsonpath_extract=[
          atomic_bomb_engine.jsonpath_extract_option(key="api-test-msg-1", jsonpath="$.msg"),
          atomic_bomb_engine.jsonpath_extract_option(key="api-test-code-1", jsonpath="$.code"),
        ]
      )
    ],
    # 被压接口url
    url="http://localhost:8080/direct",
    # 请求方式
    method="POST",
    # 权重
    weight=1,
    # 发送json请求
    json={"name": "{{api-test-msg-1}}", "number": 1},
    # 断言选项
    assert_options=[
      atomic_bomb_engine.assert_option(jsonpath="$.number", reference_object=1),
    ],
    # 思考时间选项(在最大和最小之间随机,单位毫秒)
    think_time_option=atomic_bomb_engine.think_time_option(min_millis=500, max_millis=1200),
  ),
]

上述实例展示了如何在请求中使用全局变量,使用双大括号即可使用

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

异步断言使用了补偿消息,保证消息的一致性

[0.25.0] - 2024-04-23

Added

在endpoints中增加思考时间,模拟用户行为

think_time_option(min_millis=200, max_millis=300)
  • min_millis:最小思考时间(毫秒)
  • max_millis:最大思考时间(毫秒)

使用时在endpoint中增加think_time_option参数

api_endpoints=[
  atomic_bomb_engine.endpoint(
    name="test-1",
    url="http://localhost:8080/a",
    method="POST",
    weight=1,
    timeout_secs=10,
    json={"name": "{{test-msg}}", "number": "{{test-code}}"},
    think_time_option=atomic_bomb_engine.think_time_option(min_millis=200, max_millis=300),
  ),
]

[0.26.0] - 2024-04-24

Added

  • 增加endpoint中的setup,在并发中可以做接口断言
  • 增加有关联条件下的cookie自动管理功能
atomic_bomb_engine.endpoint(
  # 接口任务命名
  name="test-1",
  # 针对每个接口初始化
  setup_options=[
    atomic_bomb_engine.setup_option(
      name="api-初始化-1",
      url="http://localhost:8080/api_setup",
      method="get",
      jsonpath_extract=[
        atomic_bomb_engine.jsonpath_extract_option(key="api-test-msg-1", jsonpath="$.msg"),
        atomic_bomb_engine.jsonpath_extract_option(key="api-test-code-1", jsonpath="$.code"),
      ]
    )
  ],
  # 被压接口url
  url="http://localhost:8080/direct",
  # 请求方式
  method="POST",
  # 权重
  weight=1,
  # 发送json请求
  json={"name": "{{api-test-msg-1}}", "number": 1},
  # 断言选项
  assert_options=[
    atomic_bomb_engine.assert_option(jsonpath="$.number", reference_object=1),
  ],
  # 思考时间选项(在最大和最小之间随机,单位毫秒)
  think_time_option=atomic_bomb_engine.think_time_option(min_millis=500, max_millis=1200),
)
  • 参数cookie_store_enable控制是否自动管理cookie,前置条件的cookie会带入到最终的压测接口中
  • 在endpoint中使用setup_options可以传入多个接口,并且提取参数
  • 提取到的参数如果和全局的setup的key冲突,会覆盖全局提取到的参数
  • 接口中提取的参数只能在本线程(v-user)中使用
  • ⚠️ 使用时注意:setup_options是顺序执行的,没有并发,但是相当于添加了think time

[0.28.0] - 2024-04-25

Added

  • 将持久化cookie添加到全局选项中
  • 复用http client
  • 选择性开启断言任务
  • 接口初始化时出现错误等待后重试

bug和需求

  • 如果发现了bug,把复现步骤一起写到Issus中哈
  • 如果有需求也可以在Issues中讨论
  • 本程序是本人业余时间开发,不太准备保证时效性,但是如果有时间,一定第一时间回复和修改bug

TODO

  • 前端展示页面 ✅
  • 接口关联 ✅
  • 每个接口可以配置思考时间 ✅
  • 增加form支持 ✅
  • 增加代理支持
  • 增加附件支持
  • 断言支持不等于等更多表达方式

联系方式

👏🏻👏🏻👏🏻欢迎加群交流

img.png

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

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

atomic_bomb_engine-0.28.2-cp312-none-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.12 Windows x86-64

atomic_bomb_engine-0.28.2-cp312-cp312-manylinux_2_34_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.28.2-cp312-cp312-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

atomic_bomb_engine-0.28.2-cp312-cp312-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

atomic_bomb_engine-0.28.2-cp311-none-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.11 Windows x86-64

atomic_bomb_engine-0.28.2-cp311-cp311-manylinux_2_34_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.28.2-cp311-cp311-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

atomic_bomb_engine-0.28.2-cp311-cp311-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

atomic_bomb_engine-0.28.2-cp310-none-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.10 Windows x86-64

atomic_bomb_engine-0.28.2-cp310-cp310-manylinux_2_34_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.28.2-cp310-cp310-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

atomic_bomb_engine-0.28.2-cp310-cp310-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

atomic_bomb_engine-0.28.2-cp39-none-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.9 Windows x86-64

atomic_bomb_engine-0.28.2-cp39-cp39-manylinux_2_34_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.28.2-cp39-cp39-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

atomic_bomb_engine-0.28.2-cp39-cp39-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

atomic_bomb_engine-0.28.2-cp38-none-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.8 Windows x86-64

atomic_bomb_engine-0.28.2-cp38-cp38-manylinux_2_34_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.28.2-cp38-cp38-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

atomic_bomb_engine-0.28.2-cp38-cp38-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.8 macOS 10.12+ x86-64

File details

Details for the file atomic_bomb_engine-0.28.2-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 1d56e457e17d1d65c7d98f9b57bd605795a5b1a98b68e352f7f465b0521f8095
MD5 909d3a1289d6ae0a140b6ec7d44e165c
BLAKE2b-256 5e500dfd232dc9b6c1973f17da17a72f5c667452b06fb4f6ba95169d9106b6bf

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1f279971bf902f10016ffe293b47229be48a3bae31479a1fb75a6c9c09475bc2
MD5 fef8c0403475e2658bf1803bf4152560
BLAKE2b-256 34c58387a921cec77111547f254608d8a8d2dc8b789dcda1de53506d9649944f

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a43937e7275fddc25592b2c73859067ddc8766d20058277094d7924e3a748715
MD5 1fabb2b647cb74d067fbe722066ce26d
BLAKE2b-256 f97263a21a6df68ffb763eb3547cd50dd896e8a1238a865370b19e15861a89c0

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7e8293495dae476fb845747470c2bb8ac5e64e32a142dd937d08a75c578d429e
MD5 6126972e20e14d61f74dd855e55851c2
BLAKE2b-256 8bf3b2017bbf8d608d46c779ebf1b3a85f1b510b206ca6642bfd1cf27f3cc518

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 fc7288a85c6a4eb5f4721b3759555549e3aa58db2a6519df41c1d33c3b4832e0
MD5 e8f09595841014ee83d6ad762379d04b
BLAKE2b-256 8f605bfb24f5bae1f967fc1c399599ed4efdbe3cdd0939ee2309633eeb581491

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6dea1702ba8194acf55528dba8f76844d0185b55e733d92db86e1efdce12e3cc
MD5 f26d674abe078ac6ff1bd6f7bb908c6a
BLAKE2b-256 beb11ee18fc9ce1185a1ffe8940c2d913ed7c975118846b339e1021ea33e6ab5

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 266172da8e5d0aef5d96021cc8d85b2db8a7bbc38191d77cc610de1baf653a63
MD5 030410cea1b69dbd49bb8e67f327df47
BLAKE2b-256 7c792e3cf8aaed2ba06c967537cf0a77c25150b1df921bddaa10cf9a35955e74

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 afa14428827de29cd15a478686180dfcc8c34f1491bdf40618daee6e9e7c62cd
MD5 a5cbf5e92d133a043e666bbe28f4e9a4
BLAKE2b-256 958d9f14f80bf22f495783a70ff7c6f6a9ce6def71db46917f30dc2b6d2fa1cd

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 213f552d7924685f5e118299118eab81aa626d46ed68a101c9954be3d56cba98
MD5 9b68c488634ed3ca7fdb21c781b85929
BLAKE2b-256 223fa5be36cac1cb7639490c34c7e0d8c7ddea075d58760b65d9b339cd6de6d0

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 eefb80ffb4f8043e5fe41a95f6539d80d6cdcfb531e53331b87cd86c8ff4c7f9
MD5 f0e9b68b4e62bb3e9860c0e886a80ea7
BLAKE2b-256 530b30dd61dd7eab1777864cf01e21a3ceab9aac8af748049cdce65696538c71

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ac185683828f52e3ad0ceb305f83d993d0f228285aba8653de83bd6a0e3947b
MD5 797c5f95fbb8dc6ed0d4680149aa8fe8
BLAKE2b-256 434ad517d6bf8a211358fea05ae9c4d759aac3ca9c0c14a01e6cacf031894c86

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4d867cfcc5260f43a9b3cb0fa557c8b5b4086d61b9c3b81b383df144f6c993f5
MD5 c04eb88595600487e00f0ea0bd8cca5b
BLAKE2b-256 ae5dba57593f4058860f7f282284af4e56bc62f13d9655c14712dabdeb297ca9

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 41041511fe3a56e0e1d2752f193806eb8f48fd9083dfefd1447914413350e96e
MD5 2a2d5c2d1dde2065122a51873028aca0
BLAKE2b-256 5b96bc862b5d1f6167faf74812382dfef4fb27ebaa6a6e116f22c957f44ddc24

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 972ac2ac269794f78d331eb3cefc75e626c035a2851fac06240e286e63f29f90
MD5 525ba7b21aafcd340edfa70218e95020
BLAKE2b-256 cdac4ad1c520c4314a64c2aef3664db6d670ecf8aa151d86b88d6f4f56552120

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c4a0bf3abef9a8fb7c6223d90d8470a2d19803e870b1b1fbd5121a8986f0b35
MD5 286c84af4b66912ac80cef3d8cad093a
BLAKE2b-256 06128c5622afeb8c51d6560aea2fdc5d06c0773c568bed207d2b6c82922e5836

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c6acf6dc5266bda9fd46b7dc9b4844b2fef29440c9dbf21feed08a2cf84d878c
MD5 1b2f8e0790a1c420d9b4ee8f979d65c3
BLAKE2b-256 e6f0c826db6c7b3ac189b0e882320a9d2f056c110be825505be040558b1dcf52

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 94677900f0ee8be75c3f7d9e16bafa816dda7e7cc067219d259936e9b1e31394
MD5 b68d745887180f612673e75000f5e162
BLAKE2b-256 971faeee89997ba76191c35c14aff7d9b197fd456617cccc21b4a88fcfe23faa

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp38-cp38-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 dff0b9181f9e98a6029df235498a106abcbeac65492e99aa9ad65ccc018eee36
MD5 4c4d4442854a028476b912bbf91364ff
BLAKE2b-256 ba10c198fdd6e5a133f595af78854a7ad842f41c86135418c34168b1a15d3bd0

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dcf18fad6d763c2eee1b5e1374b66a4e4d6a879540cdca8ccd038810a09865e5
MD5 661a96768a39f77cc7315729518ca3a2
BLAKE2b-256 8bfb5343f62711e5845bfd48e6304637b5452d81ed2fb3081a5e156226724aeb

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.28.2-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.28.2-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ad7fe347310652a1a9e63a09a57481c80e92306d0498a790acb465e25b250f76
MD5 138d0ac1bc0131f4c15affa98d313684
BLAKE2b-256 fcb649004cf1837061477c85973174e3257bd370b6abab4aafe5a17c6a71fcfc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page