Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Azure Test Plans: Manual and Automated Testing

By Kokil Thapa | Last reviewed: August 2026

Azure Test Plans: Manual and Automated Testing provides a unified framework for managing quality across the entire software delivery lifecycle within Azure DevOps. Many teams struggle because they treat test management as an afterthought or a separate silo from their development work, leading to broken traceability and duplicated effort. Effective CI/CD pipeline setup requires integrating test execution directly into your release workflow rather than running tests in isolation. This guide covers the practical configuration, execution strategies, and architectural decisions needed to make testing a first-class citizen in your Azure DevOps environment.

How do you structure test plans and suites in Azure DevOps?

Test organization in Azure DevOps follows a strict hierarchy: Test Plan → Test Suite → Test Case. Getting this structure wrong at the start creates maintenance debt that compounds with every sprint. In my experience working on production Laravel applications and legal-tech portals, flat structures fail once you exceed fifty test cases. You need a taxonomy that mirrors your application's functional domains, not your sprint schedule.

Test Plan Hierarchy StructureRelease 2026-Q3 Test PlanUser Auth SuitePayment Flow SuiteAPI Integration SuiteLogin TestReset PWStripe PayeSewa PayWebhookRate LimitPlan contains Suites; Suites contain CasesEach Case links to User Story or Bug Work Item
Azure Test Plans hierarchy: Test Plans contain Test Suites which contain individual Test Cases linked to work items

A Test Plan represents a major release, milestone, or testing phase. For a legal-tech portal handling court marriage registrations, I typically create one plan per major regulatory update or quarterly release cycle. Test Suites come in three types, and choosing correctly matters:

  • Static suites — manually curated collections of test cases. Use these for regression sets, smoke tests, or compliance checklists where you need precise control over which cases run together.
  • Requirement-based suites — dynamically populated from user stories, bugs, or other work items via query. These stay current automatically as you add new stories. This is the default choice for feature-level testing.
  • Query-based suites — populated by any saved work item query. Useful for cross-cutting concerns like "all P1 bugs" or "all tests tagged payment-gateway".

A common mistake is creating static suites for everything. Requirement-based suites reduce maintenance overhead significantly because new test cases associated with user stories appear automatically. Reserve static suites for curated regression packs where ordering and explicit inclusion matter. On a real client project involving Nepal's notary service workflows, switching from static to requirement-based suites cut test plan maintenance time by roughly 40% because testers no longer had to manually add cases after each sprint planning session.

Naming conventions and tagging

Adopt a consistent naming pattern early. I use [Domain] - [Feature] - [Type] for suites (e.g., "Payments - eSewa Integration - Regression") and [ID] [Action] [Expected Outcome] for test cases. Tags are essential for filtering across suite boundaries. Standard tags like smoke, regression, e2e, manual-only, and automated let you build dynamic queries without restructuring your hierarchy. Without disciplined tagging, query-based suites become unreliable fast.

How do you integrate automated tests with Azure Test Plans?

Automated tests only provide value in Azure Test Plans when they are explicitly linked to test cases and executed through Azure Pipelines. Running PHPUnit, Jest, or Playwright tests locally or in CI without linking them to Test Plans means your test management dashboard shows incomplete data. The integration happens through two mechanisms: test case association and pipeline publishing.

Automated Test Integration PipelineCode PushGit RepositoryBuild StageCompile + Unit TestsTest StageIntegration + E2EPublish ResultsVSTest TaskTest Case LinksAutomated Test ↔ Work ItemTest Results DashboardPass/Fail + Coverage MetricsPipeline publishes TRX/JUnit results linked to Azure Test PlansFailed tests auto-create or link to Bug work items
CI pipeline stages connecting code push through automated test execution to Azure Test Plans result publishing

Linking automated tests to test cases

In Azure DevOps, open a test case and use the "Associated Automation" tab to link it to a specific automated test method. The test must exist in a build artifact that Azure DevOps can resolve. For PHP/Laravel projects using PHPUnit, this means your test classes must be discoverable and follow naming conventions that match what the VSTest or JUnit publisher expects. For JavaScript projects using Playwright or Cypress, you need the appropriate reporter configured to output compatible result files.

