Skip to main content

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

Project description

atomic-bomb-engine-py

atomic-bomb-engine的python包装实现

logo

前端仓库

atomic-bomb-engine-front

使用条件:

  • python版本 >= 3.8(已验证 3.8 - 3.13)
  • 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

If you're not sure about the file name format, learn more about wheel file names.

atomic_bomb_engine-0.42.0-cp313-cp313-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.13Windows x86-64

atomic_bomb_engine-0.42.0-cp313-cp313-musllinux_1_2_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.42.0-cp313-cp313-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

atomic_bomb_engine-0.42.0-cp313-cp313-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

atomic_bomb_engine-0.42.0-cp313-cp313-macosx_10_12_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

atomic_bomb_engine-0.42.0-cp312-cp312-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.12Windows x86-64

atomic_bomb_engine-0.42.0-cp312-cp312-musllinux_1_2_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.42.0-cp312-cp312-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

atomic_bomb_engine-0.42.0-cp311-cp311-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.11Windows x86-64

atomic_bomb_engine-0.42.0-cp311-cp311-musllinux_1_2_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.42.0-cp311-cp311-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

atomic_bomb_engine-0.42.0-cp310-cp310-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.10Windows x86-64

atomic_bomb_engine-0.42.0-cp310-cp310-musllinux_1_2_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.42.0-cp310-cp310-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.12+ x86-64

atomic_bomb_engine-0.42.0-cp39-cp39-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.9Windows x86-64

