Manual Testing
Manual Testing Tutorial for Beginners
Learn manual testing step by step with beginner-friendly QA examples, test case ideas, bug reporting tips, and a practical testing workflow.
Manual testing is the process of checking software by using it like a real user, comparing its behavior with requirements, and documenting problems without relying on automated scripts for the main execution. It combines planned checks with human observation, investigation, and judgment.
This tutorial gives QA beginners a repeatable workflow they can use on a login page, checkout, profile form, or almost any web feature. You will learn how to read a requirement, identify risks, prepare test data, write useful test cases, execute them, report bugs, and decide what should later become regression automation.
If terms such as expected result, regression, and test level are new, first read what software testing is. You can still follow this tutorial with no coding experience.
What Is Manual Testing?
In manual testing, a person performs the test actions and evaluates the outcome. The tester may click through a browser, use a mobile app, inspect browser developer tools, query a database, or send a request in an API client. "Manual" describes how the check is executed; it does not mean careless, undocumented, or limited to the user interface.
A useful manual test has four parts:
- A condition: the application state, user role, environment, and test data.
- An action: what the tester does.
- An oracle: the requirement or other source used to decide what should happen.
- An observation: the actual result and any evidence needed to evaluate it.
For example: given an active account with five failed login attempts, when the user submits the correct password, the documented account-lock rule says access should remain blocked. If the dashboard opens instead, expected and actual results differ in a security-relevant way.
Manual testing is strongest when a human needs to adapt. A tester can notice confusing copy, follow an unexpected state, vary inputs, ask a product question, or investigate a console error that was not part of a predefined script.
When QA Engineers Use Manual Testing
Teams commonly choose manual execution for:
- New features. Behavior and design may still be changing, so exploration produces faster learning than maintaining scripts.
- Exploratory testing. The tester designs and executes tests at the same time, using each observation to guide the next check.
- Usability and accessibility reviews. Human judgment helps evaluate clarity, feedback, navigation, focus, and recovery.
- Unclear requirements. Manual investigation can expose gaps before the team encodes assumptions in automation.
- Bug reproduction. A tester varies environments, accounts, data, and actions to isolate the failure.
- One-time edge cases. Some scenarios matter enough to check but are too rare or expensive to automate.
- Pre-automation validation. A tester learns the stable behavior, data needs, and failure signals before writing code.
- Visual and cross-device checks. A person can quickly inspect layout, clipping, content, and interaction differences.
Manual testing remains necessary even on highly automated teams. Automation repeats known expectations. People discover new risks, interpret ambiguous behavior, and decide which expectations are worth repeating.
The Manual Testing Workflow
Use the following nine-step loop. The amount of documentation should match the risk and team, but the thinking remains useful at any scale.
| Step | Main question | Typical output |
|---|---|---|
| 1. Understand | What should the feature do, and for whom? | Clarified requirement and acceptance criteria |
| 2. Identify conditions | What normal, invalid, boundary, state, and role cases matter? | Test conditions or coverage map |
| 3. Prepare data | Which accounts, records, and environment states are required? | Controlled test data |
| 4. Design tests | Which cases need detailed steps, and which need a checklist? | Test cases and exploratory charter |
| 5. Execute | What actually happens under each condition? | Results and observations |
| 6. Record | Which tests passed, failed, or were blocked? | Updated status and evidence |
| 7. Report | Can another person reproduce and understand the problem? | Actionable bug report |
| 8. Retest | Does the fix solve the original problem without an obvious regression? | Fix verification and focused regression result |
| 9. Improve coverage | Which stable, valuable checks should be repeated? | Regression suite or automation candidate |
Step 1: Understand the requirement
Start with the user goal, not the buttons. Read the story, acceptance criteria, design, business rules, error copy, analytics needs, and supported platforms. Mark assumptions and ask concrete questions.
For a login feature, useful questions include:
- Are email addresses case-sensitive?
- What is the minimum and maximum password length?
- How many failures trigger an account lock?
- How is the user told that an account is locked?
- Does a successful login return the user to the page they originally requested?
- How long does a session last?
- What happens in two open browser tabs after logout?
Do not silently invent answers. An unresolved requirement can be a testing blocker or a product risk worth recording.
Step 2: Identify test conditions
A test condition is a behavior or risk to check. Build a compact coverage map before writing detailed steps.
Consider these categories:
- happy path and common alternatives;
- missing, invalid, and malformed input;
- minimum, maximum, just-inside, and just-outside boundaries;
- user roles and permissions;
- new, active, locked, expired, or deleted states;
- interruptions, retries, refreshes, back navigation, and multiple tabs;
- slow or failed network responses;
- supported browser, device, keyboard, and accessibility behavior;
- connected systems, saved data, email, or notifications;
- privacy and security risks appropriate for functional QA.
Prioritize by impact and likelihood. A payment total error matters more than a minor spacing inconsistency. A recent authentication change deserves more attention than an untouched low-risk settings label.
Step 3: Prepare test data
Uncontrolled data causes misleading results. Record which account and state each test needs.
For login testing, prepare:
- an active user with verified email;
- a user with an incorrect-password history below the lock threshold;
- a locked or deactivated user;
- a user for each meaningful permission role;
- a known password that meets the current policy;
- access to reset or restore the account after destructive tests.
Never use real customer credentials or sensitive production data for practice. Use an approved test environment and synthetic accounts. If tests share an account, coordinate changes so one tester does not invalidate another tester's result.
Step 4: Choose test cases, checklists, and charters
Use a detailed test case when the workflow is high risk, needs consistent repetition, depends on exact data, or must be handed to another tester. Use a checklist for familiar, low-complexity coverage. Use an exploratory charter when the objective is to investigate a risk and adapt based on observations.
An exploratory charter might say:
Explore login session behavior across logout, refresh, back navigation, multiple tabs, and direct protected URLs. Focus on unintended access after the session should end. Time box: 30 minutes.
The charter gives direction without predicting every useful action.
Step 5: Execute carefully
Confirm the build, environment, account state, and data before starting. Follow the case when consistency matters, but do not ignore unexpected behavior outside the written steps. Record the exact input and state that produced a result.
Avoid changing several variables at once during investigation. If login fails on mobile Safari with a locked account and poor network connectivity, simplify conditions one at a time to isolate what matters.
Step 6: Record results
Use clear statuses:
- Pass: actual result matches the confirmed expectation.
- Fail: actual result differs from the confirmed expectation.
- Blocked: the test cannot run because a dependency, environment, access, data, or unresolved rule prevents it.
- Not run: execution has not started.
"Blocked" is not a softer version of fail. Record the blocker and owner so the team can distinguish product defects from unavailable test conditions.
Step 7: Report bugs clearly
A useful report contains:
- concise title with behavior and condition;
- environment, build, browser, device, and account state;
- preconditions and exact test data, excluding secrets;
- minimal reproducible steps;
- expected result;
- actual result;
- frequency, such as 3 of 3 attempts;
- impact and affected user;
- screenshots, video, console errors, network request IDs, or logs when useful.
Avoid assigning technical root cause unless you have evidence. Report "dashboard opens for a locked account" instead of guessing "authentication cache is broken."
Step 8: Retest the fix and regress nearby behavior
Recreate the original condition and use the same steps and data when possible. Then check nearby risks. If a fix prevents locked users from entering, also confirm that active users can still sign in, errors remain safe, the unlock path works, and logout still ends the session.
Retesting answers, "Was this defect fixed?" Regression testing asks, "Did the change damage behavior that already worked?"
Step 9: Decide what deserves repeat coverage
Add a case to the manual regression set when it protects an important, stable rule. Consider automation when the case is repeated often, deterministic, valuable, and supported by controllable data and environment setup.
Do not automate a confusing requirement simply to stop executing it manually. Clarify and stabilize the behavior first.
Practical Example: Testing a Login Page
Assume the requirement says:
An active registered user can log in with a valid email and password. Invalid credentials show "Email or password is incorrect." Five consecutive invalid attempts lock the account. Logout ends access to protected pages.
1. Translate the requirement into test conditions
- valid active user;
- wrong password and unknown email;
- blank and malformed fields;
- attempts immediately before, at, and after the lock boundary;
- locked and deactivated users;
- password masking and show-password control;
- forgot-password link;
- logout, back button, and protected URL access;
- supported browser and keyboard behavior;
- slow or failed authentication response.
2. Note requirement gaps
The requirement does not say how long the lock lasts, whether failures must be consecutive, whether success resets the counter, or how locked users recover. Ask these questions before marking the related tests pass or fail.
3. Prepare accounts
Create an active user, a locked user, and an account whose failure count can be reset. Confirm the test environment can deliver password-reset email or provide an approved mail-capture tool.
4. Execute focused coverage
Start with the critical happy path to confirm the build is testable. Then cover validation and account states. Finish with session, browser, accessibility, and exploratory checks. If a serious defect appears, pause dependent tests, report it, and assess which results are now blocked or unreliable.
Manual Test Case Template and Login Examples
Copy this structure into a spreadsheet, test management tool, Markdown file, or portfolio document.
| Test ID | Scenario | Steps | Test Data | Expected Result | Actual Result | Status |
|---|---|---|---|---|---|---|
| LOGIN-001 | Active user logs in | 1. Open login. 2. Enter valid email and password. 3. Select Log in. | Active user | Correct user's dashboard opens; authenticated session begins | Fill during execution | Not run |
| LOGIN-002 | Wrong password is rejected | 1. Open login. 2. Enter active email and wrong password. 3. Select Log in. | Active email, wrong password | Login stays blocked; general credential error appears; no session begins | Fill during execution | Not run |
| LOGIN-003 | Blank email is validated | 1. Open login. 2. Leave email blank. 3. Enter a password. 4. Submit. | Blank email | Required-field guidance identifies email; request is not accepted | Fill during execution | Not run |
| LOGIN-004 | Password remains private while typed | 1. Focus password. 2. Type a value. 3. Inspect visible characters. | Valid-format password | Characters are masked; accessible field name remains available | Fill during execution | Not run |
| LOGIN-005 | Fifth failure locks account | 1. Reset failure count. 2. Submit wrong password five times. 3. Submit correct password. | Resettable active user | Account follows confirmed lock and recovery rules; correct password does not bypass lock | Fill during execution | Not run |
| LOGIN-006 | Forgot-password path opens | 1. Open login. 2. Select Forgot password. | None | Password-reset flow opens and identifies the information required | Fill during execution | Not run |
| LOGIN-007 | Logout ends protected access | 1. Log in. 2. Log out. 3. Use Back. 4. Open protected URL directly. | Active user | Protected content is not available; user is directed to authenticate | Fill during execution | Not run |
For production work, add columns only when they improve decisions. Useful additions include priority, preconditions, requirement ID, environment, owner, execution date, and evidence link. A table with twenty unused columns creates maintenance work without improving testing.
How to Write Useful Manual Test Cases
Name the behavior, not the click sequence
"Locked user cannot access the dashboard" is easier to understand than "Click login button test." The title should explain the condition and outcome.
State preconditions explicitly
If the account must be active, verified, and one failure below the lock threshold, say so. Hidden preconditions make another tester's result unreliable.
Use precise but maintainable steps
Write enough detail for the intended reader. "Submit the login form with the active test account" may be sufficient for an experienced team. A regulated handoff may require numbered actions and exact data references. Do not describe every mouse movement when labels and workflow are obvious.
Make the expected result observable
Avoid "works fine," "successful," or "correct error." State what appears, changes, remains blocked, or is stored. One case may contain several related observations, but split it when a failure would otherwise be hard to locate.
Include negative and boundary cases
Positive testing shows that accepted input works. Negative testing shows that invalid or forbidden actions fail safely. Boundary testing targets values near limits, such as 4, 5, and 6 failed attempts around a threshold of 5.
Keep cases independent when practical
One failed case should not invalidate the next ten. Reset state, create dedicated data, and avoid assuming tests always run in a fixed order. When a sequence is the behavior under test, document it clearly.
Test Case, Checklist, or Exploratory Session?
| Format | Best use | Example |
|---|---|---|
| Detailed test case | High-risk rule, handoff, auditability, exact data, or repeatable regression | Account locks at the confirmed threshold |
| Checklist | Familiar feature and lightweight repeat coverage | Labels, tab order, masking, forgot-password link |
| Exploratory charter | Discovery, ambiguity, usability, or complex state interactions | Explore session behavior across tabs and navigation |
Mature manual testing uses all three. Writing longer cases for every obvious observation can reduce the time available for actual investigation.
Example Bug Report
Title
Locked account reaches dashboard when correct password is submitted after five failed attempts
Environment
- QA build 2026.07.21.2
- Chrome on macOS
- Synthetic account
locked-user-02with failure count reset before execution
Preconditions
- Account is active and email is verified.
- Requirement states that five consecutive failures lock the account.
Steps
- Open the login page.
- Submit the account email with an incorrect password five times.
- Submit the same email with the correct password.
Expected result
The account remains locked according to the requirement, no authenticated session begins, and the user receives the approved recovery guidance.
Actual result
The dashboard opens and displays the account's private content. Reproduced 3 of 3 times after resetting the account state.
Impact
The documented protection against repeated password attempts can be bypassed by supplying the correct password after the threshold. The affected account's session and private data become accessible.
Attach a short recording and relevant network request identifier if policy permits. Do not include the password or session token.
Manual Testing vs Automation Testing
| Decision area | Prefer manual testing when | Prefer automation when |
|---|---|---|
| Behavior maturity | Requirements or UI are changing | Rules and interfaces are stable |
| Purpose | Discover, investigate, or judge usability | Repeat a known expectation consistently |
| Frequency | One-time or infrequent | Runs on builds, releases, or many data combinations |
| Result | Needs human interpretation | Has deterministic pass/fail signals |
| Data | Requires flexible human setup | Can be created, isolated, and cleaned reliably |
| Maintenance | Script cost exceeds repetition cost | Long-term repetition justifies code ownership |
Manual testing is not less skilled or less important. It develops the test-design thinking that useful automation depends on. Automation makes repeatable checks faster; it does not decide which product risks matter.
After you can design and execute API checks manually, learn what API testing is and practice requests in the Postman REST API testing tutorial. When stable checks need code, use the QA Automation Engineer Roadmap to choose your next skills.
Common Beginner Mistakes
- Testing only what the requirement says word for word. Also investigate omissions, state changes, invalid use, and user recovery.
- Running without controlled data. Unknown account state makes passes and failures difficult to trust.
- Using vague expected results. "Works correctly" cannot guide execution or diagnosis.
- Mixing expected and actual results. Expected comes from the confirmed rule; actual records what happened.
- Changing many conditions during reproduction. Isolate one variable at a time.
- Writing a novel for every test. Use checklists and charters when detailed steps do not add value.
- Reporting without impact or evidence. Help the team reproduce, prioritize, and investigate.
- Retesting only the exact failing click. Restore the original state and check related behavior.
- Starting automation before test design. Code cannot rescue a weak or ambiguous test.
A Practice Exercise You Can Complete Today
Choose a public practice site or a small application you own. Do not probe systems without permission.
- Write a one-paragraph login requirement.
- List ten test conditions across happy path, negative, boundary, state, accessibility, and session categories.
- Identify three unanswered requirement questions.
- Prepare two synthetic accounts.
- Write three detailed cases using the template above.
- Create a 20-minute exploratory charter.
- Execute, record actual results, and save non-sensitive evidence.
- Write one sample bug report, clearly label it as a portfolio example if it is not a real defect.
- Summarize what was tested, what was blocked, and what risk remains.
This package can become the first project in a beginner QA portfolio. The QA tester career roadmap explains how to present it honestly and build two complementary projects.
Manual Testing Completion Checklist
- Requirement and user goal are understood.
- Open questions and assumptions are recorded.
- Critical, negative, boundary, role, and state conditions are prioritized.
- Approved environment and synthetic test data are ready.
- Detailed cases, checklists, and charters are used appropriately.
- Actual results and statuses are recorded consistently.
- Defects contain reproducible steps, impact, environment, and safe evidence.
- Fixes are retested from the correct initial state.
- Nearby regression risk is checked.
- Untested scope, blockers, and remaining risk are communicated.
- Stable high-value cases are considered for future regression automation.
Frequently Asked Questions
What is manual testing in simple words?
Manual testing means a person uses software, compares what happens with what should happen, and investigates or reports meaningful differences. The person executes and evaluates the check instead of relying on a script to do it automatically.
Is manual testing still needed?
Yes. New features, exploration, usability, accessibility, unclear behavior, bug investigation, and unusual state combinations require human observation and adaptation. Automated checks support manual work by repeating stable expectations.
How do I start manual testing?
Choose one feature with a clear requirement. Identify normal and failure conditions, prepare controlled data, write a few observable expected results, execute carefully, and record what happened. Focus on testing logic and clear communication before collecting tools.
What are examples of manual testing?
Examples include testing login with valid and invalid accounts, exploring a cart when quantities and stock change, checking a form with keyboard navigation, reproducing a mobile layout defect, validating a password-reset flow, and inspecting an API response manually in Postman.
Do manual testers need coding?
Coding is not required to begin. Manual testers benefit first from requirements analysis, test design, browser developer tools, bug reporting, API basics, SQL, and communication. Coding becomes useful for repeatable setup, utilities, and automation growth.
Should I learn manual testing before automation?
Yes. First learn how to recognize risk, design a valuable check, define an observable expected result, control data, and report failure. Then automate stable cases whose repetition justifies the maintenance cost.
Continue Your QA Practice
Apply the workflow to a cart or checkout next. Pay attention to quantity boundaries, stock changes, totals, saved state, roles, interruptions, and recovery. Keep each project small enough to finish, but detailed enough that another tester could understand your decisions. Find more references in SuperSQA tutorials and cheat sheets.
