Skip to main content

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

Project description

atomic-bomb-engine-py

atomic-bomb-engine的python包装实现

logo

前端仓库

atomic-bomb-engine-front

使用条件:

  • python版本 >= 3.8
  • windows(x86), linux(x86), mac

使用方法:

  • 准备开始

通过pip安装 (0.5.0版本之前)

pip install atomic-bomb-engine-py

在python中引用时注意,需要引用atomic_bomb_engine, 而不是atomic_bomb_engine_py
为了避免混淆,0.5.0版本之后,pip更换了包名,更改为atomic-bomb-engine,

pip install atomic-bomb-engine

在python中导入

import atomic_bomb_engine

异步使用的时候,还需要引用asyncio

import asyncio
  • 开始压测

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

    • 多接口压测

多接口压测可以使用batch_async方法进行操作,函数签名和解释如下

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

使用assert_option方法可以返回断言选项字典

assert_options=[
atomic_bomb_engine.assert_option("$.code", 429),
atomic_bomb_engine.assert_option("$.code", 200)
])

jsonpath如果不会用的话,建议去jsonpath学习

使用step_option方法可以返回阶梯加压选项字典

def step_option(increase_step: int, increase_interval: int) -> Dict[str, int]:
    """
    生成step option
    :param increase_step: 阶梯步长
    :param increase_interval: 阶梯间隔
    """

同样的本包中也包含了一个对api_endpoint的包装:endpoint方法,方便调用,endpoint中的assert_options中也可以套用assert_option方法

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

监听时可以使用BatchListenIter生成器

async def listen_batch():
    iterator = atomic_bomb_engine.BatchListenIter()
    for message in iterator:
        if message:
            print(message)
        else:
            await asyncio.sleep(0.3)

压测+同时监听

async def main():
    await asyncio.gather(
        run_batch(),
        listen_batch(),
    )


if __name__ == "__main__":
    asyncio.run(main())

压测时使用ui界面监控

0.5.0版本后,添加了ui页面,支持批量压测方法
导入

from atomic_bomb_engine import server

使用

import asyncio

import atomic_bomb_engine
from atomic_bomb_engine import server


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


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

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

内部架构图

architecture.png

[0.19.0] - 2024-04-16

Added

  • 增加了初始化和参数模版功能
setup_options=[
  atomic_bomb_engine.setup_option(
    name="初始化-1",
    url="http://localhost:8080/setup",
    method="get",
    jsonpath_extract=[
      atomic_bomb_engine.jsonpath_extract_option(key="test-msg", jsonpath="$.msg"),
      atomic_bomb_engine.jsonpath_extract_option(key="test-code", jsonpath="$.code"),
    ]
  )]

上述实例展示了如何在初始化的时候调用某个接口,并且通过jsonpath将数据提取出来,保存在全局变量test-msg和test-code中 提取完全局变量后,就可以在后续的api_endpoints中使用

api_endpoints=[
  atomic_bomb_engine.endpoint(
    # 接口任务命名
    name="test-1",
    # 针对每个接口初始化
    setup_options=[
      atomic_bomb_engine.setup_option(
        name="api-初始化-1",
        url="http://localhost:8080/api_setup",
        method="get",
        jsonpath_extract=[
          atomic_bomb_engine.jsonpath_extract_option(key="api-test-msg-1", jsonpath="$.msg"),
          atomic_bomb_engine.jsonpath_extract_option(key="api-test-code-1", jsonpath="$.code"),
        ]
      )
    ],
    # 被压接口url
    url="http://localhost:8080/direct",
    # 请求方式
    method="POST",
    # 权重
    weight=1,
    # 发送json请求
    json={"name": "{{api-test-msg-1}}", "number": 1},
    # 断言选项
    assert_options=[
      atomic_bomb_engine.assert_option(jsonpath="$.number", reference_object=1),
    ],
    # 思考时间选项(在最大和最小之间随机,单位毫秒)
    think_time_option=atomic_bomb_engine.think_time_option(min_millis=500, max_millis=1200),
  ),
]

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

