Skip to content
Snippets Groups Projects
Commit fe2f6af9 authored by at.ramya's avatar at.ramya
Browse files

Resolving conflict

parent 05e8e4fc
No related merge requests found
......@@ -156,7 +156,7 @@ export default {
>
{{ __('This diff is collapsed.') }}
<a
class="click-to-expand js-click-to-expand"
class="click-to-expand js-click-to-expand qa-click-to-expand"
href="#"
@click.prevent="handleToggle"
>
......
......@@ -7,3 +7,4 @@ gem 'rake', '~> 12.3.0'
gem 'rspec', '~> 3.7'
gem 'selenium-webdriver', '~> 3.8.0'
gem 'airborne', '~> 0.2.13'
gem 'faker', '~> 1.6', '>= 1.6.6'
......@@ -32,6 +32,8 @@ GEM
diff-lcs (1.3)
domain_name (0.5.20170404)
unf (>= 0.0.5, < 1.0.0)
faker (1.9.1)
i18n (>= 0.7)
ffi (1.9.25)
http-cookie (1.0.3)
domain_name (~> 0.5)
......@@ -97,10 +99,11 @@ DEPENDENCIES
airborne (~> 0.2.13)
capybara (~> 2.16.1)
capybara-screenshot (~> 1.0.18)
faker (~> 1.6, >= 1.6.6)
pry-byebug (~> 3.5.1)
rake (~> 12.3.0)
rspec (~> 3.7)
selenium-webdriver (~> 3.8.0)
BUNDLED WITH
1.16.4
1.17.1
......@@ -121,6 +121,7 @@ module Page
autoload :View, 'qa/page/view'
autoload :Element, 'qa/page/element'
autoload :Validator, 'qa/page/validator'
autoload :Performance, 'qa/page/performance'
module Main
autoload :Login, 'qa/page/main/login'
......
......@@ -8,6 +8,7 @@ class Base
prepend Support::Page::Logging if Runtime::Env.debug?
include Capybara::DSL
include Scenario::Actable
include Page::Performance
extend SingleForwardable
ElementNotFound = Class.new(RuntimeError)
......
......@@ -57,6 +57,10 @@ class Show < Page::Base
element :labels_block
end
view 'app/assets/javascripts/notes/components/note_form.vue' do
element :comment_button
end
def fast_forward_possible?
!has_text?('Fast-forward merge is not possible')
end
......@@ -145,11 +149,15 @@ def go_to_diffs_tab
click_element :diffs_tab
end
def add_comment_to_diff(text)
def comment
click_element :comment_button
end
def add_comment_to_diff(text, line_number = 0)
wait(time: 5) do
page.has_text?("No newline at end of file")
end
all_elements(:new_diff_line).first.hover
all_elements(:new_diff_line)[line_number].hover
click_element :diff_comment
fill_element :reply_input, text
end
......@@ -165,6 +173,13 @@ def reply_to_discussion(reply_text)
all_elements(:discussion_reply).last.click
fill_element :reply_input, reply_text
end
def expand_diff
wait(time: 5) do
page.has_text?("Click to expand it.")
end
all_elements(:click_to_expand).last.click
end
end
end
end
......
# frozen_string_literal: true
module QA
module Page
module Performance
# Time taken to complete an action in page
def response_time(callback)
response_time = Benchmark.realtime do
public_send(callback)
end
( response_time * 1000 )
end
# Total Time taken to load page
def page_load_time
navigation_start = page.execute_script("return window.performance.timing.navigationStart")
dom_complete = page.execute_script("return window.performance.timing.domComplete")
dom_complete - navigation_start
end
# Time spent in the backend while loading the page
def backend_response_time
navigation_start = page.execute_script("return window.performance.timing.navigationStart")
response_start = page.execute_script("return window.performance.timing.responseStart")
response_start - navigation_start
end
# Time spent in the frontend while loading the page
def frontend_load_time
response_start = page.execute_script("return window.performance.timing.responseStart")
dom_complete = page.execute_script("return window.performance.timing.domComplete")
dom_complete - response_start
end
def apdex(samples_arr, response_threshold)
satisfied_count = 0
tolerating_count = 0
samples_arr.each do |sample|
if(sample <= response_threshold.to_f)
satisfied_count += 1
elsif(sample <= (4 * response_threshold.to_f))
tolerating_count += 1
end
end
(satisfied_count + (tolerating_count/2)) / samples_arr.length.to_f
end
end
end
end
# frozen_string_literal: true
require 'faker'
require 'uri'
require 'benchmark'
module QA
context :performance do
describe 'merge request' do
let(:api_client) do
Runtime::API::Client.new(:gitlab)
end
let(:response_threshold) { 270 } # milliseconds
let(:page_load_threshold) { 5000 } # milliseconds
let(:project) do
Resource::Project.fabricate! do |resource|
resource.name = 'perf-test-project'
end
end
def create_request(api_endpoint)
Runtime::API::Request.new(api_client, api_endpoint)
end
def push_new_file(branch, content, commit_message, file_path, exists = false)
request = create_request("/projects/#{project.id}/repository/files/#{file_path}")
if exists
put request.url, branch: branch, content: content, commit_message: commit_message
expect_status(200)
else
post request.url, branch: branch, content: content, commit_message: commit_message
expect_status(201)
end
end
def create_branch(branch_name)
request = create_request("/projects/#{project.id}/repository/branches")
post request.url, branch: branch_name, ref: 'master'
expect_status(201)
end
def populate_data_for_mr
content_arr = []
20.times do |i|
faker_line_arr = Faker::Lorem.sentences(1500)
content = faker_line_arr.join("\n\r")
push_new_file('master', content, "Add testfile-#{i}.md", "testfile-#{i}.md")
content_arr[i] = faker_line_arr
end
create_branch("perf-testing")
20.times do |i|
missed_line_array = content_arr[i].each_slice(2).map(&:first)
content = missed_line_array.join("\n\rIm new!:D \n\r ")
push_new_file('perf-testing', content, "Update testfile-#{i}.md", "testfile-#{i}.md", true)
end
end
def create_merge_request
request = create_request("/projects/#{project.id}/merge_requests")
post request.url, source_branch: 'perf-testing', target_branch: 'master', title: 'My MR'
expect_status(201)
json_body[:web_url]
end
it 'user adds comment to mr' do
populate_data_for_mr
mr_url = create_merge_request
samples_arr = []
apdex_score = 0
page_load_time = 0
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
visit mr_url
Page::MergeRequest::Show.perform do |show_page|
show_page.go_to_diffs_tab
show_page.expand_diff
5.times do |i|
show_page.add_comment_to_diff("Can you check this line of code?", i)
samples_arr.push(show_page.response_time(:comment))
end
apdex_score = show_page.apdex(samples_arr, response_threshold)
page_load_time = show_page.page_load_time
end
expect(page_load_time < page_load_threshold).to be true
expect((apdex_score >= 0.5) && (apdex_score <= 1.0)).to be true
end
end
end
end
......@@ -27,7 +27,7 @@ def perform
args.push(%w[--tag ~skip_signup_disabled]) if QA::Runtime::Env.signup_disabled?
args.push(options)
args.push(DEFAULT_TEST_PATH_ARGS) unless options.any? { |opt| opt =~ %r{/features/} }
args.push(DEFAULT_TEST_PATH_ARGS) unless options.any? { |opt| opt =~ %r{/features|performance/} }
Runtime::Browser.configure!
......
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