Artillery is a cloud-scale load testing and functional testing framework for backend services and APIs. It supports multiple protocols (HTTP, WebSocket, Socket.IO, Playwright, PostHog) through a plugin-based engine architecture. The system is primarily a CLI tool (built on oclif) that executes YAML/JSON test scripts defining virtual user flows with configurable arrival phases, payloads, and assertions. It provides distributed execution across local worker threads, AWS Lambda, AWS ECS/Fargate, and Azure ACI, with a bill-of-materials (BOM) system that bundles test dependencies for cloud workers. Metrics are aggregated via a custom Simple Statistics Measurement System (SSMS) supporting counters, histograms (DDSketch), and rates, and can be published to Datadog, CloudWatch, Prometheus, OpenTelemetry, Splunk, New Relic, and other observability platforms. The codebase is a monorepo managed with Turborepo, containing the core runner, platform integrations, first-party plugins (expect, ensure, apdex, slack, fake-data, metrics-by-endpoint, publish-metrics, memory-inspector), and shared type definitions. Key entry points include the `artillery` binary (`packages/artillery/bin/run`), the core runner (`packages/artillery/lib/core/runner.ts`), and platform launchers (`packages/artillery/lib/launch-platform.ts`). External dependencies include AWS SDK, Azure SDK, Playwright, got (HTTP client), and various metric publishing SDKs. The architecture is event-driven, using EventEmitter for lifecycle events and plugin hooks, with a global `global.artillery` object for shared state.
Plow is a high-performance HTTP(S) benchmarking CLI tool written in Go. It uses fasthttp for efficient HTTP client operations and provides real-time metrics including latency statistics, percentiles, histograms, and throughput. The tool supports configurable concurrency, request rate limiting, ramp-up, duration-based or request-count-based runs, and custom headers, body, TLS, and proxy settings. It outputs results to the terminal with live updating tables and also serves a web UI with interactive charts (latency, RPS, status codes, concurrency) using go-echarts. The architecture is a single binary with three main components: a requester that spawns concurrent workers, a stream-based report aggregator that computes streaming quantiles and histograms, and a printer/chart server for output. The code is well-structured, thoroughly tested, and follows Go best practices. It is not a library but a standalone application, though some internal components (e.g., the streaming stats engine and throughput interceptor) are cleanly isolated and could be reused in other projects.