Skip to content

Comments

Add testing guidance for Azure Functions to prevent common pitfalls#1013

Open
paulyuk wants to merge 1 commit intomainfrom
add-testing-guidance
Open

Add testing guidance for Azure Functions to prevent common pitfalls#1013
paulyuk wants to merge 1 commit intomainfrom
add-testing-guidance

Conversation

@paulyuk
Copy link
Member

@paulyuk paulyuk commented Feb 23, 2026

Problem

When testing Azure Functions after deployment, we repeatedly hit the same issues:

  1. Missing /api/ prefix - Functions return 404 because we test /shorten instead of /api/shorten
  2. Cold start delays - First request times out on Consumption plans
  3. RBAC propagation delays - 401/403 errors immediately after provision

These cause functions to appear "broken" when they're actually working correctly.

Solution

1. New common/testing.md file

Comprehensive testing guide covering:

  • Route prefix behavior and how to test correctly
  • Cold start delays by plan type
  • RBAC propagation timing
  • Testing checklist
  • Sample test script
  • Common errors table

2. Updated composition.md Step 8

Added mandatory callout to read testing guide before testing, with quick example showing correct URL format.

Key Guidance

# ✅ Correct - includes /api/ prefix
curl https://func-app.azurewebsites.net/api/shorten

# ❌ Wrong - missing /api/, returns 404
curl https://func-app.azurewebsites.net/shorten

Or set routePrefix: "" in host.json to remove the prefix.

Files Changed

  • recipes/common/testing.md (new) - Testing guidance document
  • recipes/composition.md - Added Step 8 with testing callout

Testing

Validated by deploying test3 with Bicep and confirming the route prefix issue was the root cause of apparent 404s.

Add common/testing.md with critical testing pitfalls:
- Route prefix: /api/ is default, document how to test correctly
- Cold start delays: explain wait times for Consumption plans
- RBAC propagation: 30-60s delay after provision
- Testing checklist and sample script
- Common errors and solutions table

Update composition.md Step 8 to reference testing guide with
mandatory callout about route prefix.

This addresses recurring issues where functions appear broken
due to testing with wrong URL (missing /api/ prefix).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings February 23, 2026 21:44
@paulyuk paulyuk self-assigned this Feb 23, 2026
@github-actions
Copy link
Contributor

🔍 Token Analysis Report

@github-copilot-for-azure/scripts@1.0.0 tokens
node --import tsx src/tokens/cli.ts compare --base origin/main --head HEAD --markdown

fatal: path 'plugin/skills/azure-prepare/references/services/functions/templates/recipes/common/testing.md' exists on disk, but not in 'origin/main'

📊 Token Change Report

Comparing origin/mainHEAD

Summary

Metric Value
📈 Total Change +1,130 tokens (+25%)
Before 4,564 tokens
After 5,694 tokens
Files Changed 2

Changed Files

File Before After Change
plugin/skills/azure-prepare/references/services/functions/templates/recipes/common/testing.md - 932 +932
plugin/skills/azure-prepare/references/services/functions/templates/recipes/composition.md 4,564 4,762 +198 (+4%)

@github-copilot-for-azure/scripts@1.0.0 tokens
node --import tsx src/tokens/cli.ts check --markdown

📊 Token Limit Check Report

Checked: 389 files
Exceeded: 94 files

⚠️ Files Exceeding Token Limits