<!-- Example azure-pipelines.yml test stage -->
- task: VSTest@2
  displayName: 'Run Automated Tests'
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: '/tests//*.dll'
    searchFolder: '$(System.DefaultWorkingDirectory)'
    resultsFolder: '$(Agent.TempDirectory)/TestResults'
    publishRunAttachments: true
    testRunTitle: 'Laravel Integration Tests'

- task: PublishTestResults@2
  displayName: 'Publish Test Results to Azure Test Plans'
  condition: always()
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-results.xml'
    mergeTestResults: true
    testRunTitle: 'PHPUnit Results'
    buildConfiguration: '$(BuildConfiguration)'
    publishRunAttachments: true

The condition: always() on the publish task is critical. Without it, failed tests never get published when the pipeline fails, leaving your Test Plans dashboard blind to failures exactly when you need visibility most. I have encountered this during production deployments where the team assumed tests passed because no results appeared, when in reality the publish step was skipped due to an earlier failure.

Test runner compatibility

Azure Test Plans accepts results in TRX (Visual Studio), JUnit, NUnit, and xUnit formats. Most modern frameworks support at least one of these natively or via reporter plugins. For Laravel projects, use phpunit --log-junit test-results.xml. For Node.js projects with Playwright, configure the JUnit reporter in playwright.config.ts. The key requirement is that test names in the result file must match the associated automation name in Azure DevOps exactly, including namespace and class path. Mismatches silently break the link between results and test cases.

What is the difference between manual and automated testing in Azure Test Plans?

Understanding when to use manual versus automated testing within Azure Test Plans prevents wasted effort. Both approaches share the same test case repository but differ fundamentally in execution, maintenance cost, and appropriate use cases. For teams building REST APIs in Laravel or complex legal-tech workflows, getting this balance right determines whether testing accelerates or slows delivery.

CriteriaManual TestingAutomated Testing
Best forExploratory testing, UX validation, visual checks, edge-case discovery, compliance sign-offRegression, smoke tests, API validation, data integrity checks, performance baselines
Execution speedMinutes to hours per run; human-pacedSeconds to minutes; parallelizable across agents
Maintenance costLow upfront, high recurring (human time per execution)High upfront (scripting + infrastructure), low recurring
TraceabilityManual pass/fail marking with optional screenshots and notesAutomatic result publishing with stack traces and attachments
Flakiness riskLow (human judgment adapts to minor UI changes)High (brittle selectors, timing issues, environment dependencies)
Azure Test Plans integrationTest Runner web extension or browser-based manual executionPipeline-published results via VSTest/PublishTestResults tasks
Cost per execution (NPR estimate)Rs 500–2,000 per tester-hour (~USD 3.75–15)Near-zero marginal cost after initial setup; compute costs only

The decision framework is straightforward: automate anything you will run more than five times with predictable steps. Keep manual testing for exploratory sessions, new feature validation before automation is written, and scenarios requiring human judgment like accessibility assessment or legal document formatting verification. On legal-tech portals I have built, document rendering and PDF generation always require manual verification because automated pixel comparison produces too many false positives with dynamic content like Nepali Unicode text or variable court seal placements.

Hybrid execution patterns

Mature teams use hybrid patterns where manual and automated tests coexist in the same suite. A requirement-based suite might contain ten automated API tests and three manual UX validation tests for the same user story. Azure Test Plans handles this cleanly because execution status is tracked per test case regardless of execution method. When reviewing sprint readiness, stakeholders see a unified view of coverage without needing to cross-reference separate tools. This unified visibility is particularly valuable for Nepal-based clients who need clear, auditable test records for regulatory or contractual compliance.

How do you configure traceability between test cases and work items?

Traceability is the feature that justifies using Azure Test Plans over standalone test management tools. Every test case should link to at least one user story, bug, or requirement. This linkage enables impact analysis when requirements change and provides auditable proof of test coverage for compliance-sensitive projects like legal-tech platforms or financial systems.

Requirement-to-Test Traceability FlowUser Story #1042Court Marriage FormUser Story #1043Document UploadBug #1089PDF Render FailTC-201 Validate FieldsAutomated ✓ PassTC-202 File Size CheckAutomated ✓ PassTC-203 PDF Visual CheckManual ✗ FailCoverage DashboardStories Tested: 2/2 (100%)Bugs Verified: 1/1 (100%)Tests Passing: 2/3 (67%)Gap: TC-203 needs fixBidirectional links enable impact analysis and coverage reportingDashboard aggregates status from all linked test executions
Traceability flow from user stories and bugs through test cases to aggregated coverage dashboard in Azure Test Plans

