Skip to content

Getting Started QA

Mathew Storm edited this page Jul 29, 2025 · 1 revision

🔍 QA Engineer Onboarding - Testing for Every Student

Welcome QA engineers! Let's ensure EduLite works flawlessly for students everywhere - from high-speed fiber to 2G connections.

🎯 What You'll Test

As a QA engineer for EduLite, you'll ensure:

  • 🌍 Global reliability across all network conditions
  • 📱 Device compatibility from old phones to new laptops
  • ♾️ Lightweight functionality that actually works
  • Accessibility for all abilities
  • 🔐 Security of student data

📋 Prerequisites

Required Skills

  • Testing mindset (breaking things creatively!)
  • Attention to detail
  • Basic technical knowledge
  • Communication skills

Nice to Have

  • API testing experience
  • Automation knowledge
  • Performance testing
  • Accessibility testing
  • Multiple device access

🌍 Understanding Our Testing Challenges

Unique EduLite Testing Needs

  1. Network Conditions

    • 2G speeds (50 kbps)
    • Intermittent connectivity
    • High latency (500ms+)
    • Packet loss scenarios
  2. Device Diversity

    • 5+ year old Android phones
    • Low RAM devices (1-2GB)
    • Small screens (320px wide)
    • Outdated browsers
  3. User Contexts

    • Power outages mid-session
    • Shared devices
    • Multiple languages/RTL
    • Limited tech knowledge

📝 Your First QA Task

This section introduces a hypothetical (not a real feature) issue that needs testing. It will walk your through the usual workflow of a QA Engineer within the EduLite Community!

Task: Test the Study Timer Feature

Let's test a new feature comprehensively!

Step 1: Understand the Feature

Study Timer: Helps students track study sessions

  • Start/pause timer
  • Reset functionality
  • Persists on page refresh
  • Shows elapsed time

Step 2: Create Test Cases

Functional Tests:

## Test Case: ST-001 - Start Timer
**Precondition**: Timer at 00:00:00
**Steps**:
1. Click "Start" button
2. Wait 5 seconds
**Expected**: Timer shows 00:00:05
**Priority**: High

## Test Case: ST-002 - Pause Timer
**Precondition**: Timer running
**Steps**:
1. Click "Pause" button
**Expected**: 
- Timer stops incrementing
- Button changes to "Start"
**Priority**: High

## Test Case: ST-003 - Timer Persistence
**Precondition**: Timer at 00:05:00
**Steps**:
1. Refresh page (F5)
**Expected**: Timer still shows 00:05:00
**Priority**: High

Edge Cases:

## Test Case: ST-010 - Multiple Tabs
**Steps**:
1. Start timer in Tab 1
2. Open same page in Tab 2
**Expected**: Both show same time
**Priority**: Medium

## Test Case: ST-011 - Browser Crash
**Steps**:
1. Start timer
2. Force close browser
3. Reopen and navigate back
**Expected**: Timer continues from last time
**Priority**: Medium

Step 3: Test on Different Conditions

Network Testing:

# Chrome DevTools - Network Throttling
1. Open DevTools (F12)
2. Network tab
3. Select "Slow 3G" or create custom:
   - Download: 50 kb/s
   - Upload: 20 kb/s  
   - Latency: 2000 ms

Device Testing:

Physical Devices:
- Old Android phone (Android 6)
- iPhone SE (small screen)
- Tablet (touch interactions)
- Desktop (keyboard navigation)

Emulators:
- Chrome DevTools device mode
- BrowserStack (if available)

Step 4: Document Bugs

Bug Report Template:

## Bug: Timer resets on language change

**Severity**: Medium
**Priority**: High
**Environment**: Chrome 91, Windows 10

**Steps to Reproduce**:
1. Start timer (shows 00:00:05)
2. Change language from English to Arabic
3. Observe timer

**Expected Result**: 
Timer continues from 00:00:05

**Actual Result**:
Timer resets to 00:00:00

**Screenshots/Video**:
[Attach evidence]

**Additional Info**:
- Works correctly on Firefox
- Console shows no errors

Step 5: Accessibility Testing

Keyboard Navigation:

1. Tab to Start button
2. Press Enter (should start)
3. Tab to Pause button  
4. Press Enter (should pause)
5. All focus states visible?

Screen Reader:

1. Enable screen reader
2. Navigate to timer
3. Should announce:
   - "Study Timer, 0 hours 0 minutes 0 seconds"
   - "Start button"
   - Time updates periodically

🎉 Great job! You've completed your first comprehensive test!

📖 Deep Dive: Testing Standards

1. Test Categories

Functional Testing

Core User Flows:

1. Registration → Login → Dashboard
2. Join Class → View Assignment → Submit
3. Send Message → Receive Reply
4. Create Study Group → Invite Friends

Critical Features:

  • Authentication (login/logout)
  • Assignment submission
  • Offline mode sync
  • Real-time messaging
  • File uploads

Performance Testing

Page Load Targets:

Network     | Target | Maximum
------------|--------|--------
4G          | 1s     | 3s
3G          | 3s     | 5s
2G          | 5s     | 10s
Offline     | 1s     | 2s (cached)

Tools:

  • Lighthouse (built into Chrome)
  • WebPageTest.org
  • Network throttling
  • Chrome Performance tab

Compatibility Testing

Browser Matrix:

Desktop:
- Chrome (latest-2)
- Firefox (latest-2)
- Safari (latest-1)
- Edge (latest-1)

Mobile:
- Chrome Android
- Safari iOS
- Samsung Internet
- Firefox Mobile

Device Priority:

  1. Budget Android phones (most users)
  2. Old iPhones (iPhone 6+)
  3. Tablets (shared devices)
  4. Desktop (teachers)

Security Testing

Basic Security Checks:

1. SQL Injection:
   - Try: ' OR '1'='1
   - In login/search fields

2. XSS (Cross-Site Scripting):
   - Try: <script>alert('XSS')</script>
   - In all input fields

3. Authentication:
   - Access protected pages without login
   - Check session timeout
   - Multiple login attempts

4. File Upload:
   - Try non-allowed file types
   - Large files (>10MB)
   - Malicious filenames

2. Testing Environments

Local Testing Setup

# 1. Setup both frontend and backend
cd backend/EduLite
python manage.py runserver

# New terminal
cd Frontend/EduLiteFrontend  
npm run dev

# 2. Create test data
python manage.py create_dummy_users 50

Test Data Management

User Personas:

1. Ahmad (Student - Gaza)
   - Slow internet
   - Arabic language
   - Shared device

2. Sarah (Teacher - Canada)
   - Good internet
   - Multiple classes
   - Desktop user

3. Joy (Student - Nigeria)
   - Mobile only
   - Limited data
   - English language

3. Bug Reporting Standards

Severity Levels

Critical: System unusable

  • Can't login
  • Data loss
  • Security breach
  • Complete feature failure

High: Major feature broken

  • Can't submit assignments
  • Messages not sending
  • Offline sync fails

Medium: Feature partially broken

  • UI issues
  • Non-critical errors
  • Performance degradation

Low: Minor issues

  • Typos
  • Cosmetic issues
  • Enhancement requests

Good Bug Reports Include

## Title: Clear, specific description

**Environment**:
- Device: Samsung Galaxy A10
- OS: Android 8.0
- Browser: Chrome 89
- Network: 3G
- Language: Arabic

**Preconditions**:
- Logged in as student
- Has 3 pending assignments

**Steps**: (Numbered, specific)
1. Go to Assignments page
2. Click first assignment
3. Click "Submit" without selecting file

**Expected**: Error message "Please select a file"
**Actual**: Page refreshes, no error shown

**Evidence**:
- Screenshot: [link]
- Video: [link]
- Console errors: [paste]

**Impact**: Students might think they submitted
**Workaround**: Select file before clicking submit

4. Test Automation Guidelines

What to Automate

High Priority:

  • Login/logout flows
  • Critical user paths
  • API response validation
  • Data integrity checks

Low Priority:

  • UI visual tests
  • One-time features
  • Rapidly changing features

Simple Automation Example

# tests/test_login.py
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestLogin:
    def setup_method(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://localhost:5173")
    
    def test_valid_login(self):
        # Find and fill username
        username = self.driver.find_element(By.ID, "username")
        username.send_keys("testuser")
        
        # Find and fill password
        password = self.driver.find_element(By.ID, "password")
        password.send_keys("testpass123")
        
        # Click login
        login_btn = self.driver.find_element(By.ID, "login-btn")
        login_btn.click()
        
        # Verify redirect to dashboard
        assert "dashboard" in self.driver.current_url
    
    def teardown_method(self):
        self.driver.quit()

🔧 Testing Tools

Essential Tools

  1. Browser DevTools

    • Network throttling
    • Device emulation
    • Console errors
    • Performance profiling
  2. Accessibility Tools

    • WAVE (browser extension)
    • axe DevTools
    • Screen readers (NVDA, JAWS)
    • Keyboard navigation
  3. Network Tools

    • Chrome Network tab
    • Fiddler/Charles Proxy
    • Postman (API testing)
    • cURL commands
  4. Cross-browser Testing

    • BrowserStack (if available)
    • Local VM setup
    • Device labs
    • Friends' devices!

Testing Checklist

Before Release

Functionality:

  • All user flows work
  • Forms validate correctly
  • Error messages helpful
  • Success messages clear
  • No console errors

Performance:

  • Loads under 3s on 3G
  • Images optimized
  • No memory leaks
  • Smooth scrolling

Compatibility:

  • Works on target browsers
  • Mobile responsive
  • Touch-friendly
  • Keyboard navigable

Accessibility:

  • Screen reader compatible
  • Color contrast passes
  • Focus indicators visible
  • Alt text present

Localization:

  • All text translatable
  • RTL layout works
  • Date/time formats
  • No hardcoded strings

Security:

  • Input validation works
  • Auth properly enforced
  • No sensitive data exposed
  • HTTPS everywhere

🎯 Common Testing Scenarios

1. Concurrent User Testing

Scenario: Multiple students join class simultaneously

1. Create class with teacher account
2. Have 5 students join at once
3. Teacher starts live session
4. All students should see updates
5. Test with 50+ students

2. Localization Testing

Scenario: Arabic language and RTL

1. Switch to Arabic
2. Verify ALL text translated
3. Check RTL layout
4. Test form inputs (RTL)
5. Verify date formats
6. Check number formats

3. Data Limit Testing

Scenario: Student with 50MB daily limit

1. Track data usage per action:
   - Login: ___KB
   - Load assignment: ___KB
   - Submit text: ___KB
   - Load image: ___KB
2. Optimize what uses most

📏 QA Best Practices

1. Think Like a Student

Real scenarios:
- "My internet cut out during submission"
- "I can't read English well"
- "This is my first time using a computer"
- "I share this phone with my family"
- "I only have 30 minutes of internet"

2. Test Beyond the Happy Path

Unhappy paths:
- Wrong password 5 times
- Upload 100MB file
- 1000 character username
- Submit assignment 1 second late
- Join class that's full
- Send message to blocked user

3. Document Everything

Test Log Template:
Date: 2024-03-15
Tester: Your Name
Build: v1.2.3
Environment: Staging

Test | Result | Notes
-----|--------|------
Login with valid credentials | PASS | 2s load time
Login with invalid password | PASS | Good error message
Login with SQL injection | PASS | Input sanitized

4. Collaborate with Developers

Good: "The submit button doesn't work when offline"
Better: "The submit button is disabled when offline, 
        but there's no message explaining why. Students 
        might think it's broken. Could we add a tooltip?"

📚 Resources

EduLite Specific

Testing Learning

Tools Documentation

Accessibility

🆘 Getting Help

Where to Ask

  1. Testing questions: Discord #qa channel
  2. Bug discussions: GitHub issue comments
  3. Tool help: Discord #testing-tools
  4. Strategy: GitHub Discussions

How to Report

## Testing Update

**What I tested**: Login flow on mobile devices

**Coverage**:
- ✅ 5 different Android devices
- ✅ 3 iOS devices  
- ✅ 2G, 3G, 4G networks
- ❌ Tablet testing (no device)

**Issues Found**:
1. [Critical] Login button not tappable on Android 6
2. [Medium] Password field shows wrong keyboard
3. [Low] Success message cut off on 320px screens

**Recommendations**:
1. Increase button tap target to 44px
2. Add inputmode="password" attribute
3. Adjust message padding on mobile

🌟 Ready to Ensure Quality!

As a QA engineer for EduLite, you're:

  • 🔍 The student's advocate - Finding issues before they do
  • 🌍 The global tester - Ensuring it works everywhere
  • 🛡️ The quality guardian - Protecting the user experience
  • 💚 The improvement driver - Making EduLite better daily

Your Impact

  • 1 bug found = Hundreds of students helped
  • 1 performance improvement = Works in more places
  • 1 accessibility fix = No student excluded
  • 1 security issue = Student data protected

Test with purpose. Break things constructively. Make education reliable for everyone. 🔍

💚 The best QA engineers don't just find bugs - they advocate for students who might struggle silently with issues we never thought to test. When you test for the student in Gaza during a blackout, you test for everyone.

Clone this wiki locally