bcquality/custom/knowledge/testing/bcpt-scenarios-must-be-app-specific.md
Michael Dieringer dd5637b1db Custom-laget bestaar nu begge CI-checks: 72 validator-fejl -> 0
Normalisering af alle 39 custom knowledge-filer til READ-kontraktens
skema (validate_frontmatter.py + Test-KnowledgeIndex.ps1 begge groenne):

- R01/R02: 28 filer manglede frontmatter eller brugte aeldre skemaer
  (title/category/severity/rule-id m.fl.) - alle har nu praecis de 6
  kraevede noegler; keywords haandskrevet pr. fil da de driver
  worklist-selektionen i INDEX/knowledge-index
- R09: manglende Description-sektion - regel-agtige foersteoverskrifter
  (Core Rule/Rule/Regel/Core Principle) omdoebt, eller sektion indsat
  efter titlen hvor intro-tekst fandtes
- R10: fenced code blocks konverteret til 4-space indrykkede blokke
  i alle filer (indhold uaendret)
- R11: 4 filer over 100 linjer fortaettet redaktionelt uden semantisk
  tab (ai-eval-scores 143->100, git-lifecycle 121->97,
  permission-sets 113->99, test-feature-scenario-tags 105->91)
- R05: AL0197->al0197, add_repo->add-repo; keyword-lister trimmet
  til maks 10

Ingen regler er fjernet eller aendret i betydning - kun form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 23:47:31 +02:00

3.7 KiB

bc-version domain keywords technologies countries application-area
all
testing
bcpt
performance-test
scenarios
app-specific
al
w1
all

CURABIS Testing: BCPT Scenarios Must Be App-Specific

Description

A PerformanceTest app must include BCPT scenario codeunits that exercise the host app's own business flows — not only the generic Microsoft scenarios (sales orders, purchase orders, GL entries). Generic scenarios measure BC's baseline performance; app-specific scenarios are the only way to detect performance regressions in the extension's own code.

Key Principle

"A PerformanceTest app that contains only Microsoft's shipped BCPT samples provides no regression signal for the extension it was built to test."

What Must Be Included

For every major business flow in the host app, create a corresponding BCPT* codeunit that:

  1. Is a SingleInstance = true codeunit
  2. Implements "BCPT Test Param. Provider" interface
  3. Wraps the key operation in BCPTTestContext.StartScenario() / BCPTTestContext.EndScenario() blocks
  4. Sets up all required data in a local InitTest() procedure — never depends on hardcoded records

Example: Project Management App

codeunit 80100 "BCPT Create Project" implements "BCPT Test Param. Provider"
{
    SingleInstance = true;

    trigger OnRun()
    begin
        if not IsInitialized then begin
            InitTest();
            IsInitialized := true;
        end;
        CreateProject(GlobalBCPTTestContext);
    end;

    var
        GlobalBCPTTestContext: Codeunit "BCPT Test Context";
        IsInitialized: Boolean;

    local procedure InitTest()
    begin
        // Set up any required BC configuration
    end;

    local procedure CreateProject(var BCPTTestContext: Codeunit "BCPT Test Context")
    begin
        BCPTTestContext.StartScenario('Create Project Header');
        // ... create project
        BCPTTestContext.EndScenario('Create Project Header');
        BCPTTestContext.UserWait();

        BCPTTestContext.StartScenario('Add Project Task');
        // ... add task
        BCPTTestContext.EndScenario('Add Project Task');
    end;

    procedure GetDefaultParameters(): Text[1000]
    begin
        exit('');
    end;

    procedure ValidateParameters(Parameters: Text[1000])
    begin
    end;
}

Suggested Scenarios for Project Management Apps

Scenario codeunit What it measures
BCPT Create Project Header + task creation overhead
BCPT Post Time Entry Time registration and FlowField recalc performance
BCPT Open Project List Page rendering under load
BCPT Open Active Task List Filtered list performance
BCPT Calculate Project Budget Aggregation codeunit performance

Anti-Pattern

A PerformanceTest app that only contains Microsoft's generic samples:

  • BCPTCreateSOWithNLines
  • BCPTOpenCustomerList
  • BCPTPostItemJournal

...tests Business Central, not your extension. A regression in your codeunit will go undetected.

BCApps Reference

The BCPT scenario pattern — SingleInstance, "BCPT Test Param. Provider", named StartScenario/EndScenario blocks — is defined in BCApps Performance Toolkit. Microsoft's shipped samples are intended as starting points and baselines, not as complete test coverage for an extension.