Fixed

  • 修复了如果http状态码错误时,不会记录
  • 修复了json反序列化的问题

[0.20.0] - 2024-04-17

Added

断言更改为异步生产消费,提升性能

bug和需求

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

[0.22.0] - 2024-04-18

Added

前端进行了性能优化

[0.24.0] - 2024-04-22

Added

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

[0.25.0] - 2024-04-23

Added

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

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

使用时在endpoint中增加think_time_option参数

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

[0.26.0] - 2024-04-24

Added

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

[0.28.0] - 2024-04-25

Added

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

[0.29.0] - 2024-04-25

Added

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

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

Uploaded CPython 3.12 Windows x86-64

atomic_bomb_engine-0.33.1-cp312-cp312-manylinux_2_34_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.34+ x86-64

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

Uploaded CPython 3.12 macOS 11.0+ ARM64

atomic_bomb_engine-0.33.1-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.33.1-cp311-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.11 Windows x86-64

atomic_bomb_engine-0.33.1-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.33.1-cp311-cp311-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

atomic_bomb_engine-0.33.1-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.33.1-cp310-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.10 Windows x86-64

atomic_bomb_engine-0.33.1-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.33.1-cp310-cp310-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

atomic_bomb_engine-0.33.1-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.33.1-cp39-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.9 Windows x86-64

atomic_bomb_engine-0.33.1-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.33.1-cp39-cp39-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

atomic_bomb_engine-0.33.1-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.33.1-cp38-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.8 Windows x86-64

