%%
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".