Commit f9832a08 authored by Sanad Liaquat's avatar Sanad Liaquat Committed by Ramya Authappan

Add load testing script for artillery.io

Also add rake tasks that makes use of existing performance data
genertion task.
parent 3c5a81cb
tmp/
.ruby-version
urls.txt
urls.yml
......@@ -16,3 +16,25 @@ desc "Generate Performance Testdata"
task :generate_perf_testdata do
QA::Tools::GeneratePerfTestdata.new.run
end
desc "Run artillery load tests"
task :run_artillery_load_tests do
unless ENV['HOST_URL'] && ENV['LARGE_ISSUE_URL'] && ENV['LARGE_MR_URL']
urls_file = ENV['URLS_FILE_PATH'] || 'urls.yml'
unless File.exist?(urls_file)
raise "\n#{urls_file} file is missing. Please provide correct URLS_FILE_PATH or all of HOST_URL, LARGE_ISSUE_URL and LARGE_MR_URL\n\n"
end
urls = YAML.safe_load(File.read(urls_file))
ENV['HOST_URL'] = urls[:host]
ENV['LARGE_ISSUE_URL'] = urls[:large_issue]
ENV['LARGE_MR_URL'] = urls[:large_mr]
end
sh('artillery run load/artillery.yml -o report.json')
sh('artillery report report.json -o report.html && rm report.json')
end
desc "Generate data and run load tests"
task generate_data_and_run_load_test: [:generate_perf_testdata, :run_artillery_load_tests]
config:
target: "{{ $processEnvironment.HOST_URL }}"
phases:
- duration: 60
arrivalRate: 1
name: "Warm up"
- duration: 120
arrivalRate: 1
rampTo: 50
name: "Gradual ramp up"
- duration: 60
arrivalRate: 50
name: "Sustained max load"
scenarios:
- name: "Visit large issue url"
flow:
- get:
url: "{{ $processEnvironment.LARGE_ISSUE_URL }}"
- name: "Visit large MR url"
flow:
- get:
url: "{{ $processEnvironment.LARGE_MR_URL }}"
......@@ -2,6 +2,7 @@
require 'securerandom'
require 'faker'
require 'yaml'
require_relative '../../qa'
# This script generates testdata for Performance Testing.
# Required environment variables: PERSONAL_ACCESS_TOKEN and GITLAB_ADDRESS
......@@ -20,7 +21,8 @@ module QA
@api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['PERSONAL_ACCESS_TOKEN'])
@group_name = "gitlab-qa-perf-sandbox-#{SecureRandom.hex(8)}"
@project_name = "my-test-project-#{SecureRandom.hex(8)}"
@urls = {}
@visibility = "public"
@urls = { host: ENV['GITLAB_ADDRESS'] }
end
def run
......@@ -39,26 +41,26 @@ module QA
threads_arr = []
methods_arr.each do |m|
threads_arr << Thread.new {m.call}
threads_arr << Thread.new { m.call }
end
threads_arr.each(&:join)
STDOUT.puts "\nURLs: #{@urls}"
File.open("urls.txt", "w") { |file| file.puts @urls.to_s}
File.open("urls.yml", "w") { |file| file.puts @urls.to_yaml }
STDOUT.puts "\nDone"
end
private
def create_group
group_search_response = post Runtime::API::Request.new(@api_client, "/groups").url, "name=#{@group_name}&path=#{@group_name}"
group_search_response = post Runtime::API::Request.new(@api_client, "/groups").url, "name=#{@group_name}&path=#{@group_name}&visibility=#{@visibility}"
group = JSON.parse(group_search_response.body)
@urls[:group_page] = group["web_url"]
group["id"]
end
def create_project(group_id)
create_project_response = post Runtime::API::Request.new(@api_client, "/projects").url, "name=#{@project_name}&namespace_id=#{group_id}"
create_project_response = post Runtime::API::Request.new(@api_client, "/projects").url, "name=#{@project_name}&namespace_id=#{group_id}&visibility=#{@visibility}"
@urls[:project_page] = JSON.parse(create_project_response.body)["web_url"]
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment