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

Uploaded CPython 3.12 Windows x86-64

atomic_bomb_engine-0.41.0-cp312-cp312-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.0-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.41.0-cp312-cp312-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.0-cp312-cp312-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

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

Uploaded CPython 3.11 Windows x86-64

atomic_bomb_engine-0.41.0-cp311-cp311-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.0-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.41.0-cp311-cp311-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.0-cp311-cp311-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

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

Uploaded CPython 3.10 Windows x86-64

atomic_bomb_engine-0.41.0-cp310-cp310-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.0-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.41.0-cp310-cp310-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.0-cp310-cp310-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

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

Uploaded CPython 3.9 Windows x86-64

atomic_bomb_engine-0.41.0-cp39-cp39-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.0-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.41.0-cp39-cp39-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.0-cp39-cp39-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

atomic_bomb_engine-0.41.0-cp38-none-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.8 Windows x86-64

atomic_bomb_engine-0.41.0-cp38-cp38-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

atomic_bomb_engine-0.41.0-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.41.0-cp38-cp38-macosx_11_0_arm64.whl (3.7 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

atomic_bomb_engine-0.41.0-cp38-cp38-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.8 macOS 10.12+ x86-64

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 9e23fa88bd99ad905eeb85194784d8a2a771190a593edf387294c9e0a6962e50
MD5 43c4ca0be869214864f75e560b0ff0e4
BLAKE2b-256 5b8137bff600243d83f86ee97b76c1f5f7a8256674809db4588ff38e7e8f2053

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6663ad6f41f5bf80118e639ef52adf635318c32344581c1058a2a80db26d87b4
MD5 de7eba43e6eb7f179c2b2e53374ca5a6
BLAKE2b-256 bbf6d5b596fe1e908b45a20917ecceaef9ac03961cdbec405a9977ada46270b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5242ded1c6574d26f977e0aa090e020a2f280bc36300157968175324f31ccfd9
MD5 d821995e77020b979e89f77bdc403c57
BLAKE2b-256 4f2ce8ca26cb3d0459e78efbfb401dfb904ccc49ae581b8ddda32ed50d867608

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4a3a70d4c7ce92e58ff7b7cc1df6c7d7510721fa8ff556a46afa4c3ff6e390c
MD5 c2742948a472dde623a4265774a66f37
BLAKE2b-256 7cd0255af036ef80e366a06edf118e64ccc7c39a6feba00af66505f037658435

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 16bb7f3c9b08e618691ce63b15e8b00a18011998ac4dd4fa971d4c08be5d7f2d
MD5 dd73d075d86926e17b2840705ee19c34
BLAKE2b-256 d8c029c31fb03e798ff1eff242b6a97cf4706b6e0c6324002de5f81ad1540309

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 2cb92509230d2f539fbe9125bbaf09ae56ceca4ebf71757a417d1cd31dbc516b
MD5 778fab30d65ae9e8ee1285cf7456f3e6
BLAKE2b-256 8cae4660e7deb3432167859f8de3d01277169606a666e0411ad52d7fc2227ee1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 60f1883928511a6ec3c7b7afbe9fe20aa29a6a6c98629a62ec1c3b5e2a41bb24
MD5 6082c313ca50801af83162ed0be0eea2
BLAKE2b-256 ca488a0da88a804bf283eec72eb71f5bcb18c6ee3f6009dc4c18cffcc782be27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 261caa5aed5be2afe11c98052e668ceae2e5f73c56f69659674d1598d566c712
MD5 27a56e132283aefe78d5de4e3ccddc56
BLAKE2b-256 56ad116db80b7b354a17bdf4637d76e99b8c244574ecfe26bcf8d1f963d7183b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f765bb3e0939dfd765817aa7834eb108798b8a971c5e3636cc39b46ddf8ca644
MD5 d5d391659f256d1e46cfeb5ca44f48d2
BLAKE2b-256 a47313ec8ba0f272222600b739c03302af93371a50c71cb2a31ee87e70c31d83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c494e58edea4248fa5e6960769f998734ec0764b2a3d4308a8436b36afde6dea
MD5 89fcaab39cd4f22aa83a2673e945067f
BLAKE2b-256 31e9aa5401a2f00b6c94bba1b9c8489b9b5773bff3dba11b39609699feb84604

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 453fcc8ee4d3acdd1e7d54e38dd188d77709ba42116507874786d0bfdb5be4a6
MD5 68f5755310df63772f51cb76108e6d9c
BLAKE2b-256 5c03b7223b6fffd912da28e45328ca3eec1068ae62f6c2dd679a8267a1979441

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2b944b13e80015b7b3a9fbe86b831fe21d37387bc218d6383e79f0492498e498
MD5 98a7d1ad40f0f224b282ea6a05eb9ebc
BLAKE2b-256 cc9065267dcc1cb91848d0f771e7ad1a20aaaa0bbe6e45a865c4e74636d90e78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5e7fa09b7fc0ea5ba087c97a0fee677be001d6c71d35fcee71b0fdecd696f325
MD5 56088f9cb3d082c6b18297c898533d30
BLAKE2b-256 2bad6f849c8d3be81fd63883999379ae76f31f1a5ccb9988ddcf0b89c13c4fb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e6ee0f91939c1dcdffe2949a290076662cd579247daaddaf589ede32b84d4f6e
MD5 1d029c8280402ce473563d493953b458
BLAKE2b-256 cf5366e2c6ba36312b17276e19d3da48889117c0ab2f9322a81622adc4e2e232

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 95275b75ccb56dde318c9a9f837b53342bf1ab373f4cf34132b582b29778b24b
MD5 ff399aff0445873fba08ebf90f08e8de
BLAKE2b-256 7a508d326746346b4c7782a6f5bb035041ebd826df3b8b0ba7d8b593bce8600c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 05f5481df600e06d975833335f0e5040832b4b19b222000d881262726b6394b8
MD5 aaec767ea96b3af1837525d0ff021761
BLAKE2b-256 52ba1b6b5d0b7fad85f76fc7215680ec76429984d29c9afd4ec99301da67f96f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 74012842106f45bf575644948d644b13e4fb85ece8ef6156513273d1a58e3ede
MD5 26d28a29472a2cd8122f6196e0f9c091
BLAKE2b-256 12e08550be71f542450a08ad572808e6e15ba5f3ace72795c1d33344b381d7f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5ea220ebfe816d579a44839bcf0f2bf3840fd512ca52a2722eabe2df80fbab3f
MD5 86e3102e662d4e35c046c977439cfd35
BLAKE2b-256 4b99ba0bf6cab482b73f8dae9b7a14657f595665b1037bbc198e99c4686b92ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 038d2c3e511b68ade03dda2e80570314e377157ae901f07c2d16b74d2e0010b8
MD5 a946576b4bb71e65d2730f2139392701
BLAKE2b-256 663eac4c156e84ddd130efc9815ec527e3576d4c65753e0f5557896a2528dc04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c19c5b458b51ff1c5d2a2e870c2a469e14e82c159b64c1a281b33ad37672bd52
MD5 108b3e2cd2dc5c056b5e0fba96a76e17
BLAKE2b-256 e6328de9d7f91b0a3758fb8e8aab79d2b2866575bc9b8392fdd5035d56ea1bbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 66db33f22d78500a1a711ba7d55cacbeefb5379db71340a3b1ebf4d712ffb92a
MD5 d1eb9edfbc272b5822651700e64c3f5b
BLAKE2b-256 c3133743506d41cf3cd356a767ad454c01aa5021b88e146409c7dc243320fa00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cb023c074c43b6615d7bb64bee52a0ed2b2e00a0ad74ffd318c10092e98a7328
MD5 0ee59cc2413d4039a2d8bb8c8e964ad8
BLAKE2b-256 652feaceb05ee0b4910522dd685011ba6900bd061ff452718638f2ca3300c4b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f72b889b5e1305844247eea46a8d8e101e1b0413015a865327fe548aaf215710
MD5 95efe43fe03ec1a3728de363ff9a649d
BLAKE2b-256 15c90abbffc83adb53b34dd64272f736f618325a960a54578154a788ee6e272e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79c7e03354a7e1ed6af2f0fcc66ca3b69db21569b82e60c77998d5545f599871
MD5 ada105ae688c410f01c003944b8bfa50
BLAKE2b-256 91a646a175ef58000f8b6a240bd9842bbb9f30d3e993d5cd1f914fbd42eed13b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.41.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bb6282073aa1107b998e76034bdd99fe2819caa15aa809ab5e917d6936cc2767
MD5 2f701f1773c9a2001c69e6acae7f0eae
BLAKE2b-256 4f002d0c5ac20fd6a9b596f570e83600055fa8ef1d7f265703a7ecb7807aa735

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