diff options
author | Sanad Liaquat <sliaquat@gitlab.com> | 2019-03-19 05:09:30 +0000 |
---|---|---|
committer | Ramya Authappan <rauthappan@gitlab.com> | 2019-03-19 05:09:30 +0000 |
commit | f9832a08c513853ab10dd86adc9c7dd596e30da0 (patch) | |
tree | 1651cbd87f77b947f3042a0d71fc80c7b0c1f69b /qa | |
parent | 3c5a81cb83e6022530e53b1b6cdedf94c92d980e (diff) | |
download | gitlab-ce-f9832a08c513853ab10dd86adc9c7dd596e30da0.tar.gz |
Add load testing script for artillery.io
Also add rake tasks that makes use of existing performance data
genertion task.
Diffstat (limited to 'qa')
-rw-r--r-- | qa/.gitignore | 2 | ||||
-rw-r--r-- | qa/Rakefile | 22 | ||||
-rw-r--r-- | qa/load/artillery.yml | 22 | ||||
-rw-r--r-- | qa/qa/tools/generate_perf_testdata.rb | 12 |
4 files changed, 52 insertions, 6 deletions
diff --git a/qa/.gitignore b/qa/.gitignore index 102f7e5e54d..b0ae074ac07 100644 --- a/qa/.gitignore +++ b/qa/.gitignore @@ -1,3 +1,3 @@ tmp/ .ruby-version -urls.txt +urls.yml diff --git a/qa/Rakefile b/qa/Rakefile index b6ad09f9b00..d0101740f1a 100644 --- a/qa/Rakefile +++ b/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] diff --git a/qa/load/artillery.yml b/qa/load/artillery.yml new file mode 100644 index 00000000000..e2c3c293d8b --- /dev/null +++ b/qa/load/artillery.yml @@ -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 }}" diff --git a/qa/qa/tools/generate_perf_testdata.rb b/qa/qa/tools/generate_perf_testdata.rb index ad515014794..0a0dbdf5b15 100644 --- a/qa/qa/tools/generate_perf_testdata.rb +++ b/qa/qa/tools/generate_perf_testdata.rb @@ -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 |