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
  • 开始压测

    • 单接口压测 (功能与多接口压测重叠,已废除)

    • 多接口压测

多接口压测可以先使用

runner = atomic_bomb_engine.BatchRunner()

实例化一个runner类 通过runner类中的run方法开启压测 run方法函数签名如下

def run(
         self,
         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
    ) -> None:
        """
            批量压测
            :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

监听时可以在使用完run方法后,继续迭代runner即可

压测+同时监听

import asyncio


async def batch_async():
  runner = atomic_bomb_engine.BatchRunner()
  runner.run(
    test_duration_secs=30,
    concurrent_requests=30,
    step_option=atomic_bomb_engine.step_option(increase_step=3, increase_interval=3),
    timeout_secs=15,
    cookie_store_enable=True,
    verbose=False,
    api_endpoints=[
      atomic_bomb_engine.endpoint(
        name="test-1",
        url="http://127.0.0.1:8080/direct",
        method="POST",
        json={"name": "test-1", "number": 1},
        weight=100,
        assert_options=[
          atomic_bomb_engine.assert_option(jsonpath="$.msg", reference_object="操作成功"),
        ],
      ),
    ])
  return runner


async def main():
  results = await batch_async()
  for res in results:
    if res.get("should_wait"):
      await asyncio.sleep(0.1)
    print(res)


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 batch_async():
    runner = atomic_bomb_engine.BatchRunner()
    runner.run(
      # 测试持续时间
      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),
        ),
      ])
    return runner


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

使用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
  • 选择性开启断言任务
  • 接口初始化时出现错误等待后重试##

[0.29.0] - 2024-04-25

Added

  • 优化并发逻辑
  • 前端更改为web worker发送心跳

[0.38.0] - 2024-05-7

Added

  • 增加附件上传功能
    • 在初始化和每个接口中增加了multipart_options参数用于附件上传
    • 增加multipart_option方法封装附件参数
      • form_key: form表单的key
      • path: 附件路径
      • file_name: 附件名
      • mime: 附件类型 (类型可以参考这里)
api_endpoints=[
            atomic_bomb_engine.endpoint(
                name="test-file",
                url="http://127.0.0.1:8888/upload",
                method="post",
                weight=100,
                multipart_options=[atomic_bomb_engine.multipart_option(form_key="file", path="./ui.py", file_name="ui.py", mime="text/plain")],
                assert_options=[
                    atomic_bomb_engine.assert_option(jsonpath="$.message", reference_object="File uploaded successfully!"),
                ],
                think_time_option=atomic_bomb_engine.think_time_option(min_millis=500, max_millis=1200),
            ),]

[0.39.0] - 2024-05-15

Added

  • 启用BatchRunner类,每次执行可以返回一个迭代器
  • 废除run_batch方法
  • 废除ResultsIter迭代器

[0.40.0] - 2024-05-16

Added

  • 将rps统计改为滑动窗口的形式

[0.41.0] - 2024-05-20

Added

  • run方法增加指数滑动平均参数: ema_alpha
    • 参数为0-1之间的一个浮点数
    • 参数为0时不启用
    • 数值越大越平滑,但是失真越多
    • 建议使用0.1以下

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.41.3-cp312-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.12 Windows x86-64

atomic_bomb_engine-0.41.3-cp312-cp312-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.3-cp312-cp312-manylinux_2_34_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.41.3-cp312-cp312-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.3-cp312-cp312-macosx_10_12_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

atomic_bomb_engine-0.41.3-cp311-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.11 Windows x86-64

atomic_bomb_engine-0.41.3-cp311-cp311-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.3-cp311-cp311-manylinux_2_34_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.41.3-cp311-cp311-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.3-cp311-cp311-macosx_10_12_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

atomic_bomb_engine-0.41.3-cp310-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.10 Windows x86-64

atomic_bomb_engine-0.41.3-cp310-cp310-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.3-cp310-cp310-manylinux_2_34_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.41.3-cp310-cp310-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.3-cp310-cp310-macosx_10_12_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

atomic_bomb_engine-0.41.3-cp39-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.9 Windows x86-64

atomic_bomb_engine-0.41.3-cp39-cp39-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.3-cp39-cp39-manylinux_2_34_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.41.3-cp39-cp39-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.3-cp39-cp39-macosx_10_12_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

atomic_bomb_engine-0.41.3-cp38-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.8 Windows x86-64

atomic_bomb_engine-0.41.3-cp38-cp38-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.3-cp38-cp38-manylinux_2_34_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.34+ x86-64

atomic_bomb_engine-0.41.3-cp38-cp38-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.3-cp38-cp38-macosx_10_12_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.8 macOS 10.12+ x86-64

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 bbd55801d1c4cbb47795b60aeddb99393c63514189de4a23de9b452e2e253148
MD5 03d726c0cfcd563396f09ce7064139b4
BLAKE2b-256 c0bcdedb1893629dc93a4bd3e5761eb2e2d826e8c82078b3a03af734c267f74a

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.41.3-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 27b3d26ffdd03447120762541728b46a9f2887232f544cac6e2cb43ebb1629b1
MD5 d286a6f30160ee8bcaa3a2b6adab755d
BLAKE2b-256 80ad221daae17825c3ed8f396c040dc3d27fb5c005f406a3f53019d4f1db69a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 cfc9bb62938967bee45be591bcd02069f19a24378ddd44b2bbf35d4c014d056a
MD5 e9cd19122a82a46edd2d8e89a8d377f2
BLAKE2b-256 0e242e699b457b3e3e8a4d6caefcbeb520f4ee992214404e2317cbd0f7f567c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 491e967f8ee63e45ff1b54a2bb3ca01a2895f7a58dfa7b63df5102e1f5ac39f0
MD5 7b6c454d973602cd5ef5eea84337c8c5
BLAKE2b-256 08f01d947775dfb91e1d6d7c8b3fa79a7cac805a524828e9096222ef45ec32a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6af17b6562294b0f88b903dcfed3bfedaaae8a478dc2020bfb71fa7ec17031e9
MD5 7856cdb69db2b20c17286889bcad0208
BLAKE2b-256 7e2acfe21a586951f869cf6e1303e5c7670cdade847762a0bb1f53ff26bc2b02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 d4a6098e4979202b38b6a9f4d88bcfd6e2574a332059f9e4229a8aecdf9fc647
MD5 2c8e14971ed986d8efce5d17d4bd57e0
BLAKE2b-256 11d9fdca9de9d4bb62bb53f792adb1b11f63fbd27d9a996f8aa5a1f4eea50829

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.41.3-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9cc6a690f1a6ca08577b9e91ae6fae69a959093620ad49d6123169d64edcb2de
MD5 1cec68e85fd9c53c3a5bbc66fce3242f
BLAKE2b-256 f4f98a3c909f4020ff45cb627afb3db8c94bc05572a294e1cd8aef4fab69eda4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e4c3b8bab3e49eb7e2efae18c7f445d3d1791170486b0b76c0ed2d37cc3fac63
MD5 bf82fac7f262b455f89df84776338cf9
BLAKE2b-256 e2f34c7c730b8650997dbe7483e163bf739e4eaa0d410537297533d9eb398c09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 42390f7db3d7d9705d4b529b283d92fb4919be3388be758486934ae213f1571d
MD5 1a2359032dfa17bba6fd34f49fb82060
BLAKE2b-256 0db7414aa2f519f28430b5596aa96c6b215c965af374e7895ea6412bbe2bb126

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ac35c1b537b04944a64462f16012248b2ed9254aba464176c69019e1f32f3a11
MD5 031a1fbce3c39d710bce24cc54df5ae5
BLAKE2b-256 50bfc5be84cdbda4a3e6c295c4600edd51f8e65ceb90106dcef833cfcbf51ae9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 52c31b671ebda64f9eec0ab2a78f185b505a0818d2793004211da33431685374
MD5 d8f5dde4b7e92b17b87f88b09bc1a356
BLAKE2b-256 7f8bf9877966c2279d6e8f8cae7380d9a9fb8f2ccd38f2ff9befe1f6e945da83

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.41.3-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 23531fcbce6117fb13711077944b0f6e3485d66e1564db03812c69efe4616b58
MD5 f75919e877ed09be5c07f05e35996204
BLAKE2b-256 ab04f5210e3c09b1c1a9ca743ab400de1dbd4d8d5a7dc35b7c9ce5b71f0cde35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9d3d7a0fbd1a7628c1552ef2cac3642c21306c84acbba7d3bc10f9d4f3405fc3
MD5 a677da2910b3bb9556643cf2441c6eac
BLAKE2b-256 5f96bdfb489a088a3f55900b3a90bbd5522e9b3affcc1d74e60bdd783e29bce0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9206804a1a93361293271022f193e1c012169f91c406567b7d41e06769aa7aca
MD5 749248604248ad487badf5509e71aaed
BLAKE2b-256 054d2cde9d279533b02284b3b02d8d7cd37679270531b51d49205839fe40cf63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 99c61130ae84da4f4cfc7748a338b729f2289cd8f6905369335cd01965b8bdb9
MD5 5214d24640edcc88307f19cb1937390e
BLAKE2b-256 e34b276414768cce33d55725c83782c2a6013d286fedcb8d35a3182501da0289

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 4adc3bfb2cbbd484037725300345ff05fae364656cc6cd880bbcd301cf401d80
MD5 3214e54801fa97db5570dcbaa627a1ee
BLAKE2b-256 85fb7b964d9eaeb9d0c194e0703ad89674b8d6e414ac283a76f22ff98d1f3022

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.41.3-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 41ab10fbcdd811030c3199814b5d5f282e91e39c39afee044699daa7bfaf0821
MD5 d05dad626cf14a41e71b91ac4f694176
BLAKE2b-256 c4b33a8a53d349a3c3bed1f2c4d226ead4b7098d7913b326b074c988208ee47e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 914f1b1641f40aa44d2a488045e054595fce69d081c650df63024fb1622aecc5
MD5 242a5e379dd9ea12a8b47fb1ee74e492
BLAKE2b-256 aa221a2b8563d339ce75b4ef2200dc21da2ef29edfebc187b72ea241762ec43e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d82a76e5fc4319ec9ee72bacaa8f7e2f7965af2500ccd094e46385412bf173dd
MD5 84efc0f4d9388e19c9466efac055452a
BLAKE2b-256 381f6856dd0f60c22cba2b98012208c85d8a3bb599c18d7266e8ba2bc54acca3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8bc7ed17342e1b197dfabc0a24db1a1215a2f66c6fea752bda8590030ff5f6f8
MD5 f10587a71b5dc0228523b4ec24a4cf56
BLAKE2b-256 48cd3727d56152e4c7e5fc7d5d2a498d1dd28b3b0c6222372c53967da69dc864

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 f47870f27df8012d1e59e143f59616497b695fdd39a77334fe0a562e6d8ff4b1
MD5 458b2894fe58c939866d295d33d2dbee
BLAKE2b-256 6200dc3ace8c029c94554ff89164f9e26d59e90e6b6caad0a210a802cee9bad6

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.41.3-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3b64c93d570005c971e82b02b24b9554acd509e1bd18cc04b542c39329248016
MD5 f9fec04f7d95dcfaed548263c098d602
BLAKE2b-256 911ba602b0575aba447f112c94316cbb32b53f85878d7e8b2fe53f5b20dcbc24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 08166ad66e6b26e527a14cce8a241e274988b858fad08866d6f77538bd801ebf
MD5 d4f3abdf0557cc15e7d34bef065295a6
BLAKE2b-256 7d5166ac7cca67b1172a8d34f58f5e971d11fd93bf7b504ea1a5ab0d33f53b09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0631ac243d69e520358adca0ab4751f67f38fc652c9e477f8a4aa76c4c46a0a2
MD5 8a3a65857315d6ffbf3426346f8429d1
BLAKE2b-256 a1e4c962804d350cdae2e548542e3c99be26a9bb5a0313d6af04403a9d2fac02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.3-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 36593362ea9ffe834709c76d3edd2eccd5ce2cb13e694ab9d15c2de23b906790
MD5 2321eaff9ae585e888bde58e85ef262f
BLAKE2b-256 70065b5f34195e9672cb2a76e5b4dd3ea129a28b800d2e1edb9a7bfb2f8f329f

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