File Tokens Limit Over By
.github/skills/file-test-bug/SKILL.md 613 500 +113
.github/skills/sensei/README.md 3530 1000 +2530
.github/skills/sensei/SKILL.md 2216 500 +1716
.github/skills/sensei/references/EXAMPLES.md 3328 1000 +2328
.github/skills/sensei/references/LOOP.md 3717 1000 +2717
.github/skills/sensei/references/SCORING.md 2521 1000 +1521
.github/skills/sensei/references/TOKEN-INTEGRATION.md 1094 1000 +94
.github/skills/skill-authoring/SKILL.md 732 500 +232
plugin/skills/appinsights-instrumentation/SKILL.md 952 500 +452
plugin/skills/azure-ai/SKILL.md 835 500 +335
plugin/skills/azure-aigateway/SKILL.md 6329 500 +5829
plugin/skills/azure-compliance/SKILL.md 1238 500 +738
plugin/skills/azure-compliance/references/azqr-recommendations.md 1447 1000 +447
plugin/skills/azure-compliance/references/azqr-remediation-patterns.md 1987 1000 +987
plugin/skills/azure-compliance/references/azure-keyvault-expiration-audit.md 1286 1000 +286
plugin/skills/azure-compliance/references/azure-quick-review.md 1268 1000 +268
plugin/skills/azure-cost-optimization/SKILL.md 3456 500 +2956
plugin/skills/azure-deploy/SKILL.md 961 500 +461
plugin/skills/azure-deploy/references/pre-deploy-checklist.md 1004 1000 +4
plugin/skills/azure-deploy/references/recipes/azd/errors.md 1136 1000 +136
plugin/skills/azure-deploy/references/troubleshooting.md 1527 1000 +527
plugin/skills/azure-diagnostics/SKILL.md 876 500 +376
plugin/skills/azure-kusto/SKILL.md 2167 500 +1667
plugin/skills/azure-messaging/SKILL.md 857 500 +357
plugin/skills/azure-messaging/references/service-troubleshooting.md 1044 1000 +44
plugin/skills/azure-observability/SKILL.md 939 500 +439
plugin/skills/azure-postgres/SKILL.md 1519 500 +1019
plugin/skills/azure-postgres/references/entra-rbac-overview.md 1823 1000 +823
plugin/skills/azure-postgres/references/group-sync.md 1844 1000 +844
plugin/skills/azure-postgres/references/permission-templates.md 1647 1000 +647
plugin/skills/azure-postgres/references/troubleshooting.md 1959 1000 +959
plugin/skills/azure-prepare/SKILL.md 1545 500 +1045
plugin/skills/azure-prepare/references/aspire.md 2633 1000 +1633
plugin/skills/azure-prepare/references/azure-context.md 1019 1000 +19
plugin/skills/azure-prepare/references/recipes/azd/aspire.md 1289 1000 +289
plugin/skills/azure-prepare/references/recipes/azd/azure-yaml.md 1709 1000 +709
plugin/skills/azure-prepare/references/recipes/azd/terraform.md 2924 1000 +1924
plugin/skills/azure-prepare/references/research.md 1797 1000 +797
plugin/skills/azure-prepare/references/runtimes/nodejs.md 1508 1000 +508
plugin/skills/azure-prepare/references/security.md 1784 1000 +784
plugin/skills/azure-prepare/references/services/functions/bicep.md 1969 1000 +969
plugin/skills/azure-prepare/references/services/functions/templates/SPEC-composable-templates.md 6187 1000 +5187
plugin/skills/azure-prepare/references/services/functions/templates/recipes/README.md 1354 1000 +354
plugin/skills/azure-prepare/references/services/functions/templates/recipes/common/nodejs-entry-point.md 1034 1000 +34
plugin/skills/azure-prepare/references/services/functions/templates/recipes/common/uami-bindings.md 1223 1000 +223
plugin/skills/azure-prepare/references/services/functions/templates/recipes/composition.md 4762 1000 +3762
plugin/skills/azure-prepare/references/services/functions/templates/recipes/cosmosdb/README.md 1467 1000 +467
plugin/skills/azure-prepare/references/services/functions/templates/recipes/durable/README.md 1149 1000 +149
plugin/skills/azure-prepare/references/services/functions/templates/recipes/eventhubs/README.md 1403 1000 +403
plugin/skills/azure-prepare/references/services/functions/templates/recipes/mcp/source/java.md 1312 1000 +312
plugin/skills/azure-prepare/references/services/functions/templates/recipes/mcp/source/python.md 1207 1000 +207
plugin/skills/azure-prepare/references/services/functions/templates/recipes/mcp/source/typescript.md 1138 1000 +138
plugin/skills/azure-prepare/references/services/functions/templates/recipes/servicebus/README.md 1171 1000 +171
plugin/skills/azure-prepare/references/services/functions/templates/recipes/servicebus/source/dotnet.md 1256 1000 +256
plugin/skills/azure-prepare/references/services/functions/templates/recipes/sql/source/java.md 1009 1000 +9
plugin/skills/azure-prepare/references/services/functions/templates/recipes/sql/source/python.md 1080 1000 +80
plugin/skills/azure-prepare/references/services/functions/terraform.md 2358 1000 +1358
plugin/skills/azure-prepare/references/services/service-bus/patterns.md 1010 1000 +10
plugin/skills/azure-resource-lookup/SKILL.md 1379 500 +879
plugin/skills/azure-resource-lookup/references/azure-resource-graph.md 1307 1000 +307
plugin/skills/azure-resource-visualizer/SKILL.md 2091 500 +1591
plugin/skills/azure-storage/SKILL.md 1092 500 +592
plugin/skills/azure-storage/references/sdk-usage.md 1096 1000 +96
plugin/skills/azure-validate/SKILL.md 734 500 +234
plugin/skills/azure-validate/references/recipes/azd/README.md 1147 1000 +147
plugin/skills/entra-app-registration/SKILL.md 2055 500 +1555
plugin/skills/entra-app-registration/references/api-permissions.md 2545 1000 +1545
plugin/skills/entra-app-registration/references/cli-commands.md 2211 1000 +1211
plugin/skills/entra-app-registration/references/console-app-example.md 2752 1000 +1752
plugin/skills/entra-app-registration/references/first-app-registration.md 1846 1000 +846
plugin/skills/entra-app-registration/references/oauth-flows.md 2375 1000 +1375
plugin/skills/entra-app-registration/references/troubleshooting.md 1896 1000 +896
plugin/skills/microsoft-foundry/SKILL.md 1934 500 +1434
plugin/skills/microsoft-foundry/foundry-agent/create/create.md 3095 1000 +2095
plugin/skills/microsoft-foundry/foundry-agent/create/references/agentframework.md 1177 1000 +177
plugin/skills/microsoft-foundry/foundry-agent/deploy/deploy.md 3557 1000 +2557
plugin/skills/microsoft-foundry/foundry-agent/invoke/invoke.md 1273 1000 +273
plugin/skills/microsoft-foundry/foundry-agent/troubleshoot/troubleshoot.md 1299 1000 +299
plugin/skills/microsoft-foundry/models/deploy-model/SKILL.md 1627 500 +1127
plugin/skills/microsoft-foundry/models/deploy-model/capacity/SKILL.md 1725 500 +1225
plugin/skills/microsoft-foundry/models/deploy-model/customize/SKILL.md 2220 500 +1720
plugin/skills/microsoft-foundry/models/deploy-model/customize/references/customize-workflow.md 1859 1000 +859
plugin/skills/microsoft-foundry/models/deploy-model/preset/SKILL.md 1212 500 +712
plugin/skills/microsoft-foundry/models/deploy-model/preset/references/preset-workflow.md 4252 1000 +3252
plugin/skills/microsoft-foundry/models/deploy-model/preset/references/workflow.md 1315 1000 +315
plugin/skills/microsoft-foundry/project/create/create-foundry-project.md 1218 1000 +218
plugin/skills/microsoft-foundry/quota/references/ptu-guide.md 1473 1000 +473
plugin/skills/microsoft-foundry/quota/references/troubleshooting.md 1807 1000 +807
plugin/skills/microsoft-foundry/quota/references/workflows.md 1614 1000 +614
plugin/skills/microsoft-foundry/rbac/rbac.md 1752 1000 +752
plugin/skills/microsoft-foundry/references/sdk/foundry-sdk-py.md 1888 1000 +888
plugin/skills/microsoft-foundry/resource/create/create-foundry-resource.md 1489 1000 +489
plugin/skills/microsoft-foundry/resource/create/references/workflows.md 1637 1000 +637
.github/agents/SkillCreator.agent.md 1044 1000 +44

