Skip to content
Merged

yt #10

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions _config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
title: LinkedIn Automation Testing
email: your-email@example.com
description: >- # this means to ignore newlines until "social"
A portfolio site for the LinkedIn Automation Testing project.
baseurl: "" # the subpath of your site, e.g. /blog
url: "" # the base hostname & protocol for your site

# Build settings
markdown: kramdown
theme: jekyll-theme-cayman
# Remove the line above and choose any supported GitHub Pages theme, such as
# jekyll-theme-minimal, jekyll-theme-midnight, etc.

# Defaults
# Add any custom collections or defaults here
95 changes: 95 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LinkedIn Automation Testing Project</title>
<style>
body {font-family: Arial, sans-serif; line-height:1.6; margin: 0; padding: 0; background:#fafafa; color:#333;}
header {background:#0a66c2; color:white; padding:20px 40px;}
header h1 {margin:0; font-size:2em;}
nav {margin-top:10px;}
nav a {color:white; margin-right:15px; text-decoration:none; font-weight:bold;}
.container {padding:40px; max-width:900px; margin:auto; background:white; box-shadow:0 2px 4px rgba(0,0,0,0.1);}
h2 {color:#0a66c2; margin-top:40px;}
ul {list-style-type:disc; margin-left:20px;}
footer {background:#0a66c2; color:white; padding:10px 40px; text-align:center; margin-top:40px;}
code {background:#f4f4f4; padding:2px 4px; border-radius:4px; font-family:monospace;}
</style>
</head>
<body>
<header>
<h1>LinkedIn Automation Testing Project</h1>
<nav>
<a href="#overview">Overview</a>
<a href="#test-plan">Test Plan</a>
<a href="#test-cycles">Test Cycles</a>
<a href="#strategies">Strategies</a>
<a href="#framework">Framework & Tools</a>
<a href="#insights">Insights</a>
</nav>
</header>
<div class="container">
<section id="overview">
<h2>Project Overview</h2>
<p>This project automates outreach activities on LinkedIn using a combination of Playwright and TestNG. The goal is to simplify the process of connecting with recruiters by automating login, searching for recruiters, composing personalised messages and verifying successful delivery. This page summarises the test plans, cycles and strategies used in the project as documented in my Notion workspace.</p>
</section>
<section id="test-plan">
<h2>Test Plan</h2>
<p>The test plan acts as the anchor for all testing activities. It defines the objectives, scope, schedule and deliverables for each test type:</p>
<ul>
<li><strong>Functional &amp; System Test Plan:</strong> Verify the end-to-end flow from reading an Excel file to sending a message. Cycles include smoke tests on every commit, core end‑to‑end tests before Monday runs and weekly edge‑case tests. Entry criteria: environment set up, Excel data prepared, framework ready. Exit criteria: 100 % smoke pass, &ge;95 % end‑to‑end pass, high‑severity issues resolved.</li>
<li><strong>Regression Test Plan:</strong> Ensure new changes don’t break core flows. Nightly light regression and full regression before release. Exit criteria: &ge;95 % pass rate with no high‑severity defects.</li>
<li><strong>User Acceptance Test Plan:</strong> Validate business fit with a real recruiter list. A dry run on Friday and a live run on Monday. Exit criteria: 100 % targeted messages sent, no LinkedIn warnings.</li>
<li><strong>Performance &amp; Reliability Test Plan:</strong> Validate timing, throughput and stability under different load levels (e.g., 10/50/100 recruiters). KPIs include total runtime, per‑message latency and retry rates.</li>
</ul>
</section>
<section id="test-cycles">
<h2>Test Cycles</h2>
<p>Test cycles are structured to map back to project scope and ensure thorough coverage:</p>
<ul>
<li><strong>Cycle A – Smoke &amp; Happy Path:</strong> Quick validation of core flow – login → search → message.</li>
<li><strong>Cycle B – Component Regression – Login:</strong> Positive and negative authentication cases (valid login, invalid login, blank fields, expired token).</li>
<li><strong>Cycle B – Component Regression – Search:</strong> Validate recruiter search and filtering (valid search, filters, invalid names, empty queries, pagination).</li>
<li><strong>Cycle B – Component Regression – Messaging:</strong> Validate messaging with attachments and duplicates (valid message, empty message, duplicate message, attachments).</li>
<li><strong>Cycle C – End‑to‑End UAT Flow:</strong> Business‑driven journey: Excel import → search → compose &amp; send message → confirm delivery.</li>
</ul>
</section>
<section id="strategies">
<h2>Test Strategies</h2>
<p>Multiple strategies were designed to cover different outreach scenarios on LinkedIn:</p>
<ul>
<li><strong>Strategy 1 – Search‑Based Outreach:</strong> Read recruiter name and message from Excel, log in, search for the recruiter, open the profile, send a message and log out.</li>
<li><strong>Strategy 2 – Direct URL Navigation:</strong> Use a recruiter profile URL from Excel, log in, navigate directly to the profile, send a message and log out.</li>
<li><strong>Strategy 3 – API‑Based Profile Fetch:</strong> (Future scope) Use LinkedIn or third‑party APIs to fetch profiles and then send messages.</li>
<li><strong>Strategy 4 – Hybrid Method:</strong> Combine search‑based and direct navigation to handle cases where one method fails.</li>
<li><strong>Strategy 5 – Connection Filter:</strong> Target contacts within the existing network by filtering LinkedIn connections.</li>
</ul>
<p>Separate test suites correspond to each strategy (Suite A: search &amp; send, Suite B: direct profile messaging, Suite C: hybrid, Suite D: API‑based). This modular structure makes it easier to assign tasks, track coverage and map defects to specific areas.</p>
</section>
<section id="framework">
<h2>Framework &amp; Tools</h2>
<p>The automation framework leverages <strong>Playwright</strong> for browser automation and <strong>TestNG</strong> for test orchestration. Key features include:</p>
<ul>
<li>Structured tests using <code>@Before</code>, <code>@Test</code> and <code>@After</code> hooks.</li>
<li>Parallel execution to reduce runtime.</li>
<li>Data‑driven tests with Excel integration.</li>
<li>Automatic report generation with pass/fail status and logs.</li>
<li>Retry logic and annotations for flaky tests.</li>
</ul>
</section>
<section id="insights">
<h2>Insights &amp; Best Practices</h2>
<ul>
<li>Not every test case should be automated. Focus on repetitive regression tests, stable requirements and high‑value functionality. Leave exploratory or low‑priority negative paths for manual testing.</li>
<li>Balance coverage with maintainability and ROI; aim to automate 60–70 % of core functionalities.</li>
<li>Use smoke and sanity cycles to quickly validate critical flows before moving to deeper regression and UAT cycles.</li>
<li>Group test files by feature (e.g., <code>login.spec.ts</code>, <code>search.spec.ts</code>) and use tags (smoke, regression, exploratory) to filter tests.</li>
</ul>
</section>
</div>
<footer>
<p>© 2025 Sameer’s Automation Portfolio. Content curated from Notion workspace and GitHub repository.</p>
</footer>
</body>
</html>
119 changes: 119 additions & 0 deletions portfolio_template.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LinkedIn Automation Testing Portfolio</title>
<style>
:root {
--primary: #0a66c2;
--secondary: #f5f5f5;
--text-dark: #333;
--text-light: #fff;
}
body {margin:0; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: var(--secondary); color: var(--text-dark); line-height:1.6;}
/* Hero */
.hero {background: var(--primary); color: var(--text-light); padding: 80px 20px; text-align:center;}
.hero h1 {margin: 0 0 20px; font-size: 2.8em;}
.hero p {font-size: 1.2em; margin-bottom: 0; max-width: 700px; margin-left:auto; margin-right:auto;}
/* Navigation */
nav {background: var(--primary); position: sticky; top: 0; z-index: 1000; padding: 10px;}
nav ul {list-style:none; margin:0; padding:0; display:flex; justify-content:center; gap:20px;}
nav a {color: var(--text-light); text-decoration:none; font-weight: bold; padding: 8px 12px; border-radius:4px; transition: background 0.3s;}
nav a:hover {background: rgba(255,255,255,0.2);}
/* Sections */
section {padding: 40px 20px; max-width: 1000px; margin: auto;}
section:nth-child(even) {background: #fff;}
h2 {color: var(--primary); margin-top:0;}
.two-col {display:flex; flex-wrap: wrap; gap:20px;}
.two-col > div {flex:1; min-width:280px;}
ul {padding-left:20px;}
/* Footer */
footer {background: var(--primary); color: var(--text-light); text-align:center; padding: 15px; margin-top:40px;}
</style>
</head>
<body>
<nav>
<ul>
<li><a href="#overview">Overview</a></li>
<li><a href="#plans">Test Plans</a></li>
<li><a href="#cycles">Test Cycles</a></li>
<li><a href="#strategies">Strategies</a></li>
<li><a href="#framework">Framework</a></li>
<li><a href="#insights">Insights</a></li>
</ul>
</nav>
<div class="hero">
<h1>LinkedIn Automation Testing</h1>
<p>Automating recruiter outreach on LinkedIn with Playwright &amp; TestNG. Explore test plans, cycles, strategies and learnings from this project.</p>
</div>
<section id="overview">
<h2>Project Overview</h2>
<p>This project aims to streamline recruiter outreach on LinkedIn. It automates login, search, message composition and verification using <strong>Playwright</strong> and <strong>TestNG</strong>. By combining data-driven execution with robust reporting, the framework accelerates testing and increases coverage.</p>
</section>
<section id="plans">
<h2>Test Plans</h2>
<div class="two-col">
<div>
<h3>Functional &amp; System</h3>
<p>End-to-end flows from Excel import to message delivery. Entry criteria include environment set-up and data readiness. Exit criteria require 100 % smoke pass and ≥95 % end-to-end pass【583227582491469†L117-L130】.</p>
</div>
<div>
<h3>Regression</h3>
<p>Validate that new changes don’t break existing functionality. Incorporates nightly smoke runs and pre-release full regression with a ≥95 % pass rate【583227582491469†L170-L174】.</p>
</div>
<div>
<h3>User Acceptance</h3>
<p>Business-focused runs with real recruiter lists. Dry run on Friday and live pilot on Monday. Success measured by targeted messages sent and the absence of warnings【583227582491469†L170-L174】.</p>
</div>
<div>
<h3>Performance &amp; Reliability</h3>
<p>Benchmark throughput and stability at various batch sizes (e.g., 10/50/100 recruiters). Exit when KPIs for runtime, per-message latency and retry rates are achieved.</p>
</div>
</div>
</section>
<section id="cycles">
<h2>Test Cycles</h2>
<ul>
<li><strong>Cycle A – Smoke &amp; Happy Path:</strong> Validate login → search → message【583227582491469†L117-L130】.</li>
<li><strong>Cycle B – Component Regression (Login):</strong> Positive & negative auth tests.</li>
<li><strong>Cycle B – Component Regression (Search):</strong> Validate search logic, filters and pagination.</li>
<li><strong>Cycle B – Component Regression (Messaging):</strong> Test messaging scenarios including attachments and duplicates.</li>
<li><strong>Cycle C – End-to-End UAT:</strong> Business-driven journey from Excel import to sending confirmation【583227582491469†L117-L130】.</li>
</ul>
</section>
<section id="strategies">
<h2>Strategies &amp; Suites</h2>
<p>Different tactics for reaching recruiters:</p>
<ul>
<li><strong>Search-Based Outreach:</strong> Search by name, navigate to profile, send message【111509204381349†L29-L43】.</li>
<li><strong>Direct URL Navigation:</strong> Use recruiter profile URL to bypass search【111509204381349†L35-L43】.</li>
<li><strong>API-Based Profile Fetch:</strong> Future scope: fetch profiles via API.</li>
<li><strong>Hybrid Method:</strong> Combine search & URL navigation to improve reliability.</li>
<li><strong>Connection Filter:</strong> Target contacts within existing network.</li>
</ul>
<p>Suites correspond to each strategy (A: search & send, B: direct profile messaging, C: hybrid, D: API-based), ensuring targeted coverage【111509204381349†L45-L49】.</p>
</section>
<section id="framework">
<h2>Framework &amp; Tools</h2>
<ul>
<li>Playwright for browser automation and TestNG for orchestration.</li>
<li>Hooks (<code>@Before</code>, <code>@Test</code>, <code>@After</code>) and parallel execution.</li>
<li>Data-driven via Excel, with automatic report generation.</li>
<li>Retry logic and annotations to handle flaky tests.</li>
</ul>
</section>
<section id="insights">
<h2>Insights &amp; Best Practices</h2>
<ul>
<li>Automate repetitive, high-value and regression-prone tests; keep exploratory or low-priority negative cases manual【583227582491469†L178-L183】.</li>
<li>Balance automation coverage with maintainability and ROI; target 60–70 % automation【583227582491469†L178-L183】.</li>
<li>Use smoke & sanity cycles to validate critical flows before deeper regression and UAT.</li>
<li>Organise test files by feature (<code>login.spec.ts</code>, <code>search.spec.ts</code>) and tag them (smoke, regression, exploratory).</li>
</ul>
</section>
<footer>
<p>© 2025 Sameer’s Automation Portfolio</p>
</footer>
</body>
</html>