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 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 out ten things you should learn before learning about performance testing and its tools. There is no end to learning stuffs. 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 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 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 a 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 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 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 which 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 which define its 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 in troubleshoot the issues.
Most of the performance issues you face might be around 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 if I missed anything.