/pandora

A load generator in Go language

Primary LanguageGoOtherNOASSERTION

Pandora

Join the chat at https://gitter.im/yandex/pandora Build Status Coverage Status

A load generator in Go language.

Install

Compile a binary with go tool (use go >= 1.5.2):

go get github.com/yandex/pandora
go build github.com/yandex/pandora

There are also binary releases available.

Run this binary with your .json config (see examples):

./pandora myconfig.json

Or let Yandex.Tank make it easy for you.

Extension points

You can write plugins with the next extension points:

ammo.Provider
aggregate.ResultListener
limiter.Limiter
gun.Gun

Build tags

If you don want to build pandora without http gun:

go build -tags 'noHttpGun' github.com/yandex/pandora

If you don want to build pandora without spdy gun:

go build -tags 'noSpdyGun' github.com/yandex/pandora

Basic concepts

Architectural scheme

See architectural scheme source in docs/architecture.graphml. It was created with YeD editor, so you’ll probably need it to open the file.

Architectural scheme

Pandora is made of components. Components talk to each other over the channels. There are different types of components.

Component types

Ammo provider and decoder

Ammo decoder knows how to make an ammo object from an ammo file or other external resource. Ammo provider uses a decoder to decode ammo and passes ammo objects to the Users.

User pool

User pool controls the creation of Users. All users from one user pool will get ammo from one ammo provider. User creation schedule is controlled with Startup Limiter. All users from one user pool will also have guns of the same type.

Limiters

Limiters are objects that will put messages to its underlying channel according to a schedule. User creation, shooting or other processes thus can be controlled by a Limiter.

Users and Guns

User takes an ammo, waits for a limiter tick and then shoots with a Gun it has. Guns are the tools to send a request to your service and measure the parameters of the response.

Result Listener

Result listener's task is to collect measured samples and save them somewhere.