Consider moving content to references/ subdirectories.


Automated token analysis. See skill authoring guidelines for best practices.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds comprehensive testing guidance for Azure Functions to prevent common deployment testing failures. The documentation addresses three recurring issues: missing /api/ route prefix in test URLs, cold start delays on Consumption plans, and RBAC propagation delays causing auth failures.

Changes:

  • Added new recipes/common/testing.md file with detailed testing guidance covering route prefix behavior, cold start delays, RBAC propagation, testing checklist, sample test scripts, and common errors
  • Added Step 8 to recipes/composition.md that mandates reading the testing guide before testing, with a quick reference to the most common pitfalls

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
plugin/skills/azure-prepare/references/services/functions/templates/recipes/common/testing.md New comprehensive testing guide documenting route prefix behavior, cold start delays, RBAC propagation, testing strategies, and common errors
plugin/skills/azure-prepare/references/services/functions/templates/recipes/composition.md Added Step 8 with mandatory callout to testing guide and quick test examples showing correct /api/ prefix usage

echo -e "\nTesting create endpoint..."
RESULT=$(curl -s -X POST "$FUNC_URL/api/shorten" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}')
Copy link
Member

@JasonYeMSFT JasonYeMSFT Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I recommend using a placeholder value that is clearly a placehold instead (e.g. {function_endpoint}) of https://example.com.

- [ ] **Cold start**: Waited for first request to complete (up to 30s)
- [ ] **RBAC**: Waited 60s after provision for role assignments to propagate
- [ ] **App settings**: Verified settings are deployed (`az functionapp config appsettings list`)
- [ ] **Logs**: Checked Application Insights for actual errors
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious if this works? as in will it look in logs for actual errors?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants