Ten Things You Should Learn Before Learning About Performance Testing
So, you want to learn about performance testing and progress towards performance engineering or DevOps or Site Reliability Engineering? Find out more below!
Join the DZone community and get the full member experience.Join For Free
So, you want to learn about performance testing and progress towards performance engineering or DevOps or Site Reliability Engineering. I get it. Jumping directly into performance testing might be overwhelming. I was directed to learn the tool, then the performance concepts. It is like, learning to swim by directly jumping into the pool. Either someone needs to save you from drowning if things go south, or if you are smart enough, you can manage. I was able to manage myself to learn the performance concepts parallel while learning the performance testing tool around a decade ago.
I do not want you to go down that route. In this blog post, I am going to list ten things you should learn before learning about performance testing and its tools. There is no end to learning stuff. But I have highlighted the essential and fundamental concepts you may need to go through for your performance testing trip.
It is not required to be an expert in the below-mentioned topics by learning everything. I would expect you to know at least what it is, how it is, and why it is. There are many online courses available for free on YouTube, Free Code Camp, Edx, Coursera, or in your local library.
One of the famous quotes from the management expert Peter Drucker is "If you can't measure it, you can't improve it." As a performance tester, you help to improve the performance of the software.
Predominantly, you will be working on web or mobile applications, web services, client-side performance, operating systems, database performance, etc. One common entity among these things is the network.
Explore and learn about the history of networking, ARPANET, internet, intranet, network layer, IP v4, IP v6, networking services such as DNS, DHCP, NAT, etc., wired, wireless, cellular, and basic network troubleshooting.
Protocols are the backbone of any communication. It defines a set of rules that determine how data is transmitted between the devices in a network. Commonly known protocols are HTTP, HTTPS, DNS, TCP, UDP, ICMP, DHCP, FTP, SSH, RDP, SMTP, etc.
Do quick research into the protocols and their evolution. Deep-dive into the Open System Interconnection (OSI) model and TCP/IP model.
Learn about modern protocols such as gRPC, IPFS, etc. Knowledge of protocol is critical to an understanding of your application and its architecture. In some instances, you may need to read the data packets to troubleshoot the issues.
Love it or hate it, you need to refresh the statistics which you studied in school or college. Learn about the mean, median, average, percentile, interquartile, standard deviation, etc. Formulas such as Little's Law, capacity planning concepts, arrival rate will be very useful once you progress.
Learn about how to correlate data, plot charts/graphs, create a trend report, benchmarking, etc.
Everyone uses a browser to interact with the applications. Browsers play a critical role in user experience and performance. If the application renders slowly due to network, front-end libraries, backend, or latency on the browser, it will have a negative impact on the brand and revenue.
As a performance tester/engineer, you need to understand how a browser works and how you can leverage the browser developer tools and extensions to debug the performance.
You do not need a sophisticated performance testing tool to measure the performance. Just by sending a ping command, you can measure the latency or by leveraging the browser developer tools, you can debug the HTTP requests or DOM elements.
In your leisure time, you can learn various utilities such as cURL, HTTP Pie, MITM Proxy, Fiddler, Wireshark, and more. Also, explore Linux commands such as top, htop, netstat, dig, ip, tcpdump, etc.
Servers are powerful workstations that share resources such as disk, network, computations, and more on a network. Servers could be a part of a very simple two-tier or multi-tier architecture, or part of a distributed microservice architecture that scales deep based on the usage.
As a performance tester/engineer, you need to understand how the HTTP request traverses among the hops and returns the response to the client.
There are multiple types of servers that define their functionality. The most commonly known types of servers are application servers, web servers, database servers, mail servers, FTP servers, proxy servers, virtual servers, telnet servers, etc.
Understand the various aspects and functions of the server and its configuration, such as operating system type, architecture type, CPU and its cores, memory, disk, network, etc. You need to be well aware of the production configuration and stage configuration.
Data is ubiquitous. Everything is data. After learning about database server configuration, it is important to know about database software. i.e. backend database applications.
Commonly known database software are Oracle RDBMS, Microsoft SQL, CouchDB, Neo4j, MariaDB, Amazon RDS, MongoDB, CockroachDB, etc.
Learn about database query language, IDE, how to navigate around schema and tables, configuration, statements, etc. This will help you to prepare the test data and help us troubleshoot the issues.
Most of the performance issues you face might be around the database layer.
Load balancers help to distribute the tasks among different entities in the network. It can optimize the performance by distributing the load and avoid overloading the servers. It could be either via hardware or software.
Widely used software-based load balancers are Nginx, HAProxy, Amazon ELB, Azure Load Balancer, Varnish Software, Traefik, etc.
Try to understand the load balancers algorithm, configuration, and how it works.
The frequently used objects are stored in the cache layer instead of reading them from the disk. This improves the performance drastically, reduces the load, increases the throughput, and has many advantages.
Learn about Content Delivery Network, Cache software, and its configuration, Session Management, NoSQL database,
Learn Linux right now. If you are not working on a distributed microservice architecture, you will soon. Learn frequently used Linux commands, how to ssh, how to use grep/awk/sed, how to spin up a Linux box and run the test, how to create a user, how to install docker or Kubernetes, bash scripting, regular expressions, file operations, text editors, shell, etc.
Apart from the above ten things, you need to learn about Git, Python scripting, container technologies such as docker, podmad, LXD, etc., container orchestration such as Kubernetes, Docker Swarm, etc., Grafana, Prometheus, InfluxDB, Observability solutions like Jaeger, Dynatrace, New Relic, HoneyComb, Elastic and more. The list is infinite.
A performance tester/engineer should be like a "Jack of all trades, master of none," but you should be a master of performance testing and engineering at the core. Please add in the comments if I missed anything.
Published at DZone with permission of NaveenKumar Namachivayam, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.