Giter VIP home page Giter VIP logo

go-expert-stress-test's Introduction

Stress Testing Tool

Abordagem

O package stresstest contém a lógica principal da aplicação. Utilizando de golang channels para controlar a concorrecia, disparamos goroutines em paralelo para atingir a concorrencia desejada.

Para controlar que todas as requisições foram executadas, utilizo waitgroups.

func (st *StressTest) Execute() (StressTestDTOOutput, error) {
start := time.Now()
var wg sync.WaitGroup
queue := make(chan struct{}, st.Input.Concurrency)
defer close(queue)
requests := st.Input.Requests
resultsChan := make(chan int, requests)
defer close(resultsChan)
result := StressTestDTOOutput{
Results: make(map[int]int),
}
var hasError error
for i := 0; i < requests; i++ {
wg.Add(1)
queue <- struct{}{}
go func() {
resp, err := http.Get(st.Input.Url)
if err != nil {
hasError = errors.Join(hasError, err)
<-queue
return
}
resultsChan <- resp.StatusCode
<-queue
}()
}
go func() {
for res := range resultsChan {
result.Results[res] += 1
wg.Done()
}
}()
wg.Wait()
result.ExecutionTime = time.Since(start)
return result, hasError
}

Usage

Para utilizar a ferramenta, é necessário passar três parâmetros: url, requests e concurrency.

Aqui está um exemplo de como você pode executar a ferramenta:

docker build . -t "alusoft-stress-test" && \
docker run alusoft-stress-test --url=http://example.com --requests=10 --concurrency=5

Neste exemplo, a ferramenta realizará um total de 10 requisições para http://example.com com um nível de concorrência de 5.

Output

Após executar o teste, você verá uma saída como esta:

Stress Testing http://example.com, Requests 10, Concurrency 5...
Total of request with Status code[200]: 10 
Total of request with: 10 
Execution time 1.056415s

Isso significa que a ferramenta fez um total de 1000 requisições para http://example.com e todas essas requisições tiveram um código de status HTTP 200 (OK). O tempo de execução é o tempo que levou para o teste ser concluído.

go-expert-stress-test's People

Contributors

aluferraz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.