Agentic-qe qe-enterprise-integration-testing
Orchestration skill for enterprise integration testing across SAP, middleware, WMS, and backend systems. Covers E2E enterprise flows, SAP-specific patterns (RFC, BAPI, IDoc, OData, Fiori), cross-system data validation, and enterprise quality gates.
git clone https://github.com/proffesor-for-testing/agentic-qe
T=$(mktemp -d) && git clone --depth=1 https://github.com/proffesor-for-testing/agentic-qe "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.kiro/skills/qe-enterprise-integration-testing" ~/.claude/skills/proffesor-for-testing-agentic-qe-qe-enterprise-integration-testing && rm -rf "$T"
.kiro/skills/qe-enterprise-integration-testing/SKILL.mdEnterprise Integration Testing
<default_to_action> When testing enterprise integrations or SAP-connected systems:
- MAP the end-to-end flow (web -> API -> middleware -> backend -> response)
- IDENTIFY integration points and protocols (REST, SOAP, RFC, IDoc, OData, EDI)
- SELECT the right agent for each integration type
- TEST each integration boundary with contract and data validation
- VALIDATE cross-system data consistency (SAP <-> WMS <-> middleware)
- EXERCISE enterprise error handling (compensation, retry, alerting)
- GATE releases with enterprise-specific quality criteria
Agent Selection Guide:
- SAP RFC/BAPI calls ->
qe-sap-rfc-tester - SAP IDoc flows ->
qe-sap-idoc-tester - OData/Fiori services ->
qe-odata-contract-tester - SOAP/ESB endpoints ->
qe-soap-tester - Message broker flows ->
qe-message-broker-tester - Middleware routing/transformation ->
qe-middleware-validator - Authorization / SoD conflicts ->
qe-sod-analyzer
Critical Success Factors:
- Enterprise testing is cross-system: no system is tested in isolation
- Data consistency across systems is the primary quality signal
- Environment access and test data are the biggest bottlenecks </default_to_action>
Quick Reference Card
When to Use
- Testing SAP-connected enterprise systems (S/4HANA, ECC, BW)
- Validating end-to-end business processes (Order-to-Cash, Procure-to-Pay)
- Testing middleware/ESB integrations (IIB, MuleSoft, SAP PI/PO)
- Cross-system data reconciliation (SAP <-> WMS <-> CRM)
- Enterprise release readiness assessment
Enterprise Integration Types
| Integration | Protocol | Agent | Typical Use |
|---|---|---|---|
| SAP RFC/BAPI | RFC | qe-sap-rfc-tester | Real-time SAP function calls |
| SAP IDoc | ALE/EDI | qe-sap-idoc-tester | Asynchronous document exchange |
| SAP OData | REST/OData | qe-odata-contract-tester | Fiori apps, external APIs |
| SOAP/ESB | SOAP/HTTP | qe-soap-tester | Legacy service integration |
| Message Broker | AMQP/JMS | qe-message-broker-tester | Async messaging (MQ, Kafka) |
| Middleware | Various | qe-middleware-validator | Routing, transformation |
| Authorization | SAP Auth | qe-sod-analyzer | SoD conflicts, role testing |
Critical Test Scenarios
| Scenario | Must Test | Example |
|---|---|---|
| E2E Order Flow | Full order lifecycle | Web order -> SAP Sales Order -> WMS Pick -> Ship -> Invoice |
| Data Consistency | Cross-system match | SAP inventory = WMS inventory |
| IDoc Processing | Inbound/outbound | Purchase order IDoc -> SAP PO creation |
| Authorization | SoD compliance | User cannot create AND approve PO |
| Error Recovery | Compensation | Failed payment -> reverse inventory reservation |
| Master Data Sync | Replication accuracy | Material master in SAP = Product in WMS |
Tools
- SAP: SAP GUI, Transaction codes (SE37, WE19, SEGW), Eclipse ADT
- Middleware: IBM IIB/ACE, MuleSoft, SAP PI/PO/CPI
- Testing: SoapUI, Postman, Playwright, custom harnesses
- Monitoring: SAP Solution Manager, Splunk, Dynatrace
- Data: SAP LSMW, SECATT, eCATT
Agent Coordination
: SAP RFC/BAPI function module testingqe-sap-rfc-tester
: IDoc inbound/outbound processing validationqe-sap-idoc-tester
: OData service contract and Fiori app testingqe-odata-contract-tester
: SOAP/WSDL contract validation and WS-Securityqe-soap-tester
: Message broker flows, DLQ, orderingqe-message-broker-tester
: ESB routing, transformation, EIP patternsqe-middleware-validator
: Segregation of Duties and authorization testingqe-sod-analyzer
E2E Enterprise Flow Testing
Order-to-Cash Flow
describe('Order-to-Cash E2E Flow', () => { it('processes web order through SAP to warehouse fulfillment', async () => { // Step 1: Create order via web API const webOrder = await api.post('/orders', { customerId: 'CUST-1000', items: [{ materialNumber: 'MAT-500', quantity: 10 }], shippingAddress: { city: 'Portland', state: 'OR' } }); expect(webOrder.status).toBe(201); const webOrderId = webOrder.body.orderId; // Step 2: Verify SAP Sales Order created via middleware const sapOrder = await sapClient.call('BAPI_SALESORDER_GETLIST', { CUSTOMER_NUMBER: 'CUST-1000', SALES_ORGANIZATION: '1000' }); const matchingSapOrder = sapOrder.find(o => o.PURCHASE_ORDER_NO === webOrderId); expect(matchingSapOrder).toBeDefined(); const sapOrderId = matchingSapOrder.SD_DOC; // Step 3: Verify WMS received pick instruction const wmsPickTask = await wmsApi.get(`/pick-tasks?externalRef=${sapOrderId}`); expect(wmsPickTask.status).toBe(200); expect(wmsPickTask.body.status).toBe('PENDING'); // Step 4: Complete pick in WMS await wmsApi.post(`/pick-tasks/${wmsPickTask.body.taskId}/complete`, { pickedItems: [{ sku: 'MAT-500', quantity: 10, location: 'A-01-03' }] }); // Step 5: Verify SAP delivery created (via IDoc confirmation) await waitFor(async () => { const delivery = await sapClient.call('BAPI_DELIVERYPROCESSING_GETLIST', { SALES_ORDER: sapOrderId }); return delivery.length > 0 && delivery[0].DELVRY_STATUS === 'C'; }, { timeout: 30000, interval: 3000 }); // Step 6: Verify invoice posted in SAP await waitFor(async () => { const invoice = await sapClient.call('BAPI_BILLINGDOC_GETLIST', { REFDOCNUMBER: sapOrderId }); return invoice.length > 0; }, { timeout: 30000, interval: 3000 }); }); });
Procure-to-Pay Flow
describe('Procure-to-Pay E2E Flow', () => { it('creates purchase requisition through to vendor payment', async () => { // Step 1: Create Purchase Requisition const prResult = await sapClient.call('BAPI_PR_CREATE', { PRHEADER: { PR_TYPE: 'NB', CTRL_IND: '' }, PRHEADERX: { PR_TYPE: 'X' }, PRITEMS: [{ MATERIAL: 'MAT-RAW-100', QUANTITY: 500, UNIT: 'EA', PLANT: '1000' }] }); expect(prResult.NUMBER).toBeDefined(); const prNumber = prResult.NUMBER; // Step 2: Verify PR triggers sourcing (ME57 equivalent) const sourcingResult = await sapClient.call('BAPI_PR_GETDETAIL', { NUMBER: prNumber }); expect(sourcingResult.PRITEM[0].PREQ_NO).toBe(prNumber); // Step 3: Create Purchase Order from PR const poResult = await sapClient.call('BAPI_PO_CREATE1', { POHEADER: { COMP_CODE: '1000', DOC_TYPE: 'NB', VENDOR: 'VEND-500' }, POITEMS: [{ PO_ITEM: '00010', MATERIAL: 'MAT-RAW-100', QUANTITY: 500, PLANT: '1000' }] }); expect(poResult.PO_NUMBER).toBeDefined(); // Step 4: Verify PO IDoc sent to vendor const idocStatus = await sapClient.call('IDOC_STATUS_READ', { DOCNUM: poResult.IDOC_NUMBER }); expect(idocStatus.STATUS).toBe('03'); // Successfully sent }); });
SAP-Specific Testing Patterns
RFC/BAPI Testing
describe('SAP RFC/BAPI Testing', () => { it('validates BAPI return structure and error handling', async () => { // Test with valid input const result = await sapClient.call('BAPI_MATERIAL_GETDETAIL', { MATERIAL: 'MAT-EXIST' }); expect(result.RETURN.TYPE).not.toBe('E'); expect(result.MATERIAL_GENERAL_DATA.MATL_DESC).toBeDefined(); // Test with invalid material const errorResult = await sapClient.call('BAPI_MATERIAL_GETDETAIL', { MATERIAL: 'MAT-NONEXIST' }); expect(errorResult.RETURN.TYPE).toBe('E'); expect(errorResult.RETURN.MESSAGE).toContain('does not exist'); }); it('handles BAPI commit correctly', async () => { const createResult = await sapClient.call('BAPI_SALESORDER_CREATEFROMDAT2', { ORDER_HEADER_IN: { DOC_TYPE: 'OR', SALES_ORG: '1000', DISTR_CHAN: '10', DIVISION: '00' }, ORDER_PARTNERS: [{ PARTN_ROLE: 'AG', PARTN_NUMB: 'CUST-1000' }], ORDER_ITEMS_IN: [{ MATERIAL: 'MAT-500', TARGET_QTY: 10 }] }); // Must call BAPI_TRANSACTION_COMMIT to persist await sapClient.call('BAPI_TRANSACTION_COMMIT', { WAIT: 'X' }); // Verify order exists after commit const getResult = await sapClient.call('BAPI_SALESORDER_GETDETAIL', { SALESDOCUMENT: createResult.SALESDOCUMENT }); expect(getResult.ORDER_HEADER_OUT.SD_DOC_CAT).toBe('C'); }); });
IDoc Testing
describe('SAP IDoc Processing', () => { it('validates inbound IDoc creates correct SAP document', async () => { // Send IDoc via middleware const idocPayload = { IDOCTYP: 'ORDERS05', MESTYP: 'ORDERS', SNDPOR: 'SAPEXT', SNDPRT: 'LS', SNDPRN: 'EXTERN', RCVPOR: 'SAPSI1', RCVPRT: 'LS', RCVPRN: 'SAPCLNT100', segments: { E1EDK01: { BELNR: 'EXT-PO-001' }, E1EDK14: [{ QUESSION: '001', ORGID: '1000' }], E1EDP01: [{ POSEX: '000010', MENGE: '100', MENEE: 'EA', MATNR: 'MAT-500' }] } }; const idocNumber = await middlewareClient.sendIDoc(idocPayload); // Wait for IDoc processing in SAP await waitFor(async () => { const status = await sapClient.call('IDOC_STATUS_READ', { DOCNUM: idocNumber }); return status.STATUS === '53'; // Application document posted successfully }, { timeout: 60000, interval: 5000 }); // Verify SAP document was created const sapDoc = await sapClient.call('BAPI_SALESORDER_GETLIST', { PURCHASE_ORDER_NO: 'EXT-PO-001' }); expect(sapDoc).toHaveLength(1); }); it('handles IDoc error status correctly', async () => { // Send IDoc with invalid material const idocPayload = buildIdocPayload({ materialNumber: 'INVALID-MAT' }); const idocNumber = await middlewareClient.sendIDoc(idocPayload); await waitFor(async () => { const status = await sapClient.call('IDOC_STATUS_READ', { DOCNUM: idocNumber }); return ['51', '56'].includes(status.STATUS); // Error statuses }, { timeout: 60000 }); const status = await sapClient.call('IDOC_STATUS_READ', { DOCNUM: idocNumber }); expect(status.STATUS_TEXT).toContain('Material'); }); });
OData Service Testing
describe('SAP OData Service Testing', () => { it('validates OData entity CRUD operations', async () => { // CREATE const createResponse = await odataClient.post('/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder', { SalesOrderType: 'OR', SalesOrganization: '1000', DistributionChannel: '10', OrganizationDivision: '00', SoldToParty: 'CUST-1000' }); expect(createResponse.status).toBe(201); const salesOrder = createResponse.body.d.SalesOrder; // READ with $expand const readResponse = await odataClient.get( `/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder('${salesOrder}')?$expand=to_Item` ); expect(readResponse.status).toBe(200); expect(readResponse.body.d.SalesOrder).toBe(salesOrder); // READ collection with $filter const listResponse = await odataClient.get( `/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder?$filter=SoldToParty eq 'CUST-1000'&$top=10` ); expect(listResponse.status).toBe(200); expect(listResponse.body.d.results.length).toBeGreaterThan(0); }); it('validates OData $metadata contract', async () => { const metadata = await odataClient.get( '/sap/opu/odata/sap/API_SALES_ORDER_SRV/$metadata' ); expect(metadata.status).toBe(200); const parsedMetadata = parseEdmx(metadata.body); expect(parsedMetadata.entityTypes).toContain('A_SalesOrder'); expect(parsedMetadata.entityTypes).toContain('A_SalesOrderItem'); // Validate required properties exist const salesOrderType = parsedMetadata.getEntityType('A_SalesOrder'); expect(salesOrderType.properties).toContain('SalesOrder'); expect(salesOrderType.properties).toContain('SalesOrderType'); expect(salesOrderType.navigationProperties).toContain('to_Item'); }); });
Fiori Launchpad Testing
describe('Fiori Launchpad App Testing', () => { it('validates Fiori tile loads and displays correct data', async () => { await page.goto(`${fioriLaunchpadUrl}#SalesOrder-manage`); // Wait for OData call to complete await page.waitForResponse(resp => resp.url().includes('API_SALES_ORDER_SRV') && resp.status() === 200 ); // Verify smart table loaded with data const tableRows = await page.locator('table tbody tr'); expect(await tableRows.count()).toBeGreaterThan(0); // Verify filter bar is functional await page.fill('[data-sap-ui="filterField-SalesOrder"]', '1000000'); await page.click('[data-sap-ui="btnGo"]'); await page.waitForResponse(resp => resp.url().includes("$filter=SalesOrder eq '1000000'") ); }); });
Cross-System Data Validation
describe('Cross-System Data Consistency', () => { it('SAP inventory matches WMS inventory', async () => { const materials = ['MAT-100', 'MAT-200', 'MAT-300']; for (const material of materials) { // Get SAP stock const sapStock = await sapClient.call('BAPI_MATERIAL_STOCK_REQ_LIST', { MATERIAL: material, PLANT: '1000' }); const sapQuantity = parseFloat(sapStock.TOTAL_STOCK); // Get WMS inventory const wmsInventory = await wmsApi.get(`/inventory/${material}`); const wmsQuantity = wmsInventory.body.availableQuantity; expect(wmsQuantity).toBe(sapQuantity); } }); it('customer master data is consistent across systems', async () => { const customerId = 'CUST-1000'; const sapCustomer = await sapClient.call('BAPI_CUSTOMER_GETDETAIL', { CUSTOMERNO: customerId }); const crmCustomer = await crmApi.get(`/customers/${customerId}`); const wmsCustomer = await wmsApi.get(`/customers/${customerId}`); // Core fields must match expect(crmCustomer.body.name).toBe(sapCustomer.CUSTOMER_GENERAL_DATA.NAME); expect(wmsCustomer.body.name).toBe(sapCustomer.CUSTOMER_GENERAL_DATA.NAME); expect(crmCustomer.body.taxId).toBe(sapCustomer.CUSTOMER_GENERAL_DATA.TAX_NUMBER); }); it('order status is synchronized across all systems', async () => { const orderId = 'ORD-SYNC-TEST'; // Create order and wait for propagation await api.post('/orders', { orderId, customerId: 'CUST-1000', items: [{ sku: 'MAT-100', qty: 5 }] }); await sleep(10000); // Allow for async propagation const webStatus = (await api.get(`/orders/${orderId}`)).body.status; const sapStatus = (await sapClient.call('BAPI_SALESORDER_GETDETAIL', { SALESDOCUMENT: orderId })).ORDER_HEADER_OUT.DOC_STATUS; const wmsStatus = (await wmsApi.get(`/orders/${orderId}`)).body.status; // All systems should reflect same logical status expect(mapSapStatus(sapStatus)).toBe(webStatus); expect(mapWmsStatus(wmsStatus)).toBe(webStatus); }); });
Enterprise Test Data Management
describe('Enterprise Test Data Strategy', () => { // Master data setup - reusable across test suites const masterDataFixture = { async setup() { // Create customer in SAP (source of truth) const customer = await sapClient.call('BAPI_CUSTOMER_CREATE', { PI_COPYREFERENCE: { SALESORG: '1000', DISTR_CHAN: '10' }, PI_PERSONALDATA: { FIRSTNAME: 'Test', LASTNAME: `Customer-${Date.now()}` } }); await sapClient.call('BAPI_TRANSACTION_COMMIT', { WAIT: 'X' }); // Wait for replication to downstream systems await waitFor(async () => { const wms = await wmsApi.get(`/customers/${customer.CUSTOMERNO}`); return wms.status === 200; }, { timeout: 60000 }); return { customerId: customer.CUSTOMERNO }; }, async teardown(customerId) { // Mark customer for deletion (SAP does not hard delete) await sapClient.call('BAPI_CUSTOMER_CHANGEFROMDATA', { CUSTOMERNO: customerId, PI_PERSONALDATA: { DELETION_FLAG: 'X' } }); await sapClient.call('BAPI_TRANSACTION_COMMIT', { WAIT: 'X' }); } }; let testCustomer; beforeAll(async () => { testCustomer = await masterDataFixture.setup(); }); afterAll(async () => { await masterDataFixture.teardown(testCustomer.customerId); }); it('uses properly replicated test customer', async () => { const order = await api.post('/orders', { customerId: testCustomer.customerId, items: [{ sku: 'MAT-100', qty: 1 }] }); expect(order.status).toBe(201); }); });
Environment Strategy
Enterprise Environment Matrix
| Environment | Purpose | Data | SAP Client | Access |
|---|---|---|---|---|
| Sandbox (SBX) | Developer exploration | Sample data | 100 | Open |
| Development (DEV) | Feature development | Synthetic | 200 | Dev team |
| Integration (INT) | Cross-system testing | Controlled sets | 300 | QE + Dev |
| Quality (QAS) | Release validation | Production-like | 400 | QE only |
| Pre-Production (PRE) | Final verification | Masked production copy | 500 | Release team |
| Production (PRD) | Live system | Real data | 600 | Operations |
// Environment-aware test configuration const envConfig = { INT: { sapClient: '300', sapHost: 'sap-int.company.com', wmsHost: 'wms-int.company.com', middlewareHost: 'esb-int.company.com', testDataStrategy: 'synthetic', // Create and teardown maxParallelTests: 5 }, QAS: { sapClient: '400', sapHost: 'sap-qas.company.com', wmsHost: 'wms-qas.company.com', middlewareHost: 'esb-qas.company.com', testDataStrategy: 'reserved-sets', // Pre-allocated test data maxParallelTests: 3 } }; function getTestConfig() { const env = process.env.TEST_ENVIRONMENT || 'INT'; return envConfig[env]; }
Enterprise Quality Gates
QCSD Flags for Enterprise Systems
const enterpriseFlags = { HAS_MIDDLEWARE: true, // ESB/middleware in the flow HAS_SAP_INTEGRATION: true, // SAP RFC/BAPI/IDoc/OData calls HAS_AUTHORIZATION: true, // SoD and role-based access HAS_CROSS_SYSTEM_DATA: true, // Data replicated across systems HAS_ASYNC_PROCESSING: true, // IDoc, message queue, batch jobs HAS_LEGACY_PROTOCOL: true // SOAP, RFC, flat-file, EDI };
Release Readiness Criteria
describe('Enterprise Release Readiness', () => { it('passes all enterprise quality gates', async () => { const gates = [ { name: 'Cross-System Data Consistency', check: async () => { const results = await runDataReconciliation(['MAT-100', 'MAT-200']); return results.every(r => r.consistent); } }, { name: 'IDoc Processing Success Rate', check: async () => { const stats = await sapClient.call('IDOC_STATUS_SUMMARY', { PERIOD: 'LAST_24H' }); const successRate = stats.SUCCESS / stats.TOTAL; return successRate >= 0.99; // 99% threshold } }, { name: 'Middleware Error Rate', check: async () => { const errors = await middlewareMonitor.getErrorCount({ period: '24h' }); return errors < 10; // Less than 10 errors in 24h } }, { name: 'SoD Violations', check: async () => { const violations = await sodAnalyzer.scan({ scope: 'changed-roles' }); return violations.critical === 0; } }, { name: 'E2E Order Flow', check: async () => { const result = await runE2EOrderFlow(); return result.allStepsCompleted && result.duration < 120000; // Under 2 minutes } } ]; for (const gate of gates) { const passed = await gate.check(); expect(passed).toBe(true); } }); });
Best Practices
Do This
- Map the full E2E flow before writing any tests
- Test each integration boundary separately AND end-to-end
- Use SAP-aware test data management (create, use, teardown with BAPIs)
- Validate data consistency across all systems after each integration event
- Include IDoc status monitoring in your test assertions
- Test authorization (SoD) as part of every enterprise release gate
- Use service virtualization for systems that are hard to provision
Avoid This
- Testing SAP only through the UI (Fiori/SAP GUI) without API-level tests
- Ignoring IDoc error statuses (51, 56) and only checking happy path
- Sharing test data between teams without reservation mechanisms
- Testing enterprise flows only in sandbox environments
- Skipping BAPI_TRANSACTION_COMMIT after create/update BAPIs
- Assuming cross-system data is immediately consistent (allow for async propagation)
- Deploying without verifying SoD compliance for changed authorization roles
Agent-Assisted Enterprise Testing
// SAP RFC/BAPI function testing await Task("SAP BAPI Validation", { bapis: ['BAPI_SALESORDER_CREATEFROMDAT2', 'BAPI_SALESORDER_GETDETAIL'], testScenarios: ['valid-input', 'missing-required', 'invalid-customer', 'commit-rollback'], validateReturnStructure: true }, "qe-sap-rfc-tester"); // IDoc processing validation await Task("IDoc Flow Validation", { idocType: 'ORDERS05', direction: 'inbound', testStatuses: ['53-success', '51-application-error', '56-syntax-error'], validateSapDocument: true }, "qe-sap-idoc-tester"); // OData contract testing await Task("OData Service Contract Test", { serviceUrl: '/sap/opu/odata/sap/API_SALES_ORDER_SRV', validateMetadata: true, testCrud: true, testFilters: ['$filter', '$expand', '$orderby', '$top', '$skip'], checkBackwardCompatibility: true }, "qe-odata-contract-tester"); // SOAP service validation await Task("SOAP Service Validation", { wsdl: 'services/OrderService.wsdl', operations: ['CreateOrder', 'GetOrderStatus'], testWsSecurity: true, testFaultCodes: true }, "qe-soap-tester"); // Middleware flow validation await Task("Middleware Integration Test", { flow: 'order-to-cash', stages: ['web-api', 'esb-routing', 'sap-rfc', 'wms-api'], testDLQ: true, testCompensation: true, validateCorrelationIds: true }, "qe-middleware-validator"); // Message broker testing await Task("Message Broker Validation", { broker: 'ibm-mq', queues: ['orders.inbound', 'orders.sap', 'orders.wms', 'orders.dlq'], testOrdering: true, testRetry: true }, "qe-message-broker-tester"); // Segregation of Duties analysis await Task("SoD Conflict Analysis", { scope: 'changed-roles', ruleSet: 'sap-standard', criticalTransactions: ['ME21N', 'ME29N', 'MIRO', 'FB60'], reportFormat: 'matrix' }, "qe-sod-analyzer");
Agent Coordination Hints
Memory Namespace
aqe/enterprise-integration/ flows/ - E2E flow definitions and test results sap/ rfc-results/ - RFC/BAPI test outcomes idoc-results/ - IDoc processing validation odata-contracts/ - OData $metadata snapshots and diffs middleware/ routing/ - ESB routing test results transforms/ - Transformation validation cross-system/ reconciliation/ - Data consistency reports master-data/ - Master data sync validation authorization/ sod-reports/ - SoD conflict analysis results role-testing/ - Role and permission test results quality-gates/ - Enterprise release gate results
Fleet Coordination
const enterpriseFleet = await FleetManager.coordinate({ strategy: 'enterprise-integration', agents: [ 'qe-sap-rfc-tester', // SAP function module testing 'qe-sap-idoc-tester', // IDoc processing validation 'qe-odata-contract-tester', // OData/Fiori service testing 'qe-soap-tester', // SOAP/ESB endpoint testing 'qe-message-broker-tester', // Message broker flows 'qe-middleware-validator', // Middleware routing/transformation 'qe-sod-analyzer' // Authorization and SoD ], topology: 'hierarchical' }); await enterpriseFleet.execute({ flow: 'order-to-cash', phases: [ { name: 'contract-validation', agents: ['qe-odata-contract-tester', 'qe-soap-tester'] }, { name: 'integration-testing', agents: ['qe-sap-rfc-tester', 'qe-sap-idoc-tester', 'qe-middleware-validator'] }, { name: 'e2e-validation', agents: ['qe-message-broker-tester'] }, { name: 'authorization-check', agents: ['qe-sod-analyzer'] } ] });
Related Skills
- api-testing-patterns - REST/GraphQL API testing fundamentals
- contract-testing - Consumer-driven contract testing with Pact
- middleware-testing-patterns - ESB, routing, transformation, DLQ
- wms-testing-patterns - Warehouse management system testing
- chaos-engineering-resilience - Fault injection for enterprise systems
- database-testing - Database integrity and migration testing
- security-testing - Security and authorization testing
Remember
Enterprise integration testing is about verifying that independently correct systems work correctly together. No system is an island. Test each integration boundary with protocol-appropriate tools, validate cross-system data consistency, and always include authorization and SoD checks. The biggest risks are in the seams between systems, not within them.
With Agents: Use specialized agents for each integration type (RFC, IDoc, OData, SOAP, messaging). Orchestrate them hierarchically: contract validation first, then integration testing, then E2E flows, then authorization. The enterprise fleet catches cross-system inconsistencies that single-system testing misses entirely.