Web Form Testing
Registration Form Test Cases for the Complete Signup Lifecycle
A registration form has not succeeded merely because it displays "Account created."
- The form accepts valid data and rejects invalid data.
- Exactly one account is created.
- The account receives the correct initial status.
- Email or phone ownership can be verified.
- Verification activates the intended account only once.
- The user can complete the first login.
- The correct role, tenant, plan, consent, and onboarding state are assigned.
This guide contains 44 registration form test cases covering the complete journey from an anonymous visitor to an active authenticated user.
The Minimum Registration Smoke Test
When release time is limited, start with these ten scenarios.
| ID | Test | Failure it can reveal |
|---|---|---|
| REG-01 | Register with valid new-user data | The primary signup flow is broken |
| REG-04 | Inspect the account immediately after submission | No account was created or the initial state is wrong |
| REG-09 | Submit with required fields empty | Required-field validation is missing |
| REG-15 | Submit the valid form twice rapidly | Duplicate accounts or emails are created |
| REG-18 | Register with an existing email address | Duplicate identity protection is broken |
| REG-24 | Confirm that the verification email arrives | The account exists but cannot be activated |
| REG-27 | Open an expired or previously used link | Verification tokens remain reusable |
| REG-32 | Verify the account and inspect its status | The browser says verified while the account remains pending |
| REG-34 | Log in for the first time | Activation and authentication are disconnected |
| REG-44 | Run the complete flow in production | Environment-specific email, URL, role, or redirect configuration is broken |
The smoke set proves whether the primary registration path is operational. It does not replace the wider regression and security coverage below.
Define the Account State Model First
Before writing test cases, document the states through which a new account can move. A common lifecycle is:
Anonymous visitor -> registration submitted -> account created as pending -> verification message sent -> email ownership confirmed -> account activated -> first authenticated session -> onboarding or application access Possible alternative states include rejected duplicate, pending verification, verification expired, suspended, invited, partially onboarded and active.
The exact names are implementation-specific. The important requirement is that every transition has a defined trigger and expected result.
Account-state acceptance matrix
| Event | Expected account state | Expected user access |
|---|---|---|
| Form contains invalid data | No new account | No access |
| Valid form is submitted | Pending or equivalent | Only explicitly permitted pre-verification access |
| Verification message is sent | Still pending | No unintended authenticated access |
| Valid token is used | Active or onboarding-required | Access according to the assigned role |
| Expired token is used | Still pending | No access |
| Used token is opened again | State unchanged | No additional activation action |
| Duplicate registration is attempted | Existing identity remains unchanged | No second account |
| First login succeeds | Active | Correct application access |
| Role or tenant assignment fails | Must not silently grant elevated access | Fail safely |
Core Signup and Account-Creation Test Cases
| ID | Scenario | Expected result | Evidence |
|---|---|---|---|
| REG-01 | Register using valid, previously unused data | The signup request is accepted and the expected next step is displayed | Browser result, response and account identifier |
| REG-02 | Leave all genuinely optional fields empty | Registration succeeds without inventing validation errors | Created account and stored profile |
| REG-03 | Compare submitted profile data with the saved account | Values are mapped to the correct fields without truncation or swapping | Request payload and stored record |
| REG-04 | Inspect the account immediately after submission | Exactly one account exists in the defined initial state, usually pending verification | Database, admin panel or identity provider |
| REG-05 | Inspect the stored credential representation | The password is not stored or logged in plaintext and uses the approved password-storage mechanism | Restricted backend or security verification |
| REG-06 | Accept the required terms and submit | The account records the correct consent version, state and timestamp | Consent record or audit event |
| REG-07 | Decline required terms while accepting optional marketing consent | Registration remains blocked; optional consent does not override required consent | UI result and absence of account |
| REG-08 | Make account creation fail after the browser sends a valid request | No false success is shown, and no incomplete active account is silently created | Response, UI state and backend record |
Passwords should not be stored in plaintext or reversible form.
Registration Form and Validation Test Cases
This section covers the validation required to prove the signup lifecycle. A broader boundary and field-validation matrix belongs in the Form Validation Test Cases: Align UI and API Rules guide.
| ID | Scenario | Expected result | Evidence |
|---|---|---|---|
| REG-09 | Submit with all required fields empty | Submission is blocked and each missing field is identified | Visible error summary and field errors |
| REG-10 | Omit one required field at a time | Only the relevant requirement is reported | Field error and focus location |
| REG-11 | Enter malformed email addresses | Unsupported values are rejected before account creation | Error message and absence of account |
| REG-12 | Use a valid email containing a subdomain, plus tag or supported international characters | The address is handled according to the documented identity policy | Accepted or intentionally rejected result |
| REG-13 | Test password-policy boundaries | Exact valid boundaries are accepted; invalid values receive specific guidance | Validation result |
| REG-14 | Enter different values in Password and Confirm password | Registration is blocked without clearing unrelated fields | Error state and preserved form data |
| REG-15 | Double-click or repeatedly activate Create account | Only one account and one verification sequence are created | Request, account and email counts |
| REG-16 | Disable client-side validation and send invalid data directly | Server-side validation rejects the request | Server response and absence of account |
| REG-17 | Correct an invalid field and resubmit | The corrected form succeeds without requiring unrelated data to be re-entered | Successful retry |
Client-side validation improves feedback but can be bypassed, so the same acceptance rules must be enforced on the server.
Duplicate Account and Identity Test Cases
Duplicate prevention is not only a database constraint. The same identity may arrive through different casing, aliases, concurrent requests, invitations or authentication providers.
| ID | Scenario | Expected result | Evidence |
|---|---|---|---|
| REG-18 | Register with an email already linked to an active account | A second active identity is not created | Account count and response |
| REG-19 | Repeat registration using different email casing | Duplicate handling follows one consistent normalization policy | Account lookup and record count |
| REG-20 | Use plus addressing or another provider-specific alias | Behavior matches the documented identity policy rather than an accidental normalization rule | Created or matched identity |
| REG-21 | Send two valid registration requests for the same identity concurrently | A uniqueness constraint or equivalent control allows only one account | Concurrent responses and record count |
| REG-22 | Register with an email belonging to a pending account | The system follows the defined recovery or resend path rather than creating another pending account | Existing account state and email count |
| REG-23 | Register through password signup and social authentication using the same email | The application links, blocks or separates identities according to an explicit account-linking policy | Identity-provider records and final account count |
Do not guess how equivalent-looking email addresses should be merged. Normalization must be explicit and consistent across signup, login, verification, account recovery and email change.
Verification Email and Token Test Cases
| ID | Scenario | Expected result | Evidence |
|---|---|---|---|
| REG-24 | Complete valid registration and inspect the recipient mailbox | One verification message reaches the submitted address | Inbox or email-provider status |
| REG-25 | Inspect the verification message | Recipient, subject, branding, instructions and destination URL are correct | Message body and headers |
| REG-26 | Open a valid unused verification link | The intended account is verified and the user receives a truthful completion state | Browser result and account state |
| REG-27 | Open an expired verification link | Activation is rejected and the account remains pending | Error state and unchanged account |
| REG-28 | Open a verification link for the second time | The token cannot perform the activation operation twice | Token status and account audit |
| REG-29 | Modify, truncate or replace the token | The request is rejected without activating any account | Response and account state |
| REG-30 | Request a new verification message | Resend follows the defined token policy and does not create another account | Token records, account count and email count |
| REG-31 | Repeatedly request resend | Rate limiting or another abuse control prevents mailbox flooding while allowing legitimate recovery | Accepted and rejected resend attempts |
| REG-32 | Inspect the account after successful verification | The status changes once from pending to active or onboarding-required | State transition and timestamp |
| REG-33 | Attempt to use one user’s token for a different account or session | Only the account bound to the token can be affected | Account states and audit trail |
Verification links and codes should be bound to the intended identity, time-limited and single-use.
First Login, Role and Access Test Cases
Registration is incomplete when the account is active but cannot authenticate or receives the wrong access.
| ID | Scenario | Expected result | Evidence |
|---|---|---|---|
| REG-34 | Log in after successful activation | The new credentials create a valid authenticated session | Browser session and authenticated page |
| REG-35 | Attempt login before required verification | Access is blocked or restricted according to the defined account state | Login result and account state |
| REG-36 | Inspect the new user’s default role | The minimum intended role is assigned; no elevated permission appears accidentally | Role and permission record |
| REG-37 | Register through a tenant, organization, invitation or referral-specific route | The account joins only the intended tenant or relationship | Membership record and accessible resources |
| REG-38 | Open resources outside the assigned tenant or role | Authorization blocks horizontal and vertical access | HTTP result and visible UI |
| REG-39 | Inspect trial, subscription, credits, referral reward or signup bonus | Benefits are granted once and according to eligibility rules | Entitlement and audit records |
| REG-40 | Continue into onboarding | Required onboarding steps, progress and defaults match the new account type | Onboarding state |
| REG-41 | Log out and sign in again | The account remains active with the same correct role and tenant membership | New session and permissions |
A successful login does not independently prove correct authorization. Role, tenant membership and resource access must be checked separately.
Accessibility, Mobile and Abuse Test Cases
| ID | Scenario | Expected result | Evidence |
|---|---|---|---|
| REG-42 | Complete registration using only the keyboard and supported assistive technology | Fields, password controls, terms, errors and submission remain operable and understandable | Keyboard walkthrough and accessibility inspection |
| REG-43 | Complete the flow on supported mobile viewports using autofill or a password manager | Layout, virtual keyboard, autocomplete, password generation and verification handoff remain usable | Mobile run and screenshots |
| REG-44 | Exercise CAPTCHA, throttling, repeated signups and the production flow with controlled data | Legitimate registration succeeds while obvious abuse is constrained without creating false accounts | Rate-limit results and end-to-end production evidence |
CAPTCHA should be treated as one defence layer rather than proof that automated abuse is impossible.
The Most Important Registration Failure Patterns
Account created, but verification email missing
The form and account-creation API pass, but the user cannot continue. Check the email provider, queue, template, recipient, sender-domain configuration and retry policy.
Verification message delivered, but account not activated
The link opens successfully, yet the account remains pending. The visible confirmation is false unless the backend state transition also occurred.
Active account created before required verification
The user can authenticate or access protected features without proving ownership of the supplied address.
Two requests create two accounts
A disabled button is not sufficient protection. Duplicate prevention must survive rapid clicks, retries, concurrent API requests and delayed responses.
Correct account, wrong role or tenant
Signup appears successful, but the new user receives elevated permissions or access to another organization’s data.
Verification succeeds twice
Reopening the same link should not repeat account activation, rewards, referral credits, audit events or welcome workflows.
What Each Testing Layer Can Prove
| Testing layer | What it can verify | What it cannot prove alone |
|---|---|---|
| Browser test | Fields, validation, Submit state, visible errors, redirects and user-facing confirmation | Database state, password storage, real email delivery or server-side authorization |
| Registration API test | Request validation, uniqueness responses, state-transition contracts and error handling | Browser usability or actual inbox delivery |
| Database or identity-store check | Account count, status, identifiers, role, tenant and credential representation | User-visible behavior |
| Email-provider check | Message creation, recipient, delivery, template and link | Successful account activation after the link is opened |
| Authentication test | First login, session creation and pre-verification restrictions | Correct authorization across all protected resources |
| Authorization test | Role, tenant and resource boundaries | Signup form usability |
| Security review | Token handling, password storage, enumeration, abuse and privilege escalation | General UX and accessibility |
| Accessibility evaluation | Labels, keyboard operation, error announcements and input purpose | Backend identity correctness |
A browser test can prove that the page displayed "Check your email." It cannot independently prove that an account was stored with a safe password representation or that a real message reached the mailbox.
How to Select Registration Cases After a Change
| Changed component | Minimum regression scope |
|---|---|
| Form field or validation rule | Relevant positive, negative, boundary and retry cases |
| Create-account endpoint | Valid signup, duplicate submit, concurrent identity and backend failure |
| Database constraint | Existing identity, case policy and concurrent requests |
| Email provider or template | Delivery, content, link destination, resend and failure behavior |
| Verification-token logic | Valid, expired, reused, modified and cross-account tokens |
| Authentication service | Pre-verification login, activated login, logout and repeat login |
| Role or tenant mapping | Default role, invitation, tenant membership and unauthorized resource access |
| Signup bonus or trial rules | Initial grant, duplicate identity, repeated activation and audit trail |
| CAPTCHA or abuse controls | Legitimate signup, repeated requests, resend limits and recovery |
| Deployment configuration | Full minimum smoke set in the target environment |
Do not run every scenario with the same priority. Choose the cases that cross the component changed and the state transitions it controls.
Automating Registration Test Cases
Many browser-visible scenarios can reuse one flow:
Open the registration page
Fill {{NAME}}
Fill {{EMAIL}}
Fill {{PASSWORD}}
Fill {{CONFIRM_PASSWORD}}
Set {{TERMS_STATE}}
Click "Create account"
Assert {{EXPECTED_SIGNUP_RESULT}} Named cases can supply different values:
Valid new user
Missing required field
Invalid email
Password mismatch
Existing account
Duplicate submit
Backend error A second reusable flow can cover verification:
Open verification message
Follow {{VERIFICATION_LINK}}
Assert {{EXPECTED_VERIFICATION_RESULT}}
Open login page
Fill {{EMAIL}}
Fill {{PASSWORD}}
Click "Log in"
Assert {{EXPECTED_ACCESS}} Keep the signup and verification flows separate when they fail for different reasons or rely on different systems.
For the reusable-flow method, read the Web Form Testing guide.
What Should Not Be Proven by Browser Automation Alone
Do not rely on a browser assertion to prove secure password hashing, token randomness, email deliverability across providers, absence of account enumeration, complete server-side authorization, high-volume abuse resistance, every assistive technology, or protection against injection and privilege escalation.
Browser automation remains valuable because it proves that users can complete the visible journey and that frontend states correspond to the observed responses.
Test-Data and Cleanup Strategy
Registration tests create persistent identity data. Without cleanup, the suite eventually fails because every supposedly new email already exists.
Unique identities per run
Generate a unique, traceable test address for each run: qa-registration+{{RUN_ID}}@example.test. Use this only when the mailbox and application identity policy support the selected addressing format.
Controlled account deletion
Delete synthetic accounts through an approved API, admin operation or test fixture after execution.
Resettable isolated environment
Restore the registration database or identity provider to a known state before the suite.
Reusable account states
Maintain fixtures for known account states: new identity, pending verification, active user, deactivated user, existing social identity and invited user.
Safe Production Registration Monitoring
A production registration smoke test can detect broken deployment configuration, incorrect verification URLs, email-provider failure, missing environment variables, incorrect redirects, broken tenant assignment and failed onboarding handoff.
Use a dedicated synthetic email domain or controlled mailbox, an identifiable test-user prefix, a non-production tenant where possible, suppressed marketing communication, excluded analytics or a synthetic marker, automatic cleanup, low execution frequency and no real personal information.
Do not let synthetic accounts consume paid seats, trigger commissions, enter campaigns, receive real production privileges, affect reporting or remain indefinitely in the user database.
Frequently Asked Questions
Is registration complete before email verification?
That depends on the product’s state model. The account may be created as pending, but it should not receive active-user access before the required verification transition is complete.
Should duplicate registration reveal that an account already exists?
This is a product and threat-model decision. Whatever policy is selected must be consistent across registration, login and account-recovery flows.
Can a UI test prove that passwords are stored securely?
No. A browser test can verify password-field behavior and the visible registration result. Password hashing and storage require an authorized backend or security-layer verification.
Registration Testing Checklist
Before approving a signup flow, confirm that valid new users can submit, invalid values do not create accounts, one signup creates exactly one identity, the initial account state is correct, required consent is recorded accurately, duplicate identities follow one documented policy, verification messages reach the intended recipient, tokens expire and cannot be reused, successful verification changes the correct account state once, unverified users cannot receive unintended access, first login works, the default role and tenant are correct, signup benefits are granted once, errors are accessible and recoverable, mobile and password managers remain usable, abuse controls do not block normal users, synthetic accounts can be traced and removed, and production configuration has been checked safely.
Final acceptance criterion. The final acceptance criterion is not: "The registration form displayed a success message." It is: "One intended identity was created in the correct state, ownership was verified once, and the user received the correct authenticated access without duplicate accounts or elevated privileges."
Automate the Repeatable Browser Layer
WrightTest lets teams record a reusable registration flow, replace fixed values with named test-case variables, run each case independently, and inspect screenshots, errors, step results and Playwright traces.
The browser checks can be exported to native Playwright .spec.ts files when they need to move into an existing repository or CI pipeline.
Use WrightTest for the repeatable browser journey, then combine it with the appropriate email, identity-store, authentication, authorization and security checks for the complete registration lifecycle.