When creating a test case from a user story, use the "Add Test Case" action directly from the backlog or board view. This creates the link automatically. If you create test cases independently, use the "Links" tab to add a "Tested By" relationship to the relevant work item. Requirement-based suites enforce this discipline structurally because they populate based on query results, making orphaned test cases visible immediately.

For bug verification, always create a dedicated test case linked to the bug work item. This test case should reproduce the exact failure condition and verify the fix. When the bug is resolved, the linked test case becomes a permanent regression guard. Skipping this step means fixed bugs frequently reappear months later because no automated or documented manual test prevents recurrence. On a legal document management system I maintained, implementing mandatory bug-linked test cases reduced regression incidents by approximately 60% over six months.

Coverage metrics and gap analysis

Azure Test Plans provides built-in coverage reports showing which user stories have associated test cases and execution results. Use these reports during sprint reviews and release sign-offs. Gaps in coverage are visible as unlinked work items or stories with test cases that have never been executed. For teams working with full-stack development workflows, combining Azure Test Plans coverage data with code-level coverage tools gives a complete picture of both functional and structural test adequacy.

How do you optimize Azure Test Plans for distributed and remote teams?

Distributed teams face specific challenges with test management: timezone coordination, inconsistent environments, and communication gaps around test failures. Azure Test Plans addresses several of these natively, but configuration choices determine whether it helps or hinders remote collaboration. For teams operating across Nepal and international timezones, as many of my clients do, these optimizations are not optional.

Environment standardization

Test failures caused by environment differences waste enormous amounts of time. Standardize your test environments using infrastructure-as-code and containerization. Azure Pipelines supports self-hosted agents on Ubuntu servers, which I prefer for PHP/Laravel projects because they match production configurations exactly. Document environment prerequisites directly in test case descriptions or shared wiki pages linked from the test plan. When a tester in Kathmandu and a developer in Sydney execute the same test case, they should see identical behavior.

Async communication patterns

Configure Azure Test Plans notifications to route failures to appropriate channels. Failed automated tests should create bugs automatically or notify via Teams/Slack integration. Manual test failures should include mandatory failure notes and screenshots. Establish a convention where test execution comments reference specific timestamps and environment versions. This reduces back-and-forth clarification requests across timezones. For teams adopting DevOps automation practices, integrating test result notifications into existing chat workflows prevents test feedback from becoming siloed in Azure DevOps dashboards that team members check infrequently.

Licensing and access considerations

Azure Test Plans requires specific license levels. Basic + Test Plans or Visual Studio Enterprise licenses are required for full test management capabilities. Stakeholders with Basic licenses can view test plans and results but cannot execute or author tests. For budget-sensitive projects, consider assigning Test Plans licenses only to dedicated QA personnel and senior developers responsible for test strategy. Junior developers and product owners can participate through Basic-level visibility. Current pricing should be verified against Microsoft's official licensing page as rates adjust periodically. For Nepal-based teams, factor in currency conversion and local payment processing when budgeting.

Implementing Azure Test Plans Manual and Automated Testing Effectively

Azure Test Plans: Manual and Automated Testing delivers real value only when integrated thoughtfully into your development workflow rather than adopted as a checkbox exercise. Start with requirement-based suites linked to user stories, establish automated test publishing in your CI pipeline early, and enforce traceability discipline from day one. Resist the urge to automate everything; strategic manual testing remains essential for exploratory validation and human-judgment scenarios. Measure success through coverage trends and defect escape rates rather than raw test count. If your team needs help establishing effective test management practices or integrating Azure DevOps with existing Laravel, PHP, or eCommerce systems, reach out to discuss your specific testing challenges.

Frequently Asked Questions

Azure Test Plans is a Microsoft service for managing manual and automated testing within Azure DevOps. It provides test case management, execution tracking, and reporting. Teams needing structured QA workflows, traceability between requirements and tests, or compliance documentation use it over ad-hoc spreadsheet tracking.

