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统计改为滑动窗口的形式

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

Uploaded CPython 3.12 Windows x86-64

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

Uploaded CPython 3.12 macOS 11.0+ ARM64

atomic_bomb_engine-0.40.1-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.40.1-cp311-none-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.11 Windows x86-64

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

Uploaded CPython 3.11 macOS 11.0+ ARM64

atomic_bomb_engine-0.40.1-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.40.1-cp310-none-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 macOS 11.0+ ARM64

atomic_bomb_engine-0.40.1-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.40.1-cp39-none-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.9 Windows x86-64

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

Uploaded CPython 3.9 macOS 11.0+ ARM64

atomic_bomb_engine-0.40.1-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.40.1-cp38-none-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8 macOS 11.0+ ARM64

atomic_bomb_engine-0.40.1-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.40.1-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 b5d9de34fb0fd2c0eb2d519ae3de25fec0e84b0b7ccf96d593074848c49b6d5b
MD5 e72768af87e86084387f3de1a5140e55
BLAKE2b-256 994f463aff212352590c4b25d31ae918fbdb20e0ada4b8698fe31a0329ea93b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b9f56f3c3654446475cb5bac8de4754be2c740097d3e1a0b832f955e13659a36
MD5 e049bd3be591cd164f3f8e1199a9b87e
BLAKE2b-256 53f9e481b24874fe97c86608b4faafa7be8233ed99a77147921ab83f167004c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 72692a0641e639da2876af0e36f01926bac6efe13b63999bf140a39d7573fed5
MD5 175bdfc1e10821d1ee793640d51f630b
BLAKE2b-256 253596f3b8567c0a1428f57533ebc597596ace2c24961b734c162e0e4ae98275

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76c180016d502606dbf900edeb717a7805369801164c8f4d80b86a4e91514ce1
MD5 3b95166162a28ada636da8fedc3c75a6
BLAKE2b-256 b74a1fd6353fb845cfd817cdfa44e22b0583da77529fb8c749159015fa00a6e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 90817cba248a2b3c427bb1a4f5975218fdab30af8d5bc2f0380899bc8f6de2d7
MD5 7a5c06a3c93fa42a89ad9ef776fdf193
BLAKE2b-256 64236326a2fb953068120ba6b928a1a865d55c13766f1db6a890cb2fbcbddf67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 961036b939dabbd9c02e4fa132e0f2e9970134808c404ba72936dbeb9ca46109
MD5 dd1d91249a82e182596dd14866fc90e6
BLAKE2b-256 22abd7b4f66c1ecac05b4b4b387a06dd2de122711ccae108a3d0ce7d9d6541ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dbac9963eab0b7ff96e184ec7bce62e1396afb65f0e662111c9d20640c65d97b
MD5 97a3f07f22b2575c4e74c468bde54dd8
BLAKE2b-256 bc2723a9b28b0edf1a956bfd14dcff7bd798a98aa85853c2869d66d61257ae85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 159f1de6170fda47d9ba0bef954fd4690b619a5e0b1a30c297aa8e87441aa06d
MD5 5539081d5d079b9853373b8bf5f67221
BLAKE2b-256 87f20fd7fe9443ddc9e39a67236deadc0620d205e5cc9fd816623f207f25ad0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 231c0adf925fd7c68f414db01688f4769cb534b80beefaf12e1ec1b98b426ea8
MD5 c5a628d1f27e1433a22f5dce5cdc311d
BLAKE2b-256 1cc901f6e1132be9145888665535a90e21604c97a20a1428562ff0901279ef0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7c53fb8373c70a27d1cb991cffad69c4e65d5775b9c0a20b55e63419ca4b7f18
MD5 beee6080ad7a55550af576c528adf6bb
BLAKE2b-256 ef2eb39f24b2d520cce208020e68eb804ad92215f887186c1e869e2e74813410

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 f06c3880068b40fdf0719676dac6a9c8d3e50e437b301e125e4416a2cdf1362c
MD5 796a370a781a3a736d7f6be4300a1a53
BLAKE2b-256 21fb322ab6270d27487df968481711ca062051fb1287c97770cd9e0a08d4bfe4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b2687c215123c73f9bbe8ddcf691fca336c4adbbbc8727d34d033047ee3920b0
MD5 af2e2cea9c0c6036083f6846dc5be6b8
BLAKE2b-256 468948cb50335b4c5309568685ba2adf69e2f537f2e5a165a307163a6c795471

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 39b24e0537cce7aaf8502fb3d08912c0499d9d7f620fda1ac2b188af79174d07
MD5 71796b1fc53ab7f4409a3dc72121a31a
BLAKE2b-256 2b70a7b8760c69fbba852909a0fda4dd5b336d0d83d429c90e7810f65c6cf30c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f721702a91a4b906f6a60577c3647fc6ef1974ab6aac39a7b829d95de3d62846
MD5 34cc71548e2c5ab264c610b1d9bd98aa
BLAKE2b-256 ac3b6fc7c3ba46205b419a55a7b2dd5864d5709936de2381919c74b20c9a5231

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e972a39e7dc3bd43a9a945b6ee130de2732216a52ecd40df201dc8a9c642737
MD5 d026ae1756ba0d968976565346510ee5
BLAKE2b-256 a082514d4b820f5822ee5f8db89c7ba1a11be807812c2851c349344f4c338561

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 25b350b77293425ca5028d3bab709a6f92a5af8a627f9e93ae8c78dc275638d5
MD5 e46684d4d340d50f4732f74f6ac982ad
BLAKE2b-256 fabf4efd6dd3128d622825ad00f9482ef64001c6457691278ad77fb271bee740

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 67eca303d99d0e5fc3ebbc6a65c2f53c391f1d288d53f55df839dfd279884ad1
MD5 046dd8bdd5d25b92559b16695a26ea8a
BLAKE2b-256 752d29a47063ce33132c93cbf0e2467306d78cf6263bccea7d3935a54fdbf51e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 19ff3caa23285479e77acfcf42dd9a5ca81352b5ba13379fb7b1b33fa433a6e5
MD5 408007515df276c9e1097648db8a90da
BLAKE2b-256 0efdb4d0724607e66bf39e82f2c514bc8f04f52ef75a0aab5dbbf4c75236308e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f498667cae97605b6db37908ee38717286cffbd768bb7d6fee453978d92a94e2
MD5 4977874de662e3fe315ea2c1c51d45d4
BLAKE2b-256 2f3ed7a4d5edc78210feeb9e9eb15c9b4b149ab1f82996811eb046d45cfb5c5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 56e06c476b7530d2e9a908534b65a6d69f9176a6b8954b67cd5913bfc430e13b
MD5 533960a86beb8814c49bb42db46d3cc1
BLAKE2b-256 ad91eadee47ca4649a03b2d703a1c398503a2a97d9e769576ed63d1e039b3528

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 e76544a2c3a18231a42e860ece673d51fed9993069745dcaac390e7a66fec08e
MD5 9ff8c5f54acec3ca236be748db721843
BLAKE2b-256 03c18ca1136e3b791d028dcd049bd02956c464851e0d346f79270f65d779bec3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f22cebe7435ee480c43a7f478d5d26879ee2062e34a7244c05265594325733f4
MD5 dc2cc337db2fdf58b34a96de79508a64
BLAKE2b-256 16d2fb813c030fa0cb9c7bfde4c3cc765b2006c1843ae20a0788be4b3f211b01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5a665bd2f540c54413844e0b64d135fdac3faef8fcac13af1149a78c962da2fa
MD5 ebb7695a4012f700284da4439e263df0
BLAKE2b-256 2132e6b7dcdc704d860aa68d4bd40a8596a80b345befd410b4d225248178e27e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 69d2c4545013e9da5747606968324df6eb7fc83c079e56a52868d5d846f97028
MD5 908124bc4663ce8e419ed631411af4ab
BLAKE2b-256 431272e7d6a53350ec3f393f811ea767906aaf7e66a5af706a1fe32e5a3b6ce0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.40.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f458db8a3eaca6d1ebd6dd1e779545b49f80490afe0c33223743133b15d0444f
MD5 b34fc74303fa61522f9fb27f393d3b8a
BLAKE2b-256 ef370e1c8df4ff06f24d9a00c2a91bd46baabe2870da4b11463d4c1cf5a2fc93

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