Vegeta (software)

Last updated

Vegeta
Original author(s) Tomás Senart [1]
Initial releaseAugust 13, 2013;10 years ago (2013-08-13) [2]
Stable release
12.11.1 [3]   OOjs UI icon edit-ltr-progressive.svg / 2 October 2023;5 months ago (2 October 2023)
Repository github.com/tsenart/vegeta
Written in Go [4]
Operating system Linux, Microsoft Windows, macOS [1]
Type HTTP Load testing
License MIT License [1]
Website pkg.go.dev/github.com/tsenart/vegeta/lib

Vegeta is an HTTP load testing tool written in Go that can be used as a command in a command-line interface or as a library. [4] The program tests how an HTTP-based application behaves when multiple users access it at the same time [4] by generating a background load of GET requests. [5] Vegeta is used to generate a sustained, constant number of requests per second in order to discover how long a service can sustain a peak load before dropping in performance. [6]

Contents

In addition to preemptive load testing, the program can also be used for shadow testing, [7] where traffic from a live version of an application is mirrored onto a test version to determine how it handles the same traffic load, without causing potential disruption to the live version of the application. [8] Shadow testing is done in this way in order to analyze anticipated server performance. [9]

Vegeta is provided for use by web hosting services such as Scaleway [4] to use varied and multiple requests to stress test client HTTP services. [10] It is also used with dedicated load-testing platform services such as BlazeMeter. [11]

Usage

The command-line usage is in the format of vegeta [global flags] <command> [command flags]. The three global flags are -cpus int which specifies the number of CPUs to use, -profile string which enables profiling, and -version which prints the software version and then terminates the program. [1]

The commands available are attack, encode, plot, and report, each with its own various command flag options, and both attack input and report output can be done in an optional JSON format when specified with the appropriate flag. [1]

Vegeta can specify targets as URLs in a separate file with optional custom headers and requests, which can then be used as an input option on the command line. [12]

Example

An example usage would be to issue echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report from the command-line. [1] This example uses the echo command to output GET http://localhost/, and then executes the attack command for that output for five seconds. After that, it uses the tee command to write results to a file called results.bin, and runs the report command to display the output of the attack results.

Related Research Articles

cURL is a computer software project providing a library (libcurl) and command-line tool (curl) for transferring data using various network protocols. The name stands for "Client for URL".

The computer file hosts is an operating system file that maps hostnames to IP addresses. It is a plain text file. Originally a file named HOSTS.TXT was manually maintained and made available via file sharing by Stanford Research Institute for the ARPANET membership, containing the hostnames and address of hosts as contributed for inclusion by member organizations. The Domain Name System, first described in 1983 and implemented in 1984, automated the publication process and provided instantaneous and dynamic hostname resolution in the rapidly growing network. In modern operating systems, the hosts file remains an alternative name resolution mechanism, configurable often as part of facilities such as the Name Service Switch as either the primary method or as a fallback method.

Code injection is the exploitation of a computer bug that is caused by processing invalid data. The injection is used by an attacker to introduce code into a vulnerable computer program and change the course of execution. The result of successful code injection can be disastrous, for example, by allowing computer viruses or computer worms to propagate.

ApacheBench is a single-threaded command line computer program used for benchmarking HTTP web servers. Originally it was used to test the Apache HTTP Server but it is generic enough to test any web server supporting HTTP/1.0 or HTTP/1.1 protocol versions.

A proxy auto-config (PAC) file defines how web browsers and other user agents can automatically choose the appropriate proxy server for fetching a given URL.

<span class="mw-page-title-main">CMake</span> Cross-platform, compiler-independent build system generator

In software development, CMake is cross-platform free and open-source software for build automation, testing, packaging and installation of software by using a compiler-independent method. CMake is not a build system itself; it generates another system's build files. It supports directory hierarchies and applications that depend on multiple libraries. It can invoke native build environments such as Make, Qt Creator, Ninja, Android Studio, Apple's Xcode, and Microsoft Visual Studio. It has minimal dependencies, requiring only a C++ compiler on its own build system.

Web server benchmarking is the process of estimating a web server performance in order to find if the server can serve sufficiently high workload.

Web2py is an open-source web application framework written in the Python programming language. Web2py allows web developers to program dynamic web content using Python. Web2py is designed to help reduce tedious web development tasks, such as developing web forms from scratch, although a web developer may build a form from scratch if required.

<span class="mw-page-title-main">Vaadin</span>

Vaadin is an open-source web application development platform for Java. Vaadin includes a set of Web Components, a Java web framework, and a set of tools that enable developers to implement modern web graphical user interfaces (GUI) using the Java programming language only, TypeScript only, or a combination of both.

<span class="mw-page-title-main">Node.js</span> JavaScript runtime environment

Node.js is a cross-platform, open-source JavaScript runtime environment that can run on Windows, Linux, Unix, macOS, and more. Node.js runs on the V8 JavaScript engine, and executes JavaScript code outside a web browser.

<span class="mw-page-title-main">Play Framework</span> Open-source web framework written in Scala

Play Framework is an open-source web application framework which follows the model–view–controller (MVC) architectural pattern. It is written in Scala and usable from other programming languages that are compiled to JVM bytecode, e.g. Java. It aims to optimize developer productivity by using convention over configuration, hot code reloading and display of errors in the browser.

Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF or XSRF, is a type of malicious exploit of a website or web application where unauthorized commands are submitted from a user that the web application trusts. There are many ways in which a malicious website can transmit such commands; specially-crafted image tags, hidden forms, and JavaScript fetch or XMLHttpRequests, for example, can all work without the user's interaction or even knowledge. Unlike cross-site scripting (XSS), which exploits the trust a user has for a particular site, CSRF exploits the trust that a site has in a user's browser. In a CSRF attack, an innocent end user is tricked by an attacker into submitting a web request that they did not intend. This may cause actions to be performed on the website that can include inadvertent client or server data leakage, change of session state, or manipulation of an end user's account.

Content Security Policy (CSP) is a computer security standard introduced to prevent cross-site scripting (XSS), clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context. It is a Candidate Recommendation of the W3C working group on Web Application Security, widely supported by modern web browsers. CSP provides a standard method for website owners to declare approved origins of content that browsers should be allowed to load on that website—covered types are JavaScript, CSS, HTML frames, web workers, fonts, images, embeddable objects such as Java applets, ActiveX, audio and video files, and other HTML5 features.

<span class="mw-page-title-main">Travis CI</span> Service to build and test software projects

Travis CI is a hosted continuous integration service used to build and test software projects hosted on GitHub, Bitbucket, GitLab, Perforce, Apache Subversion and Assembla.

<span class="mw-page-title-main">Julia (programming language)</span> Dynamic programming language

Julia is a high-level, general-purpose dynamic programming language, most commonly used for numerical analysis and computational science. Distinctive aspects of Julia's design include a type system with parametric polymorphism and the use of multiple dispatch as a core programming paradigm, efficient garbage collection, and a just-in-time (JIT) compiler.

<span class="mw-page-title-main">Laravel</span> Open source web application framework, written in PHP

Laravel is a free and open-source PHP web framework, created by Taylor Otwell and intended for the development of web applications following the model–view–controller (MVC) architectural pattern and based on Symfony. Some of the features of Laravel are a modular packaging system with a dedicated dependency manager, different ways for accessing relational databases, utilities that aid in application deployment and maintenance, and its orientation toward syntactic sugar.

Caddy is an extensible, cross-platform, open-source web server written in Go.

<span class="mw-page-title-main">Prometheus (software)</span> Application used for event monitoring and alerting

Prometheus is a free software application used for event monitoring and alerting. It records metrics in a time series database built using an HTTP pull model, with flexible queries and real-time alerting. The project is written in Go and licensed under the Apache 2 License, with source code available on GitHub, and is a graduated project of the Cloud Native Computing Foundation, along with Kubernetes and Envoy.