atomic_bomb_engine-0.33.1-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.33.1-cp38-cp38-macosx_11_0_arm64.whl (3.6 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

atomic_bomb_engine-0.33.1-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.33.1-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 ffc2ea3744bdaf214ef54da36c3d020c02bbbe6a520c5d51e04484b815bd410c
MD5 9167b1842a71cf63a5eadb66dd9ebf50
BLAKE2b-256 2cb0fe78e48ae6f29fd1b199db265a2ea6db96b037933e000bd1c47a12e8839a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 dd97d136653aee446c33963c4cc7737867367b9c6d96cef09c4c3556baf0fca1
MD5 bc43a97e6ff15c21217d1c037fe9c1aa
BLAKE2b-256 347940dd304f5ef70a332c3881fa411ea07f047c883963ed658d5a0b3e378325

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39b38549101416d89fce0b498782a954df571d71acc6726b276bd5051a932b7b
MD5 220c5f46c8b65f8482c0f8a763c0d343
BLAKE2b-256 c8bfad8a7a2397cb184f0aef3b77d7100b4556038359f59baa60165996c285df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d996bb7360d8be52ad7347924c0b56fa1d16c5e6da51b57eb14ead2d8a6ff02b
MD5 6259b1153bdfa512b572e538a5e3d856
BLAKE2b-256 6ae23fe2cba6053fb173ab824a3265c5575f9284017355df91e75b3efe1a5135

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 1cea865a502161b43e4bcdc395a503471c0cfe5bc85c7d56b05b1a68ec2256c3
MD5 b5b9c234c2cc9136a248f8f8e63087dc
BLAKE2b-256 65ffe23361e8a752407668e6fa0a3dc41ee265c9c96d5fee26690eb18f930781

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a5039da230fa1352717d3e259a7250f8de702916d87f965e3b56b65b0ee39ae9
MD5 1dedd068692a8009f7ed5d2c6d78981a
BLAKE2b-256 dab52c78e4fe97f5e5523cb1c4de6ff087e8b2e20afcdcff029d0ed68273757e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 12e04efb533793b603168fa04d792e80b0460a89cee2a8d7d2f8705e0e0f3fcb
MD5 7c49177c66776c4b71535a3983182584
BLAKE2b-256 496a7047a501c242ce05a126095738e9789d099f89e048859973d5207a87d9c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3aab2e2a2ac2f91d098d4b2e58381c5cb33eda86e1f8d201e8b557e73d770da6
MD5 7f355c51d2c9aa473c4873c82ebd5d1d
BLAKE2b-256 1f1e9d89368a7d16dee5fe348f111adf7b369b46c860d51704c1688240952a8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 69fc05978fbc1517dc1fe573e4728632d4387bf2748f619da93c5d0005d82ebd
MD5 53d87d6643a326dd6d6bee47b485d88c
BLAKE2b-256 3aa04d94308aea12dcbf92296616041b32d6d029c8fc555cac2a652ccbf666e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6f7b5be56d9eda1f714cb30e6461884a9fe7b9b48ba0668e3798082df9508acf
MD5 ed7b7c4fadf764d548ca7b16f6a2e267
BLAKE2b-256 69f5ff05a1d0b5aef76d4593fd50d56b00ce39a22557568d521e182ea78d2db6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4573b9ffbc08481996964436ea189608360fa6a5a2ea76e53a3c2658af1cae9f
MD5 1dffc3eab7be14358ceaec0839078626
BLAKE2b-256 3fe52945b956031ff2e59681a1970e0caeacb24d85cba08f7bb2f660d8bc2549

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f37da4b1e9d47ba39fd7871408854482217dbf5792c837b1ae706a42e60747be
MD5 f1000b898a9918d618cf49544173762c
BLAKE2b-256 af18637b41b9eb083ac5946b6e3bccaa8f7ce8096385015ee422055c2bbb5261

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 6a0822908dcfe73200ec7824eb925040163797be05545314b4ab494a7f0437a5
MD5 586b3298a5ee0471095039ce012b68f1
BLAKE2b-256 9fff4dba142ae50fdd1a27d327c900fba0ec46800bba3832c661962498a31bf7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d0193b0dc83c8da5cf2b9d7805180761e78825be60e01189f4b230b958593914
MD5 5c55033a32369d4cce207b98284d9c59
BLAKE2b-256 b1ed90a655289e416e3d7b97d040eb17cfce7524e42257819994d5f963c37ae4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 31469d38e2c2285df85c4706f044bdbe6ab2f91e513222d5dc71b33ee2d7133e
MD5 6031df98bfbc467ec02b2386575e04e4
BLAKE2b-256 1473ef3f3bc1ed0d0f30da9ebf08697c0c79cb9c0d4974511e406e7348f5cfa7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1d3e5480821d07fb43ab618d3781824d54f80fb09bf28f156c4d4b1dbae83a42
MD5 e4cbcf0afc85d5ac68a1b1dc7edfe131
BLAKE2b-256 ab4d6034acd90ee45eda456810b546c42ed7bcef9d87a2cec1fe0b95171e5c84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 c1a08c58c1593cb85a21147188f82234b2cb8aec8eb2f05351b19b9386d4fcc1
MD5 64204f9d23a36b0431f41df06556c0b8
BLAKE2b-256 f6a6a976c362bb1d12d4151daacd9a1530f354b7d774aba7dbae65e4ad6bf288

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6be26431d7f4ac20dcdb60667cbdd6e7c983d4588c0dd171ce3519268d44cd61
MD5 330a131a067710ebfc54461e7bb5df43
BLAKE2b-256 988f743b1e72ff821ef45b446a5db72fd3de9677012f6b24a3e3a79602cd279b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f098df7a0e6e449393051d889cc40d97d11ef8b87c0e54d9d7ef0e770340447
MD5 ba97921b52658d1628efee7ad601f8de
BLAKE2b-256 92886a0de65c5c31bcc5f28b7ed79b62bc88acf5b2c6449719ab126a0764be6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.33.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 113687c48717eff35b6a0610b6feffcd2e4e8914e623d4789b4de050551cf24e
MD5 ccf622925c4c67a1ba63ca7fb30a2064
BLAKE2b-256 ad865187c8bafb6af23aba00324d87ec3e27cf91e3f159fc722b8c1f8d37a2c7

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