SAP Activate Alignment
Maps Praman test patterns to SAP Activate methodology phases. This guide helps project teams align their automated testing strategy with SAP's implementation framework.
SAP Activate Overview​
SAP Activate is SAP's methodology for implementing SAP S/4HANA and cloud solutions. It defines six phases, each with testing activities where Praman provides automation support.
| Phase | Name | Testing Focus |
|---|---|---|
| 1 | Discover | Proof of concept, feasibility tests |
| 2 | Prepare | Test strategy, environment setup |
| 3 | Explore | Fit-to-standard, configuration validation |
| 4 | Realize | Unit, integration, string tests |
| 5 | Deploy | UAT, performance, regression |
| 6 | Run | Production monitoring, regression packs |
Phase 1: Discover​
Goal: Validate that Praman works with your SAP landscape.
Praman Activities​
// Proof of concept: verify basic connectivity and control discovery
import { test, expect } from 'playwright-praman';
test('SAP system connectivity check', async ({ ui5, ui5Navigation, page }) => {
await test.step('access Fiori Launchpad', async () => {
await ui5Navigation.navigateToIntent('#Shell-home');
await expect(page).toHaveURL(/fiorilaunchpad/);
});
await test.step('verify UI5 runtime is available', async () => {
const isUI5 = await ui5.isUI5Available();
expect(isUI5).toBe(true);
});
await test.step('discover controls on launchpad', async () => {
const tiles = await ui5.controls({
controlType: 'sap.m.GenericTile',
});
expect(tiles.length).toBeGreaterThan(0);
});
});
Deliverables​
- Connectivity test script (above)
- Browser compatibility matrix (see Cross-Browser Testing)
- Tool evaluation report comparing Praman to Tosca, wdi5, UIVeri5
Phase 2: Prepare​
Goal: Establish test infrastructure and strategy.
Praman Activities​
| Activity | Praman Artifact |
|---|---|
| Test strategy document | docs/test-strategy.md |
| Environment setup | playwright.config.ts, praman.config.ts |
| Auth configuration | tests/auth-setup.ts (see Authentication) |
| CI/CD pipeline | .github/workflows/e2e-tests.yml |
| Test data strategy | OData mock setup (see OData Mocking) |
Project Structure​
tests/
auth-setup.ts # Authentication setup project
smoke/ # Phase 3: Fit-to-standard
fit-to-standard.spec.ts
integration/ # Phase 4: String tests
p2p-flow.spec.ts
o2c-flow.spec.ts
regression/ # Phase 5+: Regression pack
purchase-order.spec.ts
sales-order.spec.ts
performance/ # Phase 5: Performance baselines
page-load.spec.ts
playwright.config.ts
praman.config.ts
Phase 3: Explore (Fit-to-Standard)​
Goal: Validate SAP standard configuration against business requirements.
Fit-to-Standard Tests​
These tests verify that standard SAP processes work with your specific configuration (company codes, org units, master data).
import { test, expect } from 'playwright-praman';
test.describe('Fit-to-Standard: Procurement', () => {
test('standard PO creation workflow matches requirements', async ({
ui5,
ui5Navigation,
feObjectPage,
ui5Matchers,
}) => {
await test.step('verify PO creation app is accessible', async () => {
await ui5Navigation.navigateToIntent('#PurchaseOrder-create');
});
await test.step('verify required fields match spec', async () => {
// Check that configured mandatory fields are enforced
const supplierField = await ui5.control({
controlType: 'sap.ui.comp.smartfield.SmartField',
bindingPath: { path: '/Supplier' },
});
const isRequired = await supplierField.getProperty('mandatory');
expect(isRequired).toBe(true);
});
await test.step('verify org structure defaults', async () => {
// Company code should default from user parameters
const companyCode = await ui5.control({
controlType: 'sap.ui.comp.smartfield.SmartField',
bindingPath: { path: '/CompanyCode' },
});
const value = await companyCode.getProperty('value');
expect(value).toBe('1000'); // Expected default from user profile
});
await test.step('verify approval workflow triggers', async () => {
// Create PO above threshold to trigger approval
await feObjectPage.fillField('Supplier', '100001');
await feObjectPage.fillField('NetPrice', '50000');
await feObjectPage.clickSave();
await ui5Matchers.toHaveMessageStrip('Success', /created/);
// Verify status indicates approval required
});
});
});
Configuration Validation Matrix​
const orgUnits = [
{ companyCode: '1000', purchOrg: '1000', plant: '1000', name: 'US Operations' },
{ companyCode: '2000', purchOrg: '2000', plant: '2000', name: 'EU Operations' },
{ companyCode: '3000', purchOrg: '3000', plant: '3000', name: 'APAC Operations' },
];
for (const org of orgUnits) {
test(`fit-to-standard: PO creation for ${org.name}`, async ({
ui5Navigation,
feObjectPage,
ui5Matchers,
}) => {
await ui5Navigation.navigateToIntent('#PurchaseOrder-create');
await feObjectPage.fillField('CompanyCode', org.companyCode);
await feObjectPage.fillField('PurchasingOrganization', org.purchOrg);
await feObjectPage.fillField('Plant', org.plant);
await feObjectPage.fillField('Supplier', '100001');
await feObjectPage.clickSave();
await ui5Matchers.toHaveMessageStrip('Success', /created/);
});
}
Phase 4: Realize (Integration and String Tests)​
Goal: Validate end-to-end business processes and integrations.
String Tests​
String tests connect multiple processes in sequence, validating the data flow between them.
test.describe('String Test: Procure-to-Pay', () => {
test('P2P: Purchase Requisition to Payment', async ({
ui5Navigation,
feObjectPage,
feListReport,
ui5Matchers,
}) => {
await test.step('1. Create Purchase Requisition', async () => {
await ui5Navigation.navigateToIntent('#PurchaseRequisition-create');
// Fill and save PR
});
await test.step('2. Convert PR to Purchase Order', async () => {
await ui5Navigation.navigateToIntent('#PurchaseOrder-create');
// Reference the PR
});
await test.step('3. Post Goods Receipt', async () => {
await ui5Navigation.navigateToIntent('#GoodsReceipt-create');
// Post GR against PO
});
await test.step('4. Enter Invoice', async () => {
await ui5Navigation.navigateToIntent('#SupplierInvoice-create');
// Enter and post invoice
});
await test.step('5. Verify Document Flow', async () => {
// Navigate back to PO and check all documents are linked
});
});
});
See Business Process Examples for complete runnable examples.
Test Execution Mapping​
| SAP Activate Activity | Praman Test Type | Config |
|---|---|---|
| Unit Test (UT) | Component test with mocked OData | workers: 4 |
| Integration Test (IT) | Cross-app flow with real backend | workers: 1 |
| String Test (ST) | Multi-step P2P, O2C flows | workers: 1, retries: 1 |
| Security Test | Auth strategy validation | Setup project |
Phase 5: Deploy (UAT and Regression)​
Goal: User acceptance, performance baselines, regression packs.
Regression Pack Structure​
// playwright.config.ts — regression project
{
name: 'regression',
testDir: './tests/regression',
dependencies: ['setup'],
use: {
storageState: '.auth/sap-session.json',
trace: 'on-first-retry',
screenshot: 'only-on-failure',
},
retries: 2,
}
Performance Baselines​
test('page load performance baseline', async ({ ui5Navigation, page }) => {
const startTime = Date.now();
await ui5Navigation.navigateToIntent('#PurchaseOrder-manage');
const loadTime = Date.now() - startTime;
// Attach timing to report
await test.info().attach('performance', {
body: JSON.stringify({ loadTime, threshold: 5000 }),
contentType: 'application/json',
});
expect(loadTime).toBeLessThan(5000); // 5-second threshold
});
Phase 6: Run (Production Monitoring)​
Goal: Continuous regression testing against production-like environments.
Smoke Test Suite​
Run a minimal set of critical path tests on a schedule:
# .github/workflows/smoke-tests.yml
name: SAP Smoke Tests
on:
schedule:
- cron: '0 6 * * *' # Daily at 6 AM
workflow_dispatch:
jobs:
smoke:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx playwright install chromium
- run: npx playwright test tests/smoke/ --project=regression
env:
SAP_BASE_URL: ${{ secrets.SAP_QA_URL }}
SAP_USERNAME: ${{ secrets.SAP_QA_USER }}
SAP_PASSWORD: ${{ secrets.SAP_QA_PASS }}
Phase-to-Praman Mapping Summary​
| Phase | Praman Feature | Key Config |
|---|---|---|
| Discover | ui5.isUI5Available(), control discovery | Basic playwright.config.ts |
| Prepare | Auth setup, config, project structure | praman.config.ts, CI pipeline |
| Explore | Fit-to-standard tests, org validation | Data-driven test loops |
| Realize | String tests, integration flows | workers: 1, test.step() |
| Deploy | Regression packs, performance baselines | retries: 2, trace on retry |
| Run | Scheduled smoke tests, monitoring | Cron-triggered CI, alerts |