<span class="mw-page-title-main">Fyne (software)</span> Graphical toolkit for building cross platform GUIs

Fyne is a free and open-source cross-platform widget toolkit for creating graphical user interfaces (GUIs) across desktop and mobile platforms. It is designed to enable developers to build applications that run on multiple desktop and mobile platforms/versions from a single code base. Fyne uses OpenGL to provide cross-platform graphics. It is inspired by the principles of Material Design to create applications that look and behave consistently across all platforms. It is licensed under the terms of the 3-clause BSD License, supporting the creation of free and proprietary applications. In December 2019 Fyne became the most popular GUI toolkit for Go, by GitHub star count and in early February 2020 it was trending as #1 project in GitHub trending ranks.

References

  1. 1 2 3 4 5 6 Senart, Tomás (October 11, 2020). "GitHub - tsenart/vegeta: HTTP load testing tool and library. It's over 9000!". GitHub . Archived from the original on August 11, 2022. Retrieved August 27, 2022.
  2. Senart, Tomás (August 13, 2013). "Initial commit". GitHub . Archived from the original on August 28, 2022. Retrieved August 27, 2022.
  3. "Release v12.11.1".
  4. 1 2 3 4 "Load Testing with Vegeta". Scaleway . May 26, 2022. Archived from the original on October 16, 2021. Retrieved August 27, 2022.
  5. Eiermann, Andreas; Renner, Mathias; Großmann, Marcel; Krieger, Udo R. (2017). "On a Fog Computing Platform Built on ARM Architectures". In Eichler, Gerald; Erfurth, Christian; Fahrnberger, Günter (eds.). Innovations for community services : 17th International Conference, I4CS 2017, Darmstadt, Germany, June 26-28, 2017, Proceedings. Cham, Switzerland. p. 83. ISBN   978-3-319-60447-3. OCLC   990058133.{{cite book}}: CS1 maint: location missing publisher (link)
  6. De, Brajesh (2017). API management : an architect's guide to developing and managing APIs for your organization (First ed.). New York. p. 161. ISBN   978-1-4842-1305-6. OCLC   978273106. Archived from the original on August 28, 2022. Retrieved August 27, 2022.{{cite book}}: CS1 maint: location missing publisher (link)
  7. Welch, Nat (2018). Real-world SRE : the survival guide for responding to a system outage and maximizing uptime. Birmingham, UK: Packt. p. 137. ISBN   978-1-78862-644-6. OCLC   1056157467.
  8. "Application deployment and testing strategies". Google Cloud . February 5, 2020. Retrieved August 28, 2022.
  9. Qi, Lin; Qiao, Zhihong; Zhang, Aowei; Qi, Hui; Ren, Weiwu; Di, Xiaoqiang; Wang, Rui (2020). "Performance Analysis of QUIC-UDP Protocol Under High Load". In Tang, Dalai; Li, Wuyungerile (eds.). Mobile wireless middleware, operating systems and applications : 9th EAI International Conference, MOBILWARE 2020, Hohhot, China, July 11, 2020, Proceedings. Cham, Switzerland. p. 70. ISBN   978-3-030-62205-3. OCLC   1225562925. Archived from the original on August 28, 2022. Retrieved August 27, 2022.{{cite book}}: CS1 maint: location missing publisher (link)
  10. Dumitrescu, Sorin (July 10, 2020). "Black Friday. 0 downtime. How Bunnyshell & Vegeta & UiPath can help". BunnyShell.com. Archived from the original on August 28, 2022. Retrieved August 27, 2022.
  11. Levental, Alla (August 26, 2021). "Vegeta Load Testing". BlazeMeter . Archived from the original on August 28, 2022. Retrieved August 27, 2022.
  12. Osman, Paul (2018). Microservices development cookbook : design and build independently deployable, modular services. Birmingham, UK: Packt. p. 210. ISBN   978-1-78847-636-2. OCLC   1055162428. Archived from the original on August 28, 2022. Retrieved August 27, 2022.