This is the second of two articles discussing the topic of Test Environments and Testing Practices. The first one, "Baselining--Stress Testing--Performance Testing--Oh My--Part One--Environments," focused on proper testing environment design. This article is focused on what you do with them once they have been created--Network and Application Testing.
When one is performance testing, what is REALLY being tested? Is it the Application, the Network, the Desktop, the WAN? Having done a performance test of one, do you then know something about the others? Not really.
What is the difference between Stress Testing, Load Testing and Baselining? Are they just different ways to say the same thing? No.
What, if any, is the consequence of using these terms interchangeably? After all, we all know what we mean--don't we? It is common for various teams that are really trying to cooperate with each other to founder. Sometimes it is because they thought that they had all agreed with each other--but discovered that each of them had a very different understanding of what is was to which they had all agreed. Semantics matter. This is not limited to IT by any means, yet, this article is focused on IT--one very specific part of IT, namely the processes used by IT to Test Performance.
TESTING DEFINITIONS:
Baseline Testing: Focus is on how long a single transaction, or set of transactions, take for a normal user during normal conditions.
Only a single user is tested. Best if can be done SAFELY during production hours. After all, that is when users will experience any issues. A baseline that tells how the transaction functions under ideal conditions will only make any production environment seem too slow.
- Test from each satellite location (if applicable).
- Use a Packet- Sniffer running locally to the test user. Something like Wireshark running on the
host PC--if using live test users.
- A packet-sniffer like WireShark listening to a port mirror in a switch in front of the device running the script--if using a form of virtual user.
- Capture the transaction while testing.
- Save capture, test again.
BESTline Testing: (Our Term), describes a test that is performed to determine the best possible time an application can be reasonably expected to provide.
- Attempts to eliminate all non-application issues such as the Network and WAN.
- Use workstation most local to first tier servers
- If possible, relocate switch port for workstation onto the same ASIC.
- If possible, recreate the second and other tiers, as locally to the first tier as possible.
Application Profiling: Provides a packet level and protocol level description of what is taking place with an application--across a network wire.
- How many TCP connections are used?
- What is the nature of the communication at the packet level?
- Many small connections or a few large connections?
- What form of SMB is used?
- What is the size of the files it “must” transport such as DLLs, EXEs, Java Applets, etc.
- What are the size of required Cookies and Tokens?
- HTTP usage For example, POST or GET? etc.
- May also result in an Interpath Application Flow Diagram.
Application Profiling will be the topic of a dedicated article/podcast soon.
Performance Testing: Focus is on DEV, QA, or UAT.
Stress Testing: Attempts to see how much a system can handle before the system degrades below acceptable parameters or fails. Utilizes simulated users generated by a tool such as LoadRunner or some other tool that generates virtual users.
Load Testing: Different than Stress Testing in that it attempts to induce Minimal Load. Steered towards a specific target based on a Capacity Planning goal.
Single Transactional Testing: Attempts to see exactly what is happening in a transaction from the packet level.
- May involve many monitoring locations along the application's pathway.
- Requires in-depth packet analysis, but provides the best possible vision of how the application is performing the transaction(s) in question.
If one team is planning a Stress Test, but calling it a Baseline Test-- would it matter? Well, do they intend to try it in PROD? Ouch! You probably wouldn't want any kind of load in PROD. What if they really meant Baseline, but said Stress Test? While their actions would be safe, someone would jump up on a chair and say, "Stop!" That could damage team rapport and cause long and unnecessary delays.
Creating valid testing environments and then designing appropriate test plans are critical to creating stable architecture and applications. Many IT organizations of all sizes do not have what they need in this regard.
What about a real lab? Do you do any form of Device Certification on new load balancers, or WAN Optimizers, or Switches, or Routers, or Firewalls, or NIDS, or other Testing Tools themselves? Accurate testing, (accurate being the key word here) is far less common than it should be.
Of course, now you have another question. What about Capacity Planning?
Stress And Performance Testing
This article is available as a podcast on "The ROOT Cause" podcast series available at iTunes.
This is the first article of a series of two and lays out where you test--not the details of how. The second article is, "Baselining--Stress Testing--Performance Testing--Oh My--Part Two--Differences." It drills down in the goals and processes of the various types of testing strategies--not where they are done.
What testing environments does your organization maintain? DEV, QA, UAT, Parallel Production? There is great variation in the way different organizations use and design these environments. Some are more useful than others.
TESTING ENVIRONMENTS
DEV: This is just for developers and very seldom sees Application Profiling or Stress Testing. But, why not? Wouldn't it benefit developers to see how their code works across a network? It can be a single PC under someone's desk--running services and applications representing all the Tiers of the Production environment, or it can be quite robust.
QA: This is not really the best environment for clients, end-users or business users to do Acceptance Testing. Nevertheless, it is very common for it be used that way. This is where code that has been tested in DEV goes to be tested by other teams--vigorously. It most certainly should be Stress Tested and fully analyzed by Application Profiling at this point.
While there may be different levels of QA, this environment is often too small. In order to be most useful in its role of anticipating the applications performance in PROD, it needs to be large enough to simulate such an environment. Consider making it a SCALED down version of PROD. I mean that literally. If it were a copy of PROD, more or less to scale--its performance would be much more transferable to a PROD reality. It is unlikely to be the same size--but can it be one quarter the size? How about one tenth? The size is less important than having a consistent ratio--keeping it to scale so that metrics are convertible.
Another Best Practice in the QA environment is to use production data wherever possible. Since no clients ever use it (see UAT), and it mirrors the security offered by PROD (I hope), this may be done safely. Then the Databases have the same characteristics--keeping the outcome closer to reality.
UAT (User Acceptance Testing): Where clients, end users and business users can go to test functionality and acceptability of the code. Unfortunately, this role is too often seen performed in the QA environment. However, with a dedicated UAT Environment, you can present clean information in an environment that is not subject to the same "slings and arrows" that are thrown at QA. Here the Client can do what they want. The goal for them here is to test functionality, not load. However, if they want to test load, they can do so. Therefore, it is best to build this environment to scale as well. Nevertheless, the ratios can be such that the UAT environment is smaller than QA. What matters most is that it function as close to PROD as possible.
PARALLEL PRODUCTION: This is a very valuable subset environment of UAT. Here we set up a "ready for prime time" version. It runs on PROD hardware in PROD networks, but in UAT volumes or other forms of segregation. The goal is to see how close to reality you can get using as much production equipment and environment as possible--without breaking PROD. It's not as difficult or dangerous as it sounds when planned out well and can save MILLIONS of DOLLARS in lost time and productivity--not to mention careers.
Here is how this works. You have volumes and directories on your non-prod servers. Create new and comparable volumes and directories on the same PROD servers that you plan on using for the application and put the data there. It is now running on a the PROD box--but not completely in the PROD environment.
Yes--there are issues with DNS and other such things, but they can be worked out for a set of Test Users. Remember, this is going LIVE very soon. Don't you want to find out what will happen with a way to rollback easily? This is NOT an alternative to UAT or QA. It happens after the application has passed all of those tests. It is an alternative to going straight into PROD. If you have sufficient doubts about the application or configuration, so that a Parallel Production test seems scary--you shouldn't be planning on going live yet. This is an additional step--it does not replace anything. Well, it does replace going straight from UAT to PROD--but that is a good thing.
Barry Koplowitz has sinced written about articles on various topics from Computers and The Internet, Gardening and Cars. Barry Koplowitz founded in 1999. He was an instructor for Network General and NAI traveling around the USA teaching for Sniffer Unive. Barry Koplowitz's top article generates over 18100 views. to your Favourites.
Australian Trees And Shrubs For example, a fertilizer labeled as 10-10-10 contains 10 percent N, 10 percent P2O5 and 10 percent K2O. The remaining 70 percent is usually inert filler