Merge branch 'qa-artillery-io-script-2' into 'master'
Add artillery.io load testing script and rake tasks See merge request gitlab-org/gitlab-ce!26210
This commit is contained in:
commit
909161dd49
4 changed files with 52 additions and 6 deletions
2
qa/.gitignore
vendored
2
qa/.gitignore
vendored
|
@ -1,3 +1,3 @@
|
|||
tmp/
|
||||
.ruby-version
|
||||
urls.txt
|
||||
urls.yml
|
||||
|
|
22
qa/Rakefile
22
qa/Rakefile
|
@ -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]
|
||||
|
|
22
qa/load/artillery.yml
Normal file
22
qa/load/artillery.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
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
|
||||
|
||||
|
|
Loading…
Reference in a new issue