.PHONY: smoke load stress soak all install-k6 proto # k6 binary with gRPC support K6 := k6 GRPC_HOST ?= localhost:9090 PROTO_DIR := ../../pkg/proto # Install k6 with gRPC extension install-k6: @echo "Installing k6 with gRPC extension..." @go install go.k6.io/xk6/cmd/xk6@latest @xk6 build --with github.com/grafana/xk6-grpc # Copy proto files for k6 proto: @echo "Copying proto files..." @mkdir -p proto @cp $(PROTO_DIR)/*.proto proto/ # Smoke test - quick sanity check smoke: proto @echo "Running smoke test..." $(K6) run --env GRPC_HOST=$(GRPC_HOST) \ --tag testid=smoke-$(shell date +%s) \ --out json=results/smoke-$(shell date +%Y%m%d-%H%M%S).json \ grpc-test.js \ --only smoke # Load test - normal traffic load: proto @echo "Running load test..." @mkdir -p results $(K6) run --env GRPC_HOST=$(GRPC_HOST) \ --tag testid=load-$(shell date +%s) \ --out json=results/load-$(shell date +%Y%m%d-%H%M%S).json \ grpc-test.js \ --only load # Stress test - find breaking point stress: proto @echo "Running stress test..." @mkdir -p results $(K6) run --env GRPC_HOST=$(GRPC_HOST) \ --tag testid=stress-$(shell date +%s) \ --out json=results/stress-$(shell date +%Y%m%d-%H%M%S).json \ grpc-test.js \ --only stress # Soak test - extended duration soak: proto @echo "Running soak test..." @mkdir -p results $(K6) run --env GRPC_HOST=$(GRPC_HOST) \ --tag testid=soak-$(shell date +%s) \ --out json=results/soak-$(shell date +%Y%m%d-%H%M%S).json \ grpc-test.js \ --only soak # Run all scenarios all: proto @echo "Running all test scenarios..." @mkdir -p results $(K6) run --env GRPC_HOST=$(GRPC_HOST) \ --tag testid=full-$(shell date +%s) \ --out json=results/full-$(shell date +%Y%m%d-%H%M%S).json \ grpc-test.js # Export to Grafana Cloud k6 cloud: proto @echo "Running in Grafana Cloud..." $(K6) cloud --env GRPC_HOST=$(GRPC_HOST) grpc-test.js # Clean results clean: rm -rf results/ rm -rf proto/