hyperscale


Namehyperscale JSON
Version 0.4.2 PyPI version JSON
download
home_pageNone
SummaryPerformance testing at scale.
upload_time2025-02-22 16:35:36
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseMIT License Copyright (c) 2024 hyper-light Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords pypi cicd python performance testing dag graph workflow
VCS
bugtrack_url
requirements aiodns aioquic annotated-types attr attrs certifi cffi cloudpickle cryptography msgspec networkx numpy orjson psutil pyasn1 pyasn1-modules pycares pycparser pydantic pydantic-core pylsqpack pyopenssl python-dotenv service-identity typing-extensions uvloop zstandard
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# <b>Hyperscale</b>
[![PyPI version](https://img.shields.io/pypi/v/hyperscale?color=blue)](https://pypi.org/project/hyperscale/)
[![License](https://img.shields.io/github/license/hyper-light/hyperscale)](https://github.com/hyper-light/hyperscale/blob/main/LICENSE)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/hyper-light/hyperscale/blob/main/CODE_OF_CONDUCT.md)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/hyperscale?color=red)](https://pypi.org/project/hyperscale/)


| Package     | Hyperscale                                                      |
| ----------- | -----------                                                     |
| Version     | 0.4.2                                                           |
| Download    | https://pypi.org/project/hyperscale/                            | 
| Source      | https://github.com/hyper-light/hyperscale                       |
| Keywords    | performance, testing, async, distributed, graph, DAG, workflow  |

Hyperscale is a Python performance and scalable unit/integration testing framework that makes creating and running complex test workflows easy.

Write and orchestrate workflows as Python classes and decorator-wrapped async methods (called <b>actions</b>) using clients from Playwright and HTTP3 to GRPC and DTLS-UDP concurrently, connect to over thirty one different reporting options, and execute your tests the same locally and distributed via an intuitive CLI. Test execution statistics and performance are displayed via an intuitive terminal UI allowing for real-time feedback.

<br/>

___________

## <b> Why Hyperscale? </b>

Understanding how your application performs under load provides valuable insights, from catching issues with latency and memory usage to finding race condititions and infrastructure misconfiguration. However, performance test tools are often difficult to use and lack the ability to simulate complex user scenarios. As a <b>simulation framework</b> Hyperscale is different, built from the ground up to facilitate multi-client workflow-driven testing without sacrificing developer experience, speed, or effciency. The Hyperscale project follows these tenants:

<br/>

### __Speed and efficiency by default__ 

Whether running on your personal laptop or distributed across a cluster, Hyperscale is *fast*, capable of generating millions of requests or interactions per minute and without consuming excessive memory such that running in modern cloud environments becomes difficult.

<br/>

### __Run with ease anywhere__

Hyperscale just works, requiring no additional setup beyond a supported Python distribution. Options (like ready made containers) to make running Hyperscale in more challenging environments easy are readily provided and maintained, but never required. Test code requires *no changes* whether running locally or distributed, and CLI option or configuration tweaks are kept as few as possible. Hyperscale embraces carefully selected modern developer experience features like starter templates generation, includes useful debugging tools like one-off request/response checking and IP lookup, and enforced a minimal but flexible API. This means developers and engineers spend less time learning the framework and more time making their applications the best they can.

<br/>

### __Flexibility and and painless extensibility__
Hyperscale ships with support for HTTP, HTTP2, HTTP3, TCP, UDP, and Websockets out of the box. GraphQL, GraphQL-HTTP2, GRPC, and Playwright are available as optional extras that can be installed via:

```bash
pip install "hyperscale[<extra_here>]"
```

You can use any installed and supported client concurrently in the same or an independent Workflow, allowing you to exercise each part of your application's stack to the fullest. Performing non-test work to accomplish setup is easy and only requires writing a workflow where no actions specify a client response return type.

Hyperscale offers JSON and CSV results reporting by default, with 29 additional reporters readily available as extra install options. All additional reporting options utilize the same config API and require no additional boilerplate. Specifying custom metrics only entails specifying the `Metric[T]` return type, and all reporters support customer metrics just like the default metrics Hyperscale provides. Writing your own reporter or client is as easy as defining
a class with a hadful of methods and specifying a few return types.

<br/>

___________

## <b>Requirements and Getting Started</b>

Hyperscale makes use of the latest and greatest Python features, and requires Python 3.11+. We also recommend installing the latest LTS version of OpenSSL if you wish to perform DTLS UDP testing or run tests over SSL encrypted connections.

<br/>

### __Installing__ 

To install Hyperscale run:
```
pip install hyperscale
```
Verify the installation was was successful by running the command:
```
hyperscale --help
```

which should output

![Output of the hyperscale --help command](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_help.png?raw=true "Verifying Install")


> [!TIP]
> Hyperscale has been tested using and fully supports both `poetry` and `uv` package managers. We strongly recommend `uv` for its speed and ease of use.

<br/>

### __Running your first test__ 

Get started by running Hyperscale's:
```bash
# Note: test.py can also be any other file
hyperscale new test.py
```

which will output the following:

![Output of the hyperscale new test.py command](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_new_workflow.png?raw=true "Creating a Workflow")

and generate the the test below in the specified `test.py` file:
```python
from hyperscale.graph import Workflow, step
from hyperscale.testing import URL, HTTPResponse


class Test(Workflow):
    vus = 1000
    duration = "1m"

    @step()
    async def login(
        self,
        url: URL = "https://httpbin.org/get",
    ) -> HTTPResponse:
        return await self.client.http.get(
            url,
        )

```

Before running our test let's do two things. First, if on a Unix system, set the maximum number of open files above its current limit. This can be done
by running:

```
ulimit -n 256000
```

> [!IMPORTANT]
> You can provide any number when setting the file limit, but it must be more than the maximum number of `vus` specified in your `Workflow`.

Next, let's verify that [httpbin.org/get](https://httpbin.org/get) 
can actually be reached by running:
```bash
hyperscale ping https://httpbin.org/get
```

which should output:

![Output of the hyperscale ping https://httpbin.org/get command](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_ping_httpbin.png?raw=true "Checking httpbin.org/get is reachable before running the test")

Awesome! Now let's run the test by executing:
```bash
hyperscale run test.py
```

which will output:

![The hyperscale run test.py command starting a test run](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run_start.png?raw=true "A test started by running the hyperscale run test.py command")

Hyperscale runs a independent "worker" server on each CPU core and uses all available CPUs by default, so it may take a few seconds while the worker servers connect. During this few seconds, Hyperscale will let 
you know how many workers have successfully connected thusfar:

![Waiting for worker servers to connect](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run_connecting.png?raw=true "Local worker servers connecting prior to starting the test run")

Once the servers have connected your test will start, during which you will see both static test-wide and real-time updating run statstics:

![Hyperscale running the Test workflow](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run.png?raw=true "Hyperscale running the Test workflow in our test.py file and displaying live statistics about the test run")

Live-updated statistics include actions-per-second (i.e. APS - how many individual actions Hyperscale completed, error or otherwise, per second), a scatter plot showing actions-per-second over time, total completed requests, total workflow duration, and per-action total/success/error stats. If multiple Workflows are present in the same Test file and executing concrrently, live statistics for each workflow will display for five-seconds and will cycle between all
concurrent workflows.

Once the run is complete you should see:

![Output of hyperscale from a completed workflow run](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run_complete.png?raw=true "A Complete Workflow Run")

You have officially created and run your first workflow!

<br/>

___________


## <b>Running in Docker</b>

Hyperscale offers a Docker image that allows you to create and run tests in any Docker compatible environment. To run the Hyperscale Docker image run:

```bash
docker pull hyperlightorg/hyperscale:latest
```

then execute commands from within the image via:

```bash
docker run -e COLUMNS=200 -e LINES=60 -v <TEST_DIR>:/tests hyperscae <ARGS_HERE>
```

> [!IMPORTANT]  
> The Hyperscale image runs using a non-root user (`hyperscale`) that has read and write permissions for *only* the `/tests` directory. You <b><i>must</i></b> mount the directory where you wish to create and run tests to the `/tests` path

> [!TIP]
> By default the Hyperscale UI is fully enabled when running inside the Docker image. Unfortunately, Docker's default terminal size for running commands in an image causes issues. We recommend passing `-e COLUMNS=200` and `-e LINES=60` as options to prevent UI issues. Alternatively, you may disable Hyperscale's UI by running `hyperscale run -q <TEST_NAME_AND_OTHER_ARGS>`.

</br>

___________

## <b>Development</b>

To setup your environment run the following script:

```bash
# Clone the repo
git clone https://github.com/hyper-light/hyperscale.git && \
cd hyperscale

# We personally recommend uv
pip install uv

uv venv && \
source .venv/bin/activate

# Install Hyperscale

# NOTE: To install ALL dependencies for ALL reporting and
# client options, uncomment the line below:

# uv pip install -r requirements.txt.dev

uv pip install -e .

```
___________

## <b>Clients and Reporters</b>

Below find a tables of Hyperscale's supported client and reporting options, as well as co-requisite dependencies (if any):
<br/>

### __Clients__ 

| Client           | Additional Install Option                                       |  Dependencies                 |
| -----------      | -----------                                                     |------------                   |
| HTTP             | N/A                                                             | N/A                           |
| HTTP2            | N/A                                                             | N/A                           |
| HTTP3 (unstable) | pip install hyperscale[http3]                                   | aioquic                       |
| TCP              | N/A                                                             | N/A                           |
| UDP              | N/A                                                             | N/A                           |
| Websocket        | N/A                                                             | N/A                           |
| GRPC             | pip install hyperscale[grpc]                                    | protobuf                      |
| GraphQL          | pip install hyperscale[graphql]                                 | graphql-core                  |
| GraphQL-HTTP2    | pip install hyperscale[graphql]                                 | graphql-core                  |
| Playwright       | pip install hyperscale[playwright] && playwright install        | playwright                    |


<br/>

### __Reporters__

| Reporter             | Additional Install Option                                 |  Dependencies                            |
| -----------          | -----------                                               |------------                              |
| AWS Lambda           | pip install hyperscale[aws]                               | boto3                                    |
| AWS Timestream       | pip install hyperscale[aws]                               | boto3                                    |
| Big Query            | pip install hyperscale[google]                            | google-cloud-bigquery                    |
| Big Table            | pip install hyperscale[google]                            | google-cloud-bigtable                    |
| Cassandra            | pip install hyperscale[cassandra]                         | cassandra-driver                         |
| Cloudwatch           | pip install hyperscale[aws]                               | boto3                                    |
| CosmosDB             | pip install hyperscale[azure]                             | azure-cosmos                             |
| CSV                  | N/A                                                       | N/A                                      |
| Datadog              | pip install hyperscale[datadog]                           | datadog                                  |
| DogStatsD            | pip install hyperscale[statsd]                            | aio_statsd                               |
| Google Cloud Storage | pip install hyperscale[google]                            | google-cloud-storage                     |
| Graphite             | pip install hyperscale[statsd]                            | aio_statsd                               |
| Honeycomb            | pip install hyperscale[honeycomb]                         | libhoney                                 |
| InfluxDB             | pip install hyperscale[influxdb]                          | influxdb_client                          |
| JSON                 | N/A                                                       | N/A                                      |
| Kafka                | pip install hyperscale[kafka]                             | aiokafka                                 |
| MongoDB              | pip install hyperscale[mongodb]                           | motor                                    |
| MySQL                | pip install hyperscale[sql]                               | aiomysql, sqlalchemy                     |
| NetData              | pip install hyperscale[statsd]                            | aio_statsd                               |
| New Relic            | pip install hyperscale[newrelic]                          | newrelic                                 |
| Postgresql           | pip install hyperscale[sql]                               | aiopg, psycopg2-binary, sqlalchemy       |
| Prometheus           | pip install hyperscale[prometheus]                        | prometheus-client, prometheus-client-api |
| Redis                | pip install hyperscale[redis]                             | redis, aioredis                          |
| S3                   | pip install hyperscale[aws]                               | boto3                                    |
| Snowflake            | pip install hyperscale[snowflake]                         | snowflake-connector-python, sqlalchemy   |
| SQLite3              | pip install hyperscale[sql]                               | sqlalchemy                               |
| StatsD               | pip install hyperscale[statsd]                            | aio_statsd                               |
| Telegraf             | pip install hyperscale[statsd]                            | aio_statsd                               |
| TelegrafStatsD       | pip install hyperscale[statsd]                            | aio_statsd                               |
| TimescaleDB          | pip install hyperscale[sql]                               | aiopg, psycopg2-binary, sqlalchemy       |
| XML                  | pip install hyperscale[xml]                               | dicttoxml                                |

<br/>

___________

## <b>Resources</b>

Hyperscale's official and full documentation is currently being written and will be linked here soon!

___________

## <b>License</b>

Hyper-Light and the Hyperscale project believe software should be truly open source forever. As such, this software is licensed under the MIT License in perpetuitiy. See the LICENSE file in the top distribution directory for the full license text.

___________

## <b>Contributing</b>

Hyperscale will be open to general contributions starting Fall, 2025 (once the distributed rewrite and general testing is complete). Until then, feel
free to use Hyperscale on your local machine and report any bugs or issues you find!

___________

## <b>Code of Conduct</b>

Hyperscale has adopted and follows the [Contributor Covenant code of conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/code_of_conduct.md).
If you observe behavior that violates those rules please report to:

| Name            | Email                       | Twitter                                          |
|-------          |--------                     |----------                                        |
| Ada Lundhe      | alundhe@anaconda.com        | [@adalundhe.dev](https://bsky.app/profile/adalundhe.dev) |

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "hyperscale",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "pypi, cicd, python, performance, testing, dag, graph, workflow",
    "author": null,
    "author_email": "Ada Lundhe <sean.corbett@umconnect.edu>",
    "download_url": "https://files.pythonhosted.org/packages/ba/57/f740be5471253cd12bb9880c6c5991159d1cb045a5a8e161dbfa03cefecf/hyperscale-0.4.2.tar.gz",
    "platform": null,
    "description": "\n# <b>Hyperscale</b>\n[![PyPI version](https://img.shields.io/pypi/v/hyperscale?color=blue)](https://pypi.org/project/hyperscale/)\n[![License](https://img.shields.io/github/license/hyper-light/hyperscale)](https://github.com/hyper-light/hyperscale/blob/main/LICENSE)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](https://github.com/hyper-light/hyperscale/blob/main/CODE_OF_CONDUCT.md)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/hyperscale?color=red)](https://pypi.org/project/hyperscale/)\n\n\n| Package     | Hyperscale                                                      |\n| ----------- | -----------                                                     |\n| Version     | 0.4.2                                                           |\n| Download    | https://pypi.org/project/hyperscale/                            | \n| Source      | https://github.com/hyper-light/hyperscale                       |\n| Keywords    | performance, testing, async, distributed, graph, DAG, workflow  |\n\nHyperscale is a Python performance and scalable unit/integration testing framework that makes creating and running complex test workflows easy.\n\nWrite and orchestrate workflows as Python classes and decorator-wrapped async methods (called <b>actions</b>) using clients from Playwright and HTTP3 to GRPC and DTLS-UDP concurrently, connect to over thirty one different reporting options, and execute your tests the same locally and distributed via an intuitive CLI. Test execution statistics and performance are displayed via an intuitive terminal UI allowing for real-time feedback.\n\n<br/>\n\n___________\n\n## <b> Why Hyperscale? </b>\n\nUnderstanding how your application performs under load provides valuable insights, from catching issues with latency and memory usage to finding race condititions and infrastructure misconfiguration. However, performance test tools are often difficult to use and lack the ability to simulate complex user scenarios. As a <b>simulation framework</b> Hyperscale is different, built from the ground up to facilitate multi-client workflow-driven testing without sacrificing developer experience, speed, or effciency. The Hyperscale project follows these tenants:\n\n<br/>\n\n### __Speed and efficiency by default__ \n\nWhether running on your personal laptop or distributed across a cluster, Hyperscale is *fast*, capable of generating millions of requests or interactions per minute and without consuming excessive memory such that running in modern cloud environments becomes difficult.\n\n<br/>\n\n### __Run with ease anywhere__\n\nHyperscale just works, requiring no additional setup beyond a supported Python distribution. Options (like ready made containers) to make running Hyperscale in more challenging environments easy are readily provided and maintained, but never required. Test code requires *no changes* whether running locally or distributed, and CLI option or configuration tweaks are kept as few as possible. Hyperscale embraces carefully selected modern developer experience features like starter templates generation, includes useful debugging tools like one-off request/response checking and IP lookup, and enforced a minimal but flexible API. This means developers and engineers spend less time learning the framework and more time making their applications the best they can.\n\n<br/>\n\n### __Flexibility and and painless extensibility__\nHyperscale ships with support for HTTP, HTTP2, HTTP3, TCP, UDP, and Websockets out of the box. GraphQL, GraphQL-HTTP2, GRPC, and Playwright are available as optional extras that can be installed via:\n\n```bash\npip install \"hyperscale[<extra_here>]\"\n```\n\nYou can use any installed and supported client concurrently in the same or an independent Workflow, allowing you to exercise each part of your application's stack to the fullest. Performing non-test work to accomplish setup is easy and only requires writing a workflow where no actions specify a client response return type.\n\nHyperscale offers JSON and CSV results reporting by default, with 29 additional reporters readily available as extra install options. All additional reporting options utilize the same config API and require no additional boilerplate. Specifying custom metrics only entails specifying the `Metric[T]` return type, and all reporters support customer metrics just like the default metrics Hyperscale provides. Writing your own reporter or client is as easy as defining\na class with a hadful of methods and specifying a few return types.\n\n<br/>\n\n___________\n\n## <b>Requirements and Getting Started</b>\n\nHyperscale makes use of the latest and greatest Python features, and requires Python 3.11+. We also recommend installing the latest LTS version of OpenSSL if you wish to perform DTLS UDP testing or run tests over SSL encrypted connections.\n\n<br/>\n\n### __Installing__ \n\nTo install Hyperscale run:\n```\npip install hyperscale\n```\nVerify the installation was was successful by running the command:\n```\nhyperscale --help\n```\n\nwhich should output\n\n![Output of the hyperscale --help command](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_help.png?raw=true \"Verifying Install\")\n\n\n> [!TIP]\n> Hyperscale has been tested using and fully supports both `poetry` and `uv` package managers. We strongly recommend `uv` for its speed and ease of use.\n\n<br/>\n\n### __Running your first test__ \n\nGet started by running Hyperscale's:\n```bash\n# Note: test.py can also be any other file\nhyperscale new test.py\n```\n\nwhich will output the following:\n\n![Output of the hyperscale new test.py command](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_new_workflow.png?raw=true \"Creating a Workflow\")\n\nand generate the the test below in the specified `test.py` file:\n```python\nfrom hyperscale.graph import Workflow, step\nfrom hyperscale.testing import URL, HTTPResponse\n\n\nclass Test(Workflow):\n    vus = 1000\n    duration = \"1m\"\n\n    @step()\n    async def login(\n        self,\n        url: URL = \"https://httpbin.org/get\",\n    ) -> HTTPResponse:\n        return await self.client.http.get(\n            url,\n        )\n\n```\n\nBefore running our test let's do two things. First, if on a Unix system, set the maximum number of open files above its current limit. This can be done\nby running:\n\n```\nulimit -n 256000\n```\n\n> [!IMPORTANT]\n> You can provide any number when setting the file limit, but it must be more than the maximum number of `vus` specified in your `Workflow`.\n\nNext, let's verify that [httpbin.org/get](https://httpbin.org/get) \ncan actually be reached by running:\n```bash\nhyperscale ping https://httpbin.org/get\n```\n\nwhich should output:\n\n![Output of the hyperscale ping https://httpbin.org/get command](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_ping_httpbin.png?raw=true \"Checking httpbin.org/get is reachable before running the test\")\n\nAwesome! Now let's run the test by executing:\n```bash\nhyperscale run test.py\n```\n\nwhich will output:\n\n![The hyperscale run test.py command starting a test run](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run_start.png?raw=true \"A test started by running the hyperscale run test.py command\")\n\nHyperscale runs a independent \"worker\" server on each CPU core and uses all available CPUs by default, so it may take a few seconds while the worker servers connect. During this few seconds, Hyperscale will let \nyou know how many workers have successfully connected thusfar:\n\n![Waiting for worker servers to connect](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run_connecting.png?raw=true \"Local worker servers connecting prior to starting the test run\")\n\nOnce the servers have connected your test will start, during which you will see both static test-wide and real-time updating run statstics:\n\n![Hyperscale running the Test workflow](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run.png?raw=true \"Hyperscale running the Test workflow in our test.py file and displaying live statistics about the test run\")\n\nLive-updated statistics include actions-per-second (i.e. APS - how many individual actions Hyperscale completed, error or otherwise, per second), a scatter plot showing actions-per-second over time, total completed requests, total workflow duration, and per-action total/success/error stats. If multiple Workflows are present in the same Test file and executing concrrently, live statistics for each workflow will display for five-seconds and will cycle between all\nconcurrent workflows.\n\nOnce the run is complete you should see:\n\n![Output of hyperscale from a completed workflow run](https://github.com/hyper-light/hyperscale/blob/main/images/hyperscale_run_complete.png?raw=true \"A Complete Workflow Run\")\n\nYou have officially created and run your first workflow!\n\n<br/>\n\n___________\n\n\n## <b>Running in Docker</b>\n\nHyperscale offers a Docker image that allows you to create and run tests in any Docker compatible environment. To run the Hyperscale Docker image run:\n\n```bash\ndocker pull hyperlightorg/hyperscale:latest\n```\n\nthen execute commands from within the image via:\n\n```bash\ndocker run -e COLUMNS=200 -e LINES=60 -v <TEST_DIR>:/tests hyperscae <ARGS_HERE>\n```\n\n> [!IMPORTANT]  \n> The Hyperscale image runs using a non-root user (`hyperscale`) that has read and write permissions for *only* the `/tests` directory. You <b><i>must</i></b> mount the directory where you wish to create and run tests to the `/tests` path\n\n> [!TIP]\n> By default the Hyperscale UI is fully enabled when running inside the Docker image. Unfortunately, Docker's default terminal size for running commands in an image causes issues. We recommend passing `-e COLUMNS=200` and `-e LINES=60` as options to prevent UI issues. Alternatively, you may disable Hyperscale's UI by running `hyperscale run -q <TEST_NAME_AND_OTHER_ARGS>`.\n\n</br>\n\n___________\n\n## <b>Development</b>\n\nTo setup your environment run the following script:\n\n```bash\n# Clone the repo\ngit clone https://github.com/hyper-light/hyperscale.git && \\\ncd hyperscale\n\n# We personally recommend uv\npip install uv\n\nuv venv && \\\nsource .venv/bin/activate\n\n# Install Hyperscale\n\n# NOTE: To install ALL dependencies for ALL reporting and\n# client options, uncomment the line below:\n\n# uv pip install -r requirements.txt.dev\n\nuv pip install -e .\n\n```\n___________\n\n## <b>Clients and Reporters</b>\n\nBelow find a tables of Hyperscale's supported client and reporting options, as well as co-requisite dependencies (if any):\n<br/>\n\n### __Clients__ \n\n| Client           | Additional Install Option                                       |  Dependencies                 |\n| -----------      | -----------                                                     |------------                   |\n| HTTP             | N/A                                                             | N/A                           |\n| HTTP2            | N/A                                                             | N/A                           |\n| HTTP3 (unstable) | pip install hyperscale[http3]                                   | aioquic                       |\n| TCP              | N/A                                                             | N/A                           |\n| UDP              | N/A                                                             | N/A                           |\n| Websocket        | N/A                                                             | N/A                           |\n| GRPC             | pip install hyperscale[grpc]                                    | protobuf                      |\n| GraphQL          | pip install hyperscale[graphql]                                 | graphql-core                  |\n| GraphQL-HTTP2    | pip install hyperscale[graphql]                                 | graphql-core                  |\n| Playwright       | pip install hyperscale[playwright] && playwright install        | playwright                    |\n\n\n<br/>\n\n### __Reporters__\n\n| Reporter             | Additional Install Option                                 |  Dependencies                            |\n| -----------          | -----------                                               |------------                              |\n| AWS Lambda           | pip install hyperscale[aws]                               | boto3                                    |\n| AWS Timestream       | pip install hyperscale[aws]                               | boto3                                    |\n| Big Query            | pip install hyperscale[google]                            | google-cloud-bigquery                    |\n| Big Table            | pip install hyperscale[google]                            | google-cloud-bigtable                    |\n| Cassandra            | pip install hyperscale[cassandra]                         | cassandra-driver                         |\n| Cloudwatch           | pip install hyperscale[aws]                               | boto3                                    |\n| CosmosDB             | pip install hyperscale[azure]                             | azure-cosmos                             |\n| CSV                  | N/A                                                       | N/A                                      |\n| Datadog              | pip install hyperscale[datadog]                           | datadog                                  |\n| DogStatsD            | pip install hyperscale[statsd]                            | aio_statsd                               |\n| Google Cloud Storage | pip install hyperscale[google]                            | google-cloud-storage                     |\n| Graphite             | pip install hyperscale[statsd]                            | aio_statsd                               |\n| Honeycomb            | pip install hyperscale[honeycomb]                         | libhoney                                 |\n| InfluxDB             | pip install hyperscale[influxdb]                          | influxdb_client                          |\n| JSON                 | N/A                                                       | N/A                                      |\n| Kafka                | pip install hyperscale[kafka]                             | aiokafka                                 |\n| MongoDB              | pip install hyperscale[mongodb]                           | motor                                    |\n| MySQL                | pip install hyperscale[sql]                               | aiomysql, sqlalchemy                     |\n| NetData              | pip install hyperscale[statsd]                            | aio_statsd                               |\n| New Relic            | pip install hyperscale[newrelic]                          | newrelic                                 |\n| Postgresql           | pip install hyperscale[sql]                               | aiopg, psycopg2-binary, sqlalchemy       |\n| Prometheus           | pip install hyperscale[prometheus]                        | prometheus-client, prometheus-client-api |\n| Redis                | pip install hyperscale[redis]                             | redis, aioredis                          |\n| S3                   | pip install hyperscale[aws]                               | boto3                                    |\n| Snowflake            | pip install hyperscale[snowflake]                         | snowflake-connector-python, sqlalchemy   |\n| SQLite3              | pip install hyperscale[sql]                               | sqlalchemy                               |\n| StatsD               | pip install hyperscale[statsd]                            | aio_statsd                               |\n| Telegraf             | pip install hyperscale[statsd]                            | aio_statsd                               |\n| TelegrafStatsD       | pip install hyperscale[statsd]                            | aio_statsd                               |\n| TimescaleDB          | pip install hyperscale[sql]                               | aiopg, psycopg2-binary, sqlalchemy       |\n| XML                  | pip install hyperscale[xml]                               | dicttoxml                                |\n\n<br/>\n\n___________\n\n## <b>Resources</b>\n\nHyperscale's official and full documentation is currently being written and will be linked here soon!\n\n___________\n\n## <b>License</b>\n\nHyper-Light and the Hyperscale project believe software should be truly open source forever. As such, this software is licensed under the MIT License in perpetuitiy. See the LICENSE file in the top distribution directory for the full license text.\n\n___________\n\n## <b>Contributing</b>\n\nHyperscale will be open to general contributions starting Fall, 2025 (once the distributed rewrite and general testing is complete). Until then, feel\nfree to use Hyperscale on your local machine and report any bugs or issues you find!\n\n___________\n\n## <b>Code of Conduct</b>\n\nHyperscale has adopted and follows the [Contributor Covenant code of conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/code_of_conduct.md).\nIf you observe behavior that violates those rules please report to:\n\n| Name            | Email                       | Twitter                                          |\n|-------          |--------                     |----------                                        |\n| Ada Lundhe      | alundhe@anaconda.com        | [@adalundhe.dev](https://bsky.app/profile/adalundhe.dev) |\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2024 hyper-light\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "Performance testing at scale.",
    "version": "0.4.2",
    "project_urls": {
        "Homepage": "https://github.com/hyper-light/hyperscale"
    },
    "split_keywords": [
        "pypi",
        " cicd",
        " python",
        " performance",
        " testing",
        " dag",
        " graph",
        " workflow"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "944253882f8ed463a6d1e2c2c3508dd55174c198bfb6284082e71de90b1729f7",
                "md5": "8d1615368112175ce91032ab83b345ea",
                "sha256": "ea6108c8242f5734d7882672b3119568478c6bb1698721cf175dfea8ef765b97"
            },
            "downloads": -1,
            "filename": "hyperscale-0.4.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8d1615368112175ce91032ab83b345ea",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 956463,
            "upload_time": "2025-02-22T16:35:33",
            "upload_time_iso_8601": "2025-02-22T16:35:33.747379Z",
            "url": "https://files.pythonhosted.org/packages/94/42/53882f8ed463a6d1e2c2c3508dd55174c198bfb6284082e71de90b1729f7/hyperscale-0.4.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ba57f740be5471253cd12bb9880c6c5991159d1cb045a5a8e161dbfa03cefecf",
                "md5": "326a3c08eaf8a7e5a5e13ac17fafbedf",
                "sha256": "463678f2522b7ff9b897c57daa9d20133cc8fad1c32e17eac2874d0e8e5a117f"
            },
            "downloads": -1,
            "filename": "hyperscale-0.4.2.tar.gz",
            "has_sig": false,
            "md5_digest": "326a3c08eaf8a7e5a5e13ac17fafbedf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 596915,
            "upload_time": "2025-02-22T16:35:36",
            "upload_time_iso_8601": "2025-02-22T16:35:36.168944Z",
            "url": "https://files.pythonhosted.org/packages/ba/57/f740be5471253cd12bb9880c6c5991159d1cb045a5a8e161dbfa03cefecf/hyperscale-0.4.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-22 16:35:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hyper-light",
    "github_project": "hyperscale",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aiodns",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "aioquic",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "annotated-types",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "attr",
            "specs": [
                [
                    "==",
                    "0.3.2"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "25.1.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2025.1.31"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.17.1"
                ]
            ]
        },
        {
            "name": "cloudpickle",
            "specs": [
                [
                    "==",
                    "3.1.1"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "44.0.1"
                ]
            ]
        },
        {
            "name": "msgspec",
            "specs": [
                [
                    "==",
                    "0.19.0"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.4.2"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "2.2.3"
                ]
            ]
        },
        {
            "name": "orjson",
            "specs": [
                [
                    "==",
                    "3.10.15"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "7.0.0"
                ]
            ]
        },
        {
            "name": "pyasn1",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "pyasn1-modules",
            "specs": [
                [
                    "==",
                    "0.4.1"
                ]
            ]
        },
        {
            "name": "pycares",
            "specs": [
                [
                    "==",
                    "4.5.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.22"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    "==",
                    "2.10.6"
                ]
            ]
        },
        {
            "name": "pydantic-core",
            "specs": [
                [
                    "==",
                    "2.27.2"
                ]
            ]
        },
        {
            "name": "pylsqpack",
            "specs": [
                [
                    "==",
                    "0.3.19"
                ]
            ]
        },
        {
            "name": "pyopenssl",
            "specs": [
                [
                    "==",
                    "25.0.0"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    "==",
                    "1.0.1"
                ]
            ]
        },
        {
            "name": "service-identity",
            "specs": [
                [
                    "==",
                    "24.2.0"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    "==",
                    "4.12.2"
                ]
            ]
        },
        {
            "name": "uvloop",
            "specs": [
                [
                    "==",
                    "0.21.0"
                ]
            ]
        },
        {
            "name": "zstandard",
            "specs": [
                [
                    "==",
                    "0.23.0"
                ]
            ]
        }
    ],
    "lcname": "hyperscale"
}
        
Elapsed time: 1.04710s