Load Testing using Continuous Integration tools

Post on 25-Jan-2017

589 views 2 download

Transcript of Load Testing using Continuous Integration tools

LOAD TESTINGusing continuous integration

toolsRichard Pitts

Sr. Load Test Engineer | CommerceHub

Agenda

Our experience adding NeoLoad to our Continuous Integration process.

1. Benefits of using CI to run NeoLoad2. Why we run NeoLoad using CI3. How NeoLoad + CI has helped us4. Common pitfalls to avoid5. Getting started + best practices

About CommerceHub

Hosted services for e-commerce & retail. [B2B] Connection between 200+ retailers and 8,900 brands/distributors. Translate & route drop shipment orders amongst business partners. Goal: Facilitate e-commerce sales growth for our customers Processed $10bil GrossMerchValue for our customers in 2014 [33.7mil

orders]

Why performance matters to us: “retail busy season”: Black Friday Christmas 38k+ users 8.25 mil logins/yr 2 mil hits per month on most visited web page

Benefits of using CI to run NeoLoad

Same benefit as any CI Job Easy to execute Easy to schedule Easy to monitor Build history Results in Workspace

Benefits of using NeoLoad Plugin Retrieve

Neoload results back into to Jenkins

Display Trends: Avg Response Time & Error Rate

Maintain build history & preserve Neoload reports for each build.

Benefits of using NeoLoad Plugin

Collaborate.Easy to share.Link to the build.

Why you should run NeoLoad using CI If load testing occurs less frequently than desired New development methodologies more frequent releases Scheduled automation avoids waiting on humans, keeps a

faster pace.

Our Story… before NeoLoad with NeoLoad with NeoLoad plus CI

Load Testing before NeoLoad

• Close to the release date• Late testing Late Discoveries Delayed Releases.

feature complete build

Monthly releases

Performance test@ end of dev cycle

Load Testing before NeoLoad An automated tool could help us load test. Hopefully one that would inspire us to load test earlier + more

often.

Started to Trial + Assess several load testing tools

NeoLoad pilot

Began recording &designing our Neoload scripts

A better Load Test environment

Properly designed for load testing @ high volume [150+ users]

Used CI to automate deployment & configuration of this env

On-premise Load Generators Web cluster behind Load Balancer

NeoLoad pilot: real progress

Started generating performance test results

Success implement an automated load testing tool library of scripts now easier to include load testing for releases load testing more things, more often stockpile load test results for future benchmark comparisons

NeoLoad + Waterfall: How to?

So, how did we regularly include NeoLoad tests as part of our waterfall releases?

NeoLoad + Waterfall: Option 1Three options to include Neoload testing for a release:

1) author new NeoLoad scripts designed to target specific concerns. Record/Playback Configure for multi-user concurrency & unique data Run scripts Share results

NeoLoad + Waterfall: Option 2Three options to include Neoload testing for a release:

2) run existing NeoLoad scripts + compare w/ previous release results

Try/validate the scripts Update/fix outdated scripts Run scripts Share results

NeoLoad + Waterfall: Option 3Three options to include Neoload testing for a release:

3) run NeoLoad scripts on project vs mainline branches, comparing results

Run scripts on mainline branch to obtain baseline results Run scripts on project branch Compare project results to baseline results Is performance of the project branch better/no worse/worse than

mainline

Results: Still a Waterfall Performance testing still occurred @ end of dev cycles Limited time to re-work performance issues before release dates. Often, the tests were short samples due to time constraints. The most recent set of results for comparison was often many weeks

old. Centralized around performance engineer (bottleneck risk) Sometimes it was “testing for the sake of testing”

Meanwhile: Along comes Agile Continuous Integration of code Automated CI builds Continuous Delivery to test environments Automated regressions using CI builds Cross functional team members “Everyone is responsible for quality” approach

Result: Sped up development + shortened our dev lifecycle!

Release more frequently

Load Testing + Agile Teams Team mindset: “Performance is everybody's job” But, most team members had little load testing experience.

Result: Still had all of the same problems getting Load Tests done.

Completed “in the margins” by perf engineer + agile team member. Relied upon Ops and/or performance engineer (bottleneck risk)

Load testing wasn’t keeping pace with our Agile teams. Needed a way to bake Load Testing into our Agile process.

Load Testing + Agile Teams How could we include LT more often, under Agile process?

Manual performance testing? [+leverage firebug, Yslow, Fiddler, etc.]

Collect performance metrics while we run our automated regression?

WebPagetest.org? Schedule NeoLoad to run using Cron jobs? Schedule NeoLoad to run using NeoLoad internal scheduler? Schedule Neoload to run using CI? Hmmmm… we do have

Jenkins.

Jenkins NeoLoad plugin v4.2 [Nov 2013]

Retrieve Neoload results back into to Jenkins

Display Trends: Avg Response Time & Error Rate

Maintain build history & preserve Neoload reports for each build.

Gains from NeoLoad + CI

Daily performance “pulse”

Gains from NeoLoad + CIJUnit test results based on SLA profiles

Gains from NeoLoad + CI

Collaborate.Easy to share.Link to the build.

Increased Collaboration.

NeoLoad Tests: Controlled by CIScheduled nightly.

Lessons learnedPitfalls to Avoid:

Using only “happy path” scripts Comparing results over long gaps time risky Comparing multiple short samples inaccurate Swap sharing the Load Testing environment bottlenecks Requiring involvement from Ops or perf. engineer bottlenecks

Your turn! Run NeoLoad using Continuous Integration

Step1: get a CI Server, setup for NeoLoad

We used an existing remote Jenkins server.

Use your existing remote CI serveror install Jenkins along side NeoLoad.

Step2: add CI step to run NeoLoadCmd

Neotys’ Jenkins Integration Guide explains how to configure –options

Step3: Install NeoLoad plugin for Jenkins

Step4: retrieve Neoload results

Jenkins Integration Guide explains how to incorporate NeoLoad results

Where to go from here?Best practices & Pro Tips:

Incorporate performance testing into every DevOps team Intelligent testing: only run load scripts that test the code that was

changed Reduce the amount of time & resources needed for load testing

For “hardening sprints”- setup a Stress test scenario. Run on-demand using CI

Make use of email alerts and chat notifications in CI

Best Practices: Setup SLA profiles

Setup SLA profiles so pass/fail criteria are bubbled up to CI results

Best Practices: Increase collaboration

Best Practices: Smoke test Smoke test first (low volume), then run full

Load Test