atomic_bomb_engine-0.42.0-cp39-cp39-musllinux_1_2_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.42.0-cp39-cp39-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.39+ x86-64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file atomic_bomb_engine-0.42.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c23547752a33537122dac757f4dc8f1b3b657c61129f8411f34727c3a667e651
MD5 3fc359b02e32c99ddf1f762c1a16be74
BLAKE2b-256 d1aa9c0118f0d6990b2d263799d79a16f4473e6499217ad132d69b7e03fd9c09

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d0aeef00136af8b69b5963a587addc5c1dc115e0b65f0067c05f292aca1cdb6d
MD5 f5e7f015b8e5c1170e855d81042b997e
BLAKE2b-256 9ee41690d6898e6569cc23f52c3e2194f6c56975910b1f0ff79b04a68479fe58

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8dcc28a0ac99bb6efb841a34b3bf7dd1300c5b91b6b543dfa26e9f9f15b9fa03
MD5 02cba3daacefd04062fc8429ad60f889
BLAKE2b-256 a21bdb0ee5d0b1ed69ffd696358c7b0ac8dbacf333449023dd4b7dc321c33979

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 52f87c0aa2d816633368e5630887cc2a40804d5d5b4502363ed3911b3914713c
MD5 360033764afb47ea94dce9d7ed02cec6
BLAKE2b-256 2878c98b5da450c2341378e597e35ec2f898ca2332c99fc8eeebd407a1bb21c2

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2742af9d60588fd03c05881ee207c042e4dafca827c57fca7ee69da39b1b538a
MD5 222df6b26cf57839475977c6d7527dea
BLAKE2b-256 ed2ee2e66c7ddefa5945973cc96455b15757803e763b2d702de59f96788f890f

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 27e03488b0dcb70e18bed7799a3b4b663d4773ce883a9e8bcd90ee4fedafc38a
MD5 6c1b9eda9f61a31cabfbc4f1cc5e0660
BLAKE2b-256 f8f1250923ed7479fe93b6334a44447ff2ace790b1a295c048fcd6ca7b2c49f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eea65d2950dfbdf83a1f7269fef33b5ebe460762d82afce1e552c0fcac93f5c8
MD5 5acfe8361ba70142e15c2e8a2b1be6a2
BLAKE2b-256 2b297732f07b3dad12ba146922a80520063d6b1ad6179340281948051e25bce4

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 6ec9492814acae54da610efd21251c1c8b490ca041ac2d65c80bee2630b4d67b
MD5 4090905ae8b6329fb254bd76ddf99089
BLAKE2b-256 a0555035eeb8e770de25e7520f7a3ab049dd5cae1fe3480b6485a24ab69093e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1ad01d344a3d8bdfff1890f0af0db603f588e1a40a784542dbf194fa10d0f4b
MD5 ba99cf8ee5ab3213a975bed05b5168f9
BLAKE2b-256 a91b110072d20d5391309c8daf0e96f4f520d631727a82e5d1fcd754e711cd85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c88df4636ecc41888d20136e2d8cfd266faa0aae78383337c0e934fc3519981b
MD5 b2130b41c5a888d737fdc43865e2a7d4
BLAKE2b-256 4f3a6c3c42e251e745313ec25a8c4486433bcfe57768171b5027926c8848a673

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 58d0034cab218e6dea464394eb4f7f6e0f598b189e458444a7e3c6de00975a31
MD5 4b7f3705fbb362770792a7c13f4c2c5b
BLAKE2b-256 af57ce23cc7005426c0dbe186992840b5556119a1374f35981e308b688d36e5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8f26f84c72221b58fee28d125382566a8b92bed7130c2af959276d0bbc30c0e5
MD5 26848cc1228b99e793a391dcb042d70d
BLAKE2b-256 ea2c9cd6c7a68d0ddb0798dde2b0ac542cea9b4b1c2a983bb28246602515c018

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 2917c9a385af59d7297a78538411a3853d1c280dc435f041e8dd2ff074054305
MD5 21197e8968605c6791cfb7351ec57143
BLAKE2b-256 f567ca68069b720c3a16bae844edf125cb0cf9d75bd7191e7f54750c0b94ce20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c103c0da94c1472feff09a9099f90e04bdbd15fecae3e5f151b6ae05a2a236d0
MD5 4ff46fb7911e823aada6ba52b8a8b589
BLAKE2b-256 fb7595eae6be564d7e8f42c82696fcd6f5ba497c142d862eda93d6af55db7dec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f6e90c06bd825a00bcb3a8ce2fdfffc1918eeaa861c669f6e16afc4faa2cd1a9
MD5 f124a64ba299a7c3fe37cdb66b173711
BLAKE2b-256 1a8569483cd610d81dc2e86fe606d09f83368d1a03fc6c446e24f6585271884b

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ba1191142b29250680b0efab95c71a2f31f8e3ae2540701ab1ac2d409b522ae7
MD5 0fcb7e134b1cf92d56c9209ae42d7227
BLAKE2b-256 db3f1b5420d230098a18f58005afb12f3138d507a94b2d8ee415f8245daa53b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 14d81579a72d7c60777dd2e594600fb55f5ad64c77843e92bdef52557ddb3ef9
MD5 2812afe5143cdf579a9268beabd4ebf3
BLAKE2b-256 154f1b8f78b74aa13a7482b66357e626f4a9fdb23fa22b418c7785548976f678

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 fc31e81dd0a1491d11fad20bbbdedd2710bc8e0b691bd71fe4ea2a2dcfaa71e7
MD5 e4c4f09eb8799866f67f6a8922e54c4a
BLAKE2b-256 b79b2909c42d73d55d4a45e79b89ae7b6b93de61dd26734b78ccdf304f76a960

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9fb2e6360de604602c79ff956449f997730459dba80003ff66054832d35ef1c6
MD5 1a3a121ed4d4ad4004e16e9aa3736e8b
BLAKE2b-256 d5bc4637aa66cc02ff9b1129728f58b981aa51b55bd9f81fd0205f8bf6d51219

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 340181564ee7e4ccb2666be80921816e56ffce32dadd19928ac0bcf2313a74ba
MD5 039d3efab1fe2b7a7e332f86b74fd7e3
BLAKE2b-256 0c0af11521a2d30c563946ae6d41c867b20b128d31ab9023690b3a869d13f8e3

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 530aaa63bf29aa54cb2a03d49d7eb5513dcfb776075dbeaaea3e6ef6f83a2ea6
MD5 84840139af2e06b71fe7f6d389b48764
BLAKE2b-256 6c45ed466ddaa7cb7d8a14139ea8079b22b9256930656f67c7d0e85e3b10cd2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b3286adb8fd72b0032eeb370f3c34f0fb31d274f1e4385c9ed73c904946db574
MD5 efc1496c30a5259eb1b3c303cc0d8876
BLAKE2b-256 df2a143768770aea76f28c238f47752bbb0293697c35da5f1f692fdfa9de072e

See more details on using hashes here.

File details

Details for the file atomic_bomb_engine-0.42.0-cp39-cp39-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp39-cp39-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 39aae1464df85d7c67916cc005460a5bd7db39132b641ce8420a8b0b2796d84b
MD5 cba3bfe1c2dff89bd16da12ebb28d57b
BLAKE2b-256 89b98db8fc7fefd947863df6bf75825d91b023cd4314fa3299d5136abb12a029

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c5716c86eec92f73c8f93bcb099259a30f5adf9ce99d555b36290be3c5d120f
MD5 6754cf46b06d93891a34267303b4f6c0
BLAKE2b-256 76b1202f351eb31de4999d08e9a63aee4957bda140e646d2300d82290521c1c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.42.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0522031b9b9dabad15b592cb058c326d396f0bfbbf99c5c0e9ac1f2604cee0e1
MD5 b17e87fa0d2379b5f136c23d9caf5abf
BLAKE2b-256 aecb6226901ad3d71c4f260fe0b82161fc9ebba51d70f455a032a120cc4798df

See more details on using hashes here.

Supported by

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