Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/j5ik2o/aws-gatling-tools
the aws stress-test tool used by gatling
https://github.com/j5ik2o/aws-gatling-tools
aws gatling load-test scala stress-test
Last synced: about 16 hours ago
JSON representation
the aws stress-test tool used by gatling
- Host: GitHub
- URL: https://github.com/j5ik2o/aws-gatling-tools
- Owner: j5ik2o
- License: mit
- Created: 2020-03-21T09:43:01.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-09-09T16:41:45.000Z (about 2 months ago)
- Last Synced: 2024-09-10T13:29:20.910Z (about 2 months ago)
- Topics: aws, gatling, load-test, scala, stress-test
- Language: Scala
- Homepage:
- Size: 621 KB
- Stars: 26
- Watchers: 2
- Forks: 5
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# aws-gatling-tools
`aws-gatling-tools` is an AWS stress testing tool used by [gatling](https://gatling.io/) to perform stress tests using processes on Fargate, output reports to S3, and notify chats of the URL of the report.
## project structure
- terraform
- The terraform scripts for deploying a stress-test environment on AWS.
- gatling-aggregate-runner
- The application to manage stress testing.
- gatling-runner
- The application that performs stress tests.
- gatling-s3-reporter(not sbt project)
- The application that aggregates logs and outputs a report to S3.
- api-server(for test)
- The server application for testing.## preparation
- installing tool
```sh
$ brew install sbt awscli jq terraform
```
- installing Docker for Mac
- register an IAM user in AWS account
- add a profile for the IAM user as `aws-gatling-tools` to `~/.aws/credentails`.
```sh
[aws-gatling-tools]
aws_access_key_id = XXXXX
aws_secret_access_key = XXXXX
region = ap-northeast-1
```## build the AWS environment
```sh
$ cd terraform
terraform $ cp terraform.tfvars.default terraform.tfvars
terrafrom $ vi terrafrom.tfvars # edit
terraform $ terraform init
terraform $ terraform plan
terraform $ terraform apply
```If you don't need the test application(api-server), please comment out the following part of `terraform/main.tf`.
```terraform
# module "ecr_api_server" {
# source = "./api-server"
# prefix = var.prefix
# owner = var.owner
# vpc_id = module.vpc.vpc_id
# subnet_ids = module.vpc.public_subnets
# aws_subnet_public = var.aws_subnet_public
# api_server_ecs_cluster_name = var.api_server_ecs_cluster_name
# api_server_ecr_name = var.api_server_ecr_name
# aws_account_id = var.account_id
# }
```## build the test application(if necessary)
This is just to check the operation.It is not necessary if you use your own test application.
```sh
# api-server docker build & push
$ AWS_DEFAULT_PROFILE=aws-gatling-tools sbt api-server/ecr:push
```## build the stress-test tools
```sh
# gatling-runner docker build & push
$ AWS_DEFAULT_PROFILE=aws-gatling-tools sbt gatling-runner/ecr:push# gatling-s3-reporter docker build & push
$ cd gatling-s3-reporter && make release && cd ..# gatling-aggregate-runner build & push
$ AWS_DEFAULT_PROFILE=aws-gatling-tools sbt gatling-aggregate-runner/ecr:push
```## run a stress-test
```sh
$ cp run-stress-test.sh.default run-stress-test.sh
$ vi run-stress-test.sh # edit stress-test conditions
$ sh ./run-stress-test.sh
```1. `Aggregate Runner` starts on the ECS cluster.
1. `Aggregate Runner` starts the specified number of `Runners`, notifies to chat.
1. Wait for all `Runners` until finish.
1. After all runners have finished, launch the `S3 Reporter`, `Aggregate Runner` notifies to chat
1. `Aggregate Runner` notifies the url to gatling report on S3.All control is performed by `Aggregate Runner`, so the terminal can be closed after execute the command.
### chat log example
```
Gatling Runner started:
task arns = [
https://ap-northeast-1.console.aws.amazon.com/ecs/home?region=ap-northeast-1#/clusters/j5ik2o-aws-gatling-tools-ecs/tasks/xxxxxxxxxx/details
...
https://ap-northeast-1.console.aws.amazon.com/ecs/home?region=ap-northeast-1#/clusters/j5ik2o-aws-gatling-tools-ecs/tasks/xxxxxxxxxx/details
]
runTaskCount = 10, runTaskEnvironments = Map(GATLING_S3_BUCKET_NAME -> j5ik2o-aws-gatling-tools-logs, GATLING_PAUSE_DURATION -> 3s, GATLING_TARGET_ENDPOINT_BASE_URL -> http://tf-xxxxxxxxxx-xxxxxxxx.ap-northeast-1.elb.amazonaws.com, GATLING_EXECUTION_ID -> api-server/xxxxxxxx-xxxxxxxxx, GATLING_SIMULATION_CLASS -> com.github.j5ik2o.gatling.BasicSimulation, GATLING_RAMP_DURATION -> 200s, GATLING_RESULT_DIR -> target/gatling, GATLING_HOLD_DURATION -> 5m, GATLING_USERS -> 10, AWS_REGION -> ap-northeast-1)
Gatling Runner finished: task arns = [
https://ap-northeast-1.console.aws.amazon.com/ecs/home?region=ap-northeast-1#/clusters/j5ik2o-aws-gatling-tools-ecs/tasks/xxxxxxxxxx/details
...
https://ap-northeast-1.console.aws.amazon.com/ecs/home?region=ap-northeast-1#/clusters/j5ik2o-aws-gatling-tools-ecs/tasks/xxxxxxxxxx/details
]
Gatling Reporter started: task arns = https://ap-northeast-1.console.aws.amazon.com/ecs/home?region=ap-northeast-1#/clusters/j5ik2o-aws-gatling-tools-ecs/tasks/xxxxx-xxxxx-xxxxx-xxxx-xxxxxxxxxxx/details
runTaskReporterEnvironments = Map(AWS_REGION -> ap-northeast-1, GATLING_BUCKET_NAME -> j5ik2o-aws-gatling-tools-logs, GATLING_RESULT_DIR_PATH -> api-server/xxxxxxxxxxx-xxxxxxxxxxxx)
Gatling Reporter finished: report url: https://j5ik2o-aws-gatling-tools-logs.s3.amazonaws.com/api-server/xxxxxxxxx-xxxxxxxxxxx/index.html
```### gatling report example