After implementing testing strategies across multiple D365 Finance implementations, I’ve found the optimal balance depends heavily on your specific context, but I can share patterns that work well:
Automated vs Manual Test Tradeoffs:
The 70/30 split you mentioned is actually quite reasonable, but the key is which tests fall into each category. Here’s what I recommend:
Automate:
- Regression tests for stable core workflows (PO creation, approval routing, receipt posting)
- Integration points with external systems (EDI, supplier portals)
- Data validation rules that rarely change
- Performance and load testing scenarios
- Smoke tests for deployment verification
Manual testing for:
- New features in their first 2-3 release cycles
- Complex business logic with multiple conditional branches
- UI/UX validation and accessibility testing
- Exploratory testing for edge cases
- Scenarios requiring human judgment (approval reasonableness, vendor selection logic)
Regression Coverage:
Your 500+ automated test cases in 2 hours is impressive, but coverage isn’t just about quantity. I’ve seen teams with 1000+ tests that miss critical bugs because they focus on happy paths. Consider:
-
Risk-based prioritization: Automate high-risk, high-frequency workflows first. A purchase order approval bug affects every PO; a rarely-used report formatting issue doesn’t warrant automation investment.
-
Business process coverage: Map your tests to actual business processes. Ensure you’re testing complete end-to-end workflows (requisition → PO → receipt → invoice → payment) not just individual transactions.
-
Negative testing: 30% of your automated tests should verify error handling - invalid amounts, missing approvals, duplicate PO numbers, etc. These catch regression bugs that break validation logic.
Script Maintenance Challenges:
The 10-15% breakage rate after updates is actually lower than industry average (typically 20-30% for UI automation). However, you can reduce it further:
-
Abstraction layers: Implement page object models with business-focused method names. When D365 changes a field label or ID, you update one place, not 50 test scripts.
-
Resilient selectors: Use data-testid attributes or stable XPath expressions that survive UI changes. Avoid brittle CSS selectors based on generated class names.
-
API-first approach: For setup and teardown, use D365 Data Management APIs rather than UI automation. Creating test vendors via API is faster and less brittle than clicking through forms.
-
Version-aware tests: Tag tests with the D365 version they’re designed for. When upgrading, run version-specific test suites to identify breaking changes systematically.
-
Maintenance budget: Allocate 20% of your automation team’s time specifically for test maintenance. This prevents technical debt accumulation.
Practical Recommendation:
For purchase order workflows specifically, I suggest:
- 80% automated for standard PO scenarios (various amounts, vendors, approval paths)
- 15% manual exploratory testing for complex multi-line POs with mixed item types, partial receipts, change orders
- 5% manual for UI validation and accessibility
Invest heavily in automating the “boring but critical” scenarios - single-line POs, standard approval routing, simple receipts. These provide stable regression coverage. Use manual testing where human judgment adds value - complex procurement scenarios, vendor selection logic, approval reasonableness.
The maintenance challenge is unavoidable but manageable with proper architecture. Treat your test automation as a software product that needs refactoring and technical debt management, not just a collection of scripts.
Finally, measure what matters: defect escape rate (bugs found in production), test execution time, and time to fix broken tests after updates. These metrics guide whether your automation investment is paying off better than pure optimization of coverage percentages.