Azure Test Plans costs approximately USD 52 per user monthly, or around NPR 6,900 at current exchange rates. This fee applies only to users creating or executing test plans; stakeholders viewing results do not require paid licenses. Pricing is separate from base Azure DevOps access.

No. Azure Test Plans manages test cases and tracks results but does not execute automation. Automated tests run via Azure Pipelines or external CI systems, then link results back to Test Plans through integration. Manual execution happens natively in the browser-based Test Runner tool.

Associate automated tests with test cases using the Automated Tests tab in Azure DevOps. Configure your pipeline to publish test results using the PublishTestResults task with the correct test plan and suite IDs. Results automatically update pass/fail status in Test Plans after each pipeline run completes successfully.

Manual testing uses the browser-based Test Runner to step through cases and record outcomes interactively. Automated testing executes scripts via pipelines and reports results back to Test Plans. Both share the same test case repository and reporting dashboards, providing unified visibility across execution methods without duplicating test definitions.

Not necessarily. If your team only needs automated execution and basic reporting, pipelines alone may suffice. Azure Test Plans adds value when you require manual testing workflows, requirement traceability, stakeholder review interfaces, or audit-ready documentation. Many teams I have worked with use both: automation for regression and Test Plans for exploratory and UAT phases.

Structure test suites hierarchically matching your application modules or user stories. Use requirement-based suites to auto-link test cases to work items, keeping coverage visible. Avoid flat structures with hundreds of cases; instead group by feature, release, or risk level. In my experience maintaining legal-tech portals, this organization reduced duplicate test cases by thirty percent during regression cycles.

Yes, through Azure DevOps REST APIs and marketplace extensions. Tools like Postman, JMeter, and custom frameworks can publish results to Test Plans using the Test Results API. However, native integration is strongest with Microsoft ecosystems. When integrating external tools on client projects, I verify result mapping accuracy before relying on dashboards for release decisions.

Users need Basic access level plus Test Plans extension license. Project-level permissions include Manage test plans, Manage test suites, and Create test runs. Administrators configure these under Project Settings > Permissions. Read-only stakeholders need no paid license but cannot execute or modify tests. Always apply least-privilege principles, especially on legal-tech platforms handling sensitive case data.

Use the Test Case Migrator tool or Azure DevOps Excel integration to bulk-import test cases. Map columns to Title, Steps, Expected Results, and Priority fields. Validate imports in a sandbox project first. On a recent eCommerce migration, we imported four hundred cases this way, then cleaned duplicates manually. Expect two to three hours per hundred cases for validation and correction.

Common causes include mismatched test case IDs in pipeline configuration, incorrect PublishTestResults task parameters, or missing test plan association. Verify the automated test tab shows linked cases. Check pipeline logs for publishing errors. Ensure the service connection has Test Plans write permissions. I have debugged this repeatedly; usually the test case ID changed during refactoring without updating the pipeline variable.

Yes, through the Exploratory Testing extension included with Test Plans. Testers can record sessions, capture screenshots, log bugs, and create test cases directly from findings without predefined steps. Sessions link to work items for traceability. This is particularly valuable during UAT phases on complex booking systems where scripted tests miss edge cases that real users encounter.

Azure Test Plans integrates natively with Azure Boards and Pipelines, eliminating sync overhead. Zephyr and TestRail offer richer standalone features but require separate licensing and integration maintenance. For teams already in Azure DevOps, Test Plans reduces tool sprawl. For organizations needing advanced analytics or multi-platform support, dedicated tools may justify additional cost and complexity.

Azure Test Plans tracks results from any test type but does not execute performance or security tests itself. Run load tests via Azure Load Testing or k6 in pipelines, then publish results. Security scans from tools like OWASP ZAP follow the same pattern. Test Plans serves as the central dashboard; execution remains specialized. This separation keeps concerns clean while maintaining unified reporting.

Treating it as only a manual testing tool and ignoring automation integration. Creating overly granular test cases that become maintenance burdens. Skipping requirement linking, losing traceability. Granting excessive permissions broadly. Not training testers on the Test Runner interface. On production Laravel applications I have supported, teams that invested two days in upfront structure and training saw significantly higher adoption and fewer orphaned test cases within the first quarter.

Share this article

Quick Contact Options
Choose how you want to connect me: