%% date:: [[2021-12-01]], [[2023-05-15]] parent:: %% # [[Artillery vs k6]] Here are the main differences between [[Artillery]] and [[k6 (tool)|k6]]. ## Where Artillery wins - Artillery can use all NodeJS libraries. - ## Where k6 wins - Artillery docs [say Artillery's good for performance testing](https://www.artillery.io/docs/guides/overview/why-artillery), but Artillery actually only does [[Backend performance testing]]. k6, with [[k6 browser]], now does [[Frontend performance testing]] and test automation as well. - Artillery is written in [[NodeJS]]. k6 is written in [[Go]]. - Artillery is not multithreaded. - You need a subscription to do distributed load testing with Artillery. - Artillery is way slower and more resource-hungry. - k6 Cloud includes execution on k6's AWS account. Artillery Pro is only for execution on your own AWS account. - k6 does functional testing, front-end and back-end performance testing, chaos testing, and more. - Expectations and assertions are an Artillery plugin, but in k6 they're part of the core binary. Also, HTTP 4xx and 5xx codes are failed natively. - While Artillery also has thresholds via "ensure" config setting, it's only for either response time or error rate. k6 allows thresholds to be set based on any [built-in k6 metric](https://k6.io/docs/using-k6/metrics/#http-specific-built-in-metrics) (including handshaking, connecting, but also group response time, load generator resources) or even custom metrics (content size. - ## Neutral differences - Artillery scripts are written in [[YAML]] and are [[Declarative]]. k6 scripts are written in [[JavaScript|js]] and are [[Imperative]]. - ## Similarities - Both are extensible by community plugins. - Both are [[Open-source]]. - Both have an OSS tool ([[Artillery Core]], [[k6 (tool)|k6]]) and a [[SaaS]] platform around it ([[Artillery Pro]], [[k6 Cloud]]). - Easy to integrate with CI/CD tools. - Both allow you to set test patterns. In Artillery, it's called "phases", and in k6, it's called "stages".