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

Uploaded CPython 3.12 Windows x86-64

atomic_bomb_engine-0.35.0-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.35.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.35.0-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.35.0-cp311-none-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.11 Windows x86-64

atomic_bomb_engine-0.35.0-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.35.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.35.0-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.35.0-cp310-none-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.10 Windows x86-64

atomic_bomb_engine-0.35.0-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.35.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.35.0-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.35.0-cp39-none-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.9 Windows x86-64

atomic_bomb_engine-0.35.0-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.35.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.35.0-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.35.0-cp38-none-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.8 Windows x86-64

atomic_bomb_engine-0.35.0-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.35.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.35.0-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.35.0-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 bfd89f686656ca5b2d6a35402e2addec3f00e6bb296401e6c897ebefa734b16a
MD5 7956e580d305434b13ea515cdbe47688
BLAKE2b-256 e6a7a66913b38359060895c1ad30f058ea4f40ac5d02bd32a5db58b77786195c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ffc39d7bd90ce6378b60c6f969a03563ffcf2982abc4d1d666fc4b9039e3c63a
MD5 5791d65742d2774a51c934d108caba3c
BLAKE2b-256 aabbb4eede40db699de6e62e6056be89ead9c25ebe6b124655775d73b5bc6d1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d57bb9f08d74e2536ea53a7def3fae0b767488538458b87e8fb439247fcc11ea
MD5 5f845fdde11647f4d8aab8d852c50812
BLAKE2b-256 7f6bc4414b53123912858269b6ddd4397f7e2c01f13ef7906bd1c3aaeb94b175

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3f651ab17a0f153081687457c4466867a8d73d920c334961138889f1acb11e44
MD5 16b5b1e015ffebf5dbf95249dd02a474
BLAKE2b-256 e30e07129937d483c6d4c5484b4a9d703579d6f77a1099bbc33434980bb667fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 00bf0c32ea819feb61a08c07edea9283838d77575fe001e57d8cb32169e7232e
MD5 1c5f32eea40cbd73d601ea8913c4e6c1
BLAKE2b-256 3b65b347c053404e6e34ac8f7d57fada9656f4bd76ff66b411cfccb764a2a91c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 effa227898c9f9430dfd55b3f26fc7be0ff29924af1f2d56b2c0db078e987aa7
MD5 4e2b7eba74a98222df0fe15f7d943a32
BLAKE2b-256 9755b2428a637fa3c589e94e8c03aaa0d4330d4be72f9f897d609dd5fc2559be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 17f764aa2b4f940838083f5dcb48f8c5367fd6e9208a8bf6649d06b1f47dc43f
MD5 c9c7ee8b83ab7e551d8924dd30a5d99b
BLAKE2b-256 0c44f2736ef3d9b60bc1260f17a50eb2d569f2407b1b14b655efbd0d70824bdc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7581f478e2aa5110c5c9a67299d8f4ee90a3cd513f994b7787f4541676dac194
MD5 cf3a3b368e72b0166277572bd01bae7a
BLAKE2b-256 639f64c7c71a5da53d8ed48d365a04637d29b7cc2b48c571328d13e0ddb3d1fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 723125b6b2b96c8b7c1628c765f43dcd6b7d2fbc44b24f0e7fce90e230765a36
MD5 c49558069c3ad7ca4e11bf3b4e687d0e
BLAKE2b-256 a9f994b71d277dc771b86be7ebbd7cf55d105ec6302f36be6261ca3f36de5c2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5dba65968b3cb4c41b66ad2a16db5ce5722f88bec4d67332cb720c009112faff
MD5 8381d90e6cdfc5a2e7d2427257484aa8
BLAKE2b-256 ee260dc2993e9cda0683ca3a08b5cd55452bc39827a1e9e037453960693b3074

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5515f5661bc9697fc87c800960574299e3e790ceea78d7e1a77410251132e762
MD5 73e14f4a219d145dffb0b2997bed4cb4
BLAKE2b-256 a48f0062bffd40f38a09c88395bcfd89c3de9bc6abddacd98a393daa4608d789

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5888923294689f7c4a637c0f890ce03088160c33a65101b352ddb3001606f968
MD5 9746afbaa7b9363d49a789d5c34722e1
BLAKE2b-256 56dbf13d2ad4a158853b47b1890cc3eaca3dec5314aebe258211e8a0f4ccdedf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 6a5b1f7b1dec9d8479ed68574ce28990b169c9a121ee9f9d2b94a5d917c4c12e
MD5 aebb71860d9645e655c2d728d3f001ef
BLAKE2b-256 f2b8410eeffe99d51823f476cfa7e893e4e0f0277610ee525d69ea9fdc8d55fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d43dd0469d2c14ad52864650383fb4d8c4e7c98d897d165d2fa2f4b814c23425
MD5 703e778c46b7283a4f3e0bf6bf7cba4b
BLAKE2b-256 5c6f54ebf98aa3676eacecbb54ef48fd8291c62fb3e56d7ba7a891c97f085f53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1a9ec410616805bf2a48268900cf2022bb1e07025121f141877939d6e9bd37c
MD5 1ab982e10097427fbbd5379a2eef63c8
BLAKE2b-256 1f387f952581dbf49d5af300e400db4ef3bcd4c636ea4fa57638c9eca7d1a6ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d7a0bffdb87fb4c0c0b2e69f7a84b4d728e05b0c5ebd42f1da11f24ddf873661
MD5 e5b81a96490cd8e9d6e30e5f86d25ace
BLAKE2b-256 430caf0014e416907176bbd904797a35d9faef1be0ba798dd6f2f9e1b074af9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 33491b2af296ed785ce523192f9435a8048b6250587d0d0935fb70dc953d7805
MD5 f0564f2af3ffa4b73240560ce61802a5
BLAKE2b-256 1534e0eab0cecf5d2ba23d6fb9a1d6c496c3103f1164533df28ae9103fe20bca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 329ec36b3ab785d69e966bada3dee11dcc99c23761663377b5d3b5d448224467
MD5 f13253e76a1232c06dbc09e7c3e53b6f
BLAKE2b-256 4011680826d9d892f70863444b317247ef228ec1a7ac283a49ba04f5cfd57d7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4f65e8770bd02ef2967479cc84870f8ef85275b9fc4ca22360ea7b96dcd1d110
MD5 8bae379843fdff9595b64cff9036d782
BLAKE2b-256 7956660c3f55220e9048f2d0eb32b94588ed0fe0a6389bcbbe74fa97a2ebf781

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for atomic_bomb_engine-0.35.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2774f41ff0241a4f5751a380ae61d9a76e5fedd826695de0cd0d14c744774b86
MD5 a6c0c40bc83ed1339cef2f6394cbbd86
BLAKE2b-256 ceff58a45f652a277f313d2c3651a9341f5658c593252112f6eefee5c4c02195

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