qa-skills 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -0
- package/bin/cli.js +42 -0
- package/dist/agents/registry.d.ts +5 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +101 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +9 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/dependencies.d.ts +21 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +125 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +437 -0
- package/dist/installer.js.map +1 -0
- package/dist/scaffold.d.ts +27 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +182 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +40 -0
- package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
- package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
- package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
- package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
- package/skills/qa-api-contract-curator/SKILL.md +104 -0
- package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
- package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
- package/skills/qa-browser-data-collector/SKILL.md +132 -0
- package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
- package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
- package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
- package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
- package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
- package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
- package/skills/qa-changelog-analyzer/SKILL.md +134 -0
- package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
- package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
- package/skills/qa-clickup-integration/SKILL.md +166 -0
- package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
- package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
- package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
- package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
- package/skills/qa-codeceptjs-writer/references/config.md +255 -0
- package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
- package/skills/qa-coverage-analyzer/SKILL.md +166 -0
- package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
- package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
- package/skills/qa-coverage-analyzer/references/tools.md +204 -0
- package/skills/qa-cypress-writer/SKILL.md +134 -0
- package/skills/qa-cypress-writer/references/assertions.md +121 -0
- package/skills/qa-cypress-writer/references/best-practices.md +82 -0
- package/skills/qa-cypress-writer/references/config.md +121 -0
- package/skills/qa-cypress-writer/references/patterns.md +170 -0
- package/skills/qa-data-factory/SKILL.md +126 -0
- package/skills/qa-data-factory/references/factory-patterns.md +164 -0
- package/skills/qa-data-factory/references/faker-guide.md +131 -0
- package/skills/qa-diagram-generator/SKILL.md +125 -0
- package/skills/qa-diagram-generator/references/c4-model.md +53 -0
- package/skills/qa-diagram-generator/references/charts.md +58 -0
- package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
- package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
- package/skills/qa-diagram-generator/references/flowchart.md +92 -0
- package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
- package/skills/qa-diagram-generator/references/gantt.md +49 -0
- package/skills/qa-diagram-generator/references/journey.md +50 -0
- package/skills/qa-diagram-generator/references/mindmap.md +75 -0
- package/skills/qa-diagram-generator/references/sequence.md +69 -0
- package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
- package/skills/qa-discovery-interview/SKILL.md +182 -0
- package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
- package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
- package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
- package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
- package/skills/qa-environment-checker/SKILL.md +142 -0
- package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
- package/skills/qa-environment-checker/references/health-checks.md +209 -0
- package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
- package/skills/qa-flaky-detector/SKILL.md +153 -0
- package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
- package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
- package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
- package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
- package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
- package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
- package/skills/qa-httpx-writer/SKILL.md +138 -0
- package/skills/qa-httpx-writer/references/assertions.md +195 -0
- package/skills/qa-httpx-writer/references/best-practices.md +140 -0
- package/skills/qa-httpx-writer/references/config.md +212 -0
- package/skills/qa-httpx-writer/references/patterns.md +262 -0
- package/skills/qa-jest-writer/SKILL.md +131 -0
- package/skills/qa-jest-writer/references/assertions.md +125 -0
- package/skills/qa-jest-writer/references/best-practices.md +136 -0
- package/skills/qa-jest-writer/references/config.md +134 -0
- package/skills/qa-jest-writer/references/patterns.md +172 -0
- package/skills/qa-jira-integration/SKILL.md +135 -0
- package/skills/qa-jira-integration/references/api-patterns.md +143 -0
- package/skills/qa-jira-integration/references/field-mapping.md +79 -0
- package/skills/qa-jira-integration/references/xray-integration.md +85 -0
- package/skills/qa-jmeter-writer/SKILL.md +171 -0
- package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
- package/skills/qa-jmeter-writer/references/config.md +204 -0
- package/skills/qa-jmeter-writer/references/patterns.md +242 -0
- package/skills/qa-junit5-writer/SKILL.md +157 -0
- package/skills/qa-junit5-writer/references/assertions.md +118 -0
- package/skills/qa-junit5-writer/references/config.md +97 -0
- package/skills/qa-junit5-writer/references/patterns.md +162 -0
- package/skills/qa-k6-writer/SKILL.md +155 -0
- package/skills/qa-k6-writer/references/best-practices.md +236 -0
- package/skills/qa-k6-writer/references/config.md +219 -0
- package/skills/qa-k6-writer/references/patterns.md +304 -0
- package/skills/qa-linear-integration/SKILL.md +137 -0
- package/skills/qa-linear-integration/references/api-patterns.md +249 -0
- package/skills/qa-linear-integration/references/field-mapping.md +121 -0
- package/skills/qa-locust-writer/SKILL.md +151 -0
- package/skills/qa-locust-writer/references/best-practices.md +126 -0
- package/skills/qa-locust-writer/references/config.md +170 -0
- package/skills/qa-locust-writer/references/patterns.md +235 -0
- package/skills/qa-manual-test-designer/SKILL.md +145 -0
- package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
- package/skills/qa-manual-test-designer/references/personas.md +146 -0
- package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
- package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
- package/skills/qa-mobile-test-writer/SKILL.md +144 -0
- package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
- package/skills/qa-mobile-test-writer/references/config.md +309 -0
- package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
- package/skills/qa-nfr-analyst/SKILL.md +177 -0
- package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
- package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
- package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
- package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
- package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
- package/skills/qa-orchestrator/SKILL.md +132 -0
- package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
- package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
- package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
- package/skills/qa-pact-writer/SKILL.md +133 -0
- package/skills/qa-pact-writer/references/best-practices.md +100 -0
- package/skills/qa-pact-writer/references/config.md +135 -0
- package/skills/qa-pact-writer/references/patterns.md +161 -0
- package/skills/qa-plan-creator/SKILL.md +139 -0
- package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
- package/skills/qa-plan-creator/references/migration-plan.md +44 -0
- package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
- package/skills/qa-plan-creator/references/performance-plan.md +44 -0
- package/skills/qa-plan-creator/references/regression-plan.md +45 -0
- package/skills/qa-plan-creator/references/release-plan.md +45 -0
- package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
- package/skills/qa-plan-creator/references/test-plan.md +59 -0
- package/skills/qa-plan-creator/references/uat-plan.md +43 -0
- package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
- package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
- package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
- package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
- package/skills/qa-playwright-py-writer/SKILL.md +156 -0
- package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
- package/skills/qa-playwright-py-writer/references/config.md +195 -0
- package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
- package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
- package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
- package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
- package/skills/qa-playwright-ts-writer/references/config.md +144 -0
- package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
- package/skills/qa-pytest-writer/SKILL.md +145 -0
- package/skills/qa-pytest-writer/references/assertions.md +149 -0
- package/skills/qa-pytest-writer/references/best-practices.md +97 -0
- package/skills/qa-pytest-writer/references/config.md +176 -0
- package/skills/qa-pytest-writer/references/patterns.md +251 -0
- package/skills/qa-qase-integration/SKILL.md +149 -0
- package/skills/qa-qase-integration/references/api-reference.md +354 -0
- package/skills/qa-qase-integration/references/ci-integration.md +196 -0
- package/skills/qa-qase-integration/references/field-mapping.md +157 -0
- package/skills/qa-requirements-generator/SKILL.md +152 -0
- package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
- package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
- package/skills/qa-rest-assured-writer/SKILL.md +137 -0
- package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
- package/skills/qa-rest-assured-writer/references/config.md +124 -0
- package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
- package/skills/qa-risk-analyzer/SKILL.md +158 -0
- package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
- package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
- package/skills/qa-robot-framework-writer/SKILL.md +147 -0
- package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
- package/skills/qa-robot-framework-writer/references/config.md +204 -0
- package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
- package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
- package/skills/qa-security-test-writer/SKILL.md +123 -0
- package/skills/qa-security-test-writer/references/best-practices.md +155 -0
- package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
- package/skills/qa-security-test-writer/references/zap-config.md +258 -0
- package/skills/qa-selenium-java-writer/SKILL.md +143 -0
- package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
- package/skills/qa-selenium-java-writer/references/config.md +143 -0
- package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
- package/skills/qa-selenium-py-writer/SKILL.md +150 -0
- package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
- package/skills/qa-selenium-py-writer/references/config.md +224 -0
- package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
- package/skills/qa-shortcut-integration/SKILL.md +143 -0
- package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
- package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
- package/skills/qa-spec-auditor/SKILL.md +162 -0
- package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
- package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
- package/skills/qa-spec-writer/SKILL.md +143 -0
- package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
- package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
- package/skills/qa-spring-test-writer/SKILL.md +170 -0
- package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
- package/skills/qa-spring-test-writer/references/config.md +179 -0
- package/skills/qa-spring-test-writer/references/patterns.md +235 -0
- package/skills/qa-supertest-writer/SKILL.md +150 -0
- package/skills/qa-supertest-writer/references/assertions.md +192 -0
- package/skills/qa-supertest-writer/references/best-practices.md +102 -0
- package/skills/qa-supertest-writer/references/config.md +166 -0
- package/skills/qa-supertest-writer/references/patterns.md +242 -0
- package/skills/qa-task-creator/SKILL.md +142 -0
- package/skills/qa-task-creator/references/linking-patterns.md +127 -0
- package/skills/qa-task-creator/references/task-types.md +169 -0
- package/skills/qa-task-creator/templates/task-template.md +24 -0
- package/skills/qa-test-doc-compiler/SKILL.md +114 -0
- package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
- package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
- package/skills/qa-test-healer/SKILL.md +101 -0
- package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
- package/skills/qa-test-healer/references/fix-strategies.md +177 -0
- package/skills/qa-test-reporter/SKILL.md +130 -0
- package/skills/qa-test-reporter/references/best-practices.md +162 -0
- package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
- package/skills/qa-test-reporter/references/report-formats.md +287 -0
- package/skills/qa-test-reviewer/SKILL.md +142 -0
- package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
- package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
- package/skills/qa-test-strategy/SKILL.md +133 -0
- package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
- package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
- package/skills/qa-test-strategy/references/testing-types.md +143 -0
- package/skills/qa-testcase-from-docs/SKILL.md +161 -0
- package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
- package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
- package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
- package/skills/qa-testcase-from-ui/SKILL.md +109 -0
- package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
- package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
- package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
- package/skills/qa-visual-regression-writer/SKILL.md +175 -0
- package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
- package/skills/qa-visual-regression-writer/references/config.md +220 -0
- package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
- package/skills/qa-vitest-writer/SKILL.md +141 -0
- package/skills/qa-vitest-writer/references/assertions.md +105 -0
- package/skills/qa-vitest-writer/references/best-practices.md +62 -0
- package/skills/qa-vitest-writer/references/config.md +127 -0
- package/skills/qa-vitest-writer/references/patterns.md +141 -0
- package/skills/qa-webdriverio-writer/SKILL.md +145 -0
- package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
- package/skills/qa-webdriverio-writer/references/config.md +240 -0
- package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Locust Patterns
|
|
2
|
+
|
|
3
|
+
## User Classes (HttpUser)
|
|
4
|
+
|
|
5
|
+
### Basic HttpUser
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from locust import HttpUser, task, between
|
|
9
|
+
|
|
10
|
+
class ApiUser(HttpUser):
|
|
11
|
+
wait_time = between(1, 3)
|
|
12
|
+
|
|
13
|
+
@task
|
|
14
|
+
def get_health(self):
|
|
15
|
+
self.client.get("/health")
|
|
16
|
+
|
|
17
|
+
@task(weight=3)
|
|
18
|
+
def get_items(self):
|
|
19
|
+
self.client.get("/api/items")
|
|
20
|
+
|
|
21
|
+
@task(weight=1)
|
|
22
|
+
def create_item(self):
|
|
23
|
+
self.client.post("/api/items", json={"name": "test"})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Multiple User Classes
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
class ReadOnlyUser(HttpUser):
|
|
30
|
+
wait_time = between(2, 5)
|
|
31
|
+
weight = 3 # 3x more likely to spawn
|
|
32
|
+
|
|
33
|
+
@task
|
|
34
|
+
def browse(self):
|
|
35
|
+
self.client.get("/api/items")
|
|
36
|
+
self.client.get("/api/items/1")
|
|
37
|
+
|
|
38
|
+
class WriteUser(HttpUser):
|
|
39
|
+
wait_time = between(1, 2)
|
|
40
|
+
weight = 1
|
|
41
|
+
|
|
42
|
+
@task
|
|
43
|
+
def create_and_update(self):
|
|
44
|
+
r = self.client.post("/api/items", json={"name": "new"})
|
|
45
|
+
if r.status_code == 201:
|
|
46
|
+
item_id = r.json()["id"]
|
|
47
|
+
self.client.put(f"/api/items/{item_id}", json={"name": "updated"})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### on_start / on_stop
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
class AuthenticatedUser(HttpUser):
|
|
54
|
+
wait_time = between(1, 2)
|
|
55
|
+
|
|
56
|
+
def on_start(self):
|
|
57
|
+
"""Run once per user when spawned."""
|
|
58
|
+
r = self.client.post("/auth/login", json={"user": "test", "pass": "secret"})
|
|
59
|
+
self.token = r.json()["token"]
|
|
60
|
+
|
|
61
|
+
def on_stop(self):
|
|
62
|
+
"""Run when user stops (e.g., test end)."""
|
|
63
|
+
self.client.post("/auth/logout", headers={"Authorization": f"Bearer {self.token}"})
|
|
64
|
+
|
|
65
|
+
@task
|
|
66
|
+
def get_profile(self):
|
|
67
|
+
self.client.get("/profile", headers={"Authorization": f"Bearer {self.token}"})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## TaskSets
|
|
71
|
+
|
|
72
|
+
### Nested TaskSets
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
from locust import HttpUser, task, TaskSet, between
|
|
76
|
+
|
|
77
|
+
class BrowseTasks(TaskSet):
|
|
78
|
+
@task
|
|
79
|
+
def list_items(self):
|
|
80
|
+
self.client.get("/api/items")
|
|
81
|
+
|
|
82
|
+
@task
|
|
83
|
+
def view_item(self):
|
|
84
|
+
self.client.get("/api/items/1")
|
|
85
|
+
|
|
86
|
+
class CheckoutTasks(TaskSet):
|
|
87
|
+
@task
|
|
88
|
+
def add_to_cart(self):
|
|
89
|
+
self.client.post("/api/cart", json={"item_id": 1, "qty": 1})
|
|
90
|
+
|
|
91
|
+
@task
|
|
92
|
+
def checkout(self):
|
|
93
|
+
self.client.post("/api/checkout", json={"payment": "card"})
|
|
94
|
+
|
|
95
|
+
class WebUser(HttpUser):
|
|
96
|
+
wait_time = between(1, 3)
|
|
97
|
+
tasks = [BrowseTasks, CheckoutTasks]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Interrupt (stop TaskSet)
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
class CheckoutFlow(TaskSet):
|
|
104
|
+
@task
|
|
105
|
+
def complete_checkout(self):
|
|
106
|
+
self.client.post("/api/cart", json={"item_id": 1})
|
|
107
|
+
self.client.post("/api/checkout")
|
|
108
|
+
self.interrupt() # Return to parent tasks
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Wait Time
|
|
112
|
+
|
|
113
|
+
| Type | Usage | Behavior |
|
|
114
|
+
| ---- | ----- | -------- |
|
|
115
|
+
| `between(min, max)` | Random uniform | Wait min–max seconds |
|
|
116
|
+
| `constant(n)` | Fixed | Wait n seconds every time |
|
|
117
|
+
| `constant_pacing(n)` | Rate-based | Maintain ~1/n seconds between requests |
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from locust import between, constant, constant_pacing
|
|
121
|
+
|
|
122
|
+
wait_time = between(1, 5) # 1–5 sec between tasks
|
|
123
|
+
wait_time = constant(2) # Always 2 sec
|
|
124
|
+
wait_time = constant_pacing(1) # ~1 req/sec per user
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Load Shapes (LoadTestShape)
|
|
128
|
+
|
|
129
|
+
### Ramp-Up / Ramp-Down
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
from locust import LoadTestShape
|
|
133
|
+
|
|
134
|
+
class RampShape(LoadTestShape):
|
|
135
|
+
min_users = 0
|
|
136
|
+
peak_users = 100
|
|
137
|
+
time_limit = 300 # 5 min
|
|
138
|
+
|
|
139
|
+
def tick(self):
|
|
140
|
+
run_time = self.get_run_time()
|
|
141
|
+
if run_time < 60:
|
|
142
|
+
return (int(run_time * self.peak_users / 60), 10) # Ramp up
|
|
143
|
+
elif run_time < 240:
|
|
144
|
+
return (self.peak_users, 10) # Sustain
|
|
145
|
+
elif run_time < self.time_limit:
|
|
146
|
+
return (int(self.peak_users * (300 - run_time) / 60), 10) # Ramp down
|
|
147
|
+
return None # Stop
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Spike Test
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
class SpikeShape(LoadTestShape):
|
|
154
|
+
def tick(self):
|
|
155
|
+
run_time = self.get_run_time()
|
|
156
|
+
if run_time < 30:
|
|
157
|
+
return (10, 5) # Baseline
|
|
158
|
+
elif run_time < 60:
|
|
159
|
+
return (500, 50) # Spike
|
|
160
|
+
elif run_time < 90:
|
|
161
|
+
return (10, 5) # Recovery
|
|
162
|
+
return None
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Soak (Endurance) Test
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
class SoakShape(LoadTestShape):
|
|
169
|
+
def tick(self):
|
|
170
|
+
run_time = self.get_run_time()
|
|
171
|
+
if run_time < 60:
|
|
172
|
+
return (50, 10) # Ramp to 50 users
|
|
173
|
+
elif run_time < 3600: # 1 hour
|
|
174
|
+
return (50, 10) # Hold
|
|
175
|
+
return None
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Event Hooks
|
|
179
|
+
|
|
180
|
+
### Request Events
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
from locust import events
|
|
184
|
+
|
|
185
|
+
@events.request.add_listener
|
|
186
|
+
def on_request(request_type, name, response_time, response_length, exception, **kwargs):
|
|
187
|
+
if exception:
|
|
188
|
+
print(f"Request failed: {name} - {exception}")
|
|
189
|
+
|
|
190
|
+
@events.request.add_listener
|
|
191
|
+
def log_slow_requests(request_type, name, response_time, **kwargs):
|
|
192
|
+
if response_time > 2000: # ms
|
|
193
|
+
print(f"Slow: {name} took {response_time}ms")
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Test Lifecycle
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
@events.test_start.add_listener
|
|
200
|
+
def on_test_start(environment, **kwargs):
|
|
201
|
+
print("Load test starting")
|
|
202
|
+
|
|
203
|
+
@events.test_stop.add_listener
|
|
204
|
+
def on_test_stop(environment, **kwargs):
|
|
205
|
+
print("Load test stopped")
|
|
206
|
+
|
|
207
|
+
@events.init.add_listener
|
|
208
|
+
def on_locust_init(environment, **kwargs):
|
|
209
|
+
# Custom init (e.g., setup connections)
|
|
210
|
+
pass
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Distributed Mode
|
|
214
|
+
|
|
215
|
+
### Master
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
locust -f locustfile.py --master --expect-workers=4
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Workers
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
locust -f locustfile.py --worker --master-host=192.168.1.100
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Headless Distributed
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# Master
|
|
231
|
+
locust -f locustfile.py --master --expect-workers=4 --headless -u 1000 -r 50 -t 300s
|
|
232
|
+
|
|
233
|
+
# Workers (run on separate machines)
|
|
234
|
+
locust -f locustfile.py --worker --master-host=<master-ip>
|
|
235
|
+
```
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-manual-test-designer
|
|
3
|
+
description: Design manual test cases and exploratory testing charters using specification-based techniques, risk-based prioritization, and persona-based testing approaches.
|
|
4
|
+
output_dir: test-cases/manual
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# QA Manual Test Designer
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Design manual test cases and exploratory testing charters for human testers. Combines specification-based test models, risk-based prioritization, and persona-based testing to produce structured test case sets, exploratory session charters, and session report templates.
|
|
12
|
+
|
|
13
|
+
## Trigger Phrases
|
|
14
|
+
|
|
15
|
+
- "Design manual test cases for [feature]"
|
|
16
|
+
- "Create exploratory testing charter" / "Exploratory charter for [area]"
|
|
17
|
+
- "Manual test design from [spec/requirements]"
|
|
18
|
+
- "Risk-based manual test prioritization"
|
|
19
|
+
- "Persona-based test scenarios" / "Test as [Novice/Power User/Admin]"
|
|
20
|
+
- "Session charter for [new feature/regression/security]"
|
|
21
|
+
- "Manual test case set with decision tables"
|
|
22
|
+
- "Exploratory session report template"
|
|
23
|
+
|
|
24
|
+
## Specification-Based Test Models
|
|
25
|
+
|
|
26
|
+
Use these models to derive structured manual test cases per ISO/IEC/IEEE 29119-4:
|
|
27
|
+
|
|
28
|
+
| Model | When to Use | Output |
|
|
29
|
+
| ----- | ----------- | ------ |
|
|
30
|
+
| **Decision tables** | Multiple conditions affecting outcome (validation, business rules) | One test case per rule column |
|
|
31
|
+
| **State transitions** | Workflows, lifecycle states, session management | Test cases for valid/invalid transitions |
|
|
32
|
+
| **Scenario models** | User journeys, use case flows | Main flow, alternate flows, exception flows |
|
|
33
|
+
| **Classification trees** | Complex input spaces (user type × action × data state) | Pairwise or coverage-based combinations |
|
|
34
|
+
|
|
35
|
+
See `references/test-design-techniques.md` (from qa-testcase-from-docs) for technique details.
|
|
36
|
+
|
|
37
|
+
## Exploratory Testing Session Charters
|
|
38
|
+
|
|
39
|
+
Exploratory charters guide time-boxed sessions without scripting every step. Each charter includes:
|
|
40
|
+
|
|
41
|
+
| Element | Description |
|
|
42
|
+
| ------- | ----------- |
|
|
43
|
+
| **Mission statement** | Clear, focused goal (e.g., "Explore checkout flow for guest users") |
|
|
44
|
+
| **Test areas** | Scope: what to explore, what to skip |
|
|
45
|
+
| **Time-box** | 25 / 45 / 90 min — choose based on scope and focus |
|
|
46
|
+
| **Notes template** | Structured placeholders for observations, bugs, ideas |
|
|
47
|
+
| **Debrief structure** | Post-session: what worked, what didn't, risks, follow-ups |
|
|
48
|
+
|
|
49
|
+
See `references/exploratory-charters.md` for templates by scenario (new feature, regression, security, usability).
|
|
50
|
+
|
|
51
|
+
## Risk-Based Test Prioritization for Manual Testing
|
|
52
|
+
|
|
53
|
+
Prioritize manual test cases by risk when time is limited:
|
|
54
|
+
|
|
55
|
+
| Factor | High Risk | Medium Risk | Low Risk |
|
|
56
|
+
| ------ | --------- | ----------- | -------- |
|
|
57
|
+
| **Business impact** | Revenue, compliance, safety | Core workflows | Nice-to-have |
|
|
58
|
+
| **Change frequency** | Recently changed, new code | Moderate changes | Stable |
|
|
59
|
+
| **Complexity** | Multi-step, integrations | Moderate logic | Simple |
|
|
60
|
+
| **User exposure** | High-traffic paths | Common paths | Rare paths |
|
|
61
|
+
|
|
62
|
+
**Output:** Prioritized test case list (P1/P2/P3) with rationale. Run P1 first when time-boxed.
|
|
63
|
+
|
|
64
|
+
## Persona-Based Testing
|
|
65
|
+
|
|
66
|
+
Test from different user perspectives to uncover diverse defects:
|
|
67
|
+
|
|
68
|
+
| Persona | Focus | Typical Behaviors |
|
|
69
|
+
| ------- | ----- | ----------------- |
|
|
70
|
+
| **Novice User** | First-time, confused | Clicks randomly, ignores hints, gets lost |
|
|
71
|
+
| **Power User** | Efficiency, edge cases | Keyboard shortcuts, bulk actions, advanced features |
|
|
72
|
+
| **Attacker** | Malicious input, bypass | SQL injection, XSS, auth bypass, privilege escalation |
|
|
73
|
+
| **Admin** | Configuration, permissions | Role setup, access control, audit logs |
|
|
74
|
+
| **Mobile User** | Touch, small screen | Thumb reach, orientation, slow network |
|
|
75
|
+
|
|
76
|
+
See `references/personas.md` for detailed behaviors, goals, and test scenarios per persona.
|
|
77
|
+
|
|
78
|
+
## Outputs
|
|
79
|
+
|
|
80
|
+
| Output Type | Format | Use Case |
|
|
81
|
+
| ----------- | ------ | -------- |
|
|
82
|
+
| **Manual test case set** | ID, Title, Steps, Expected Results, Priority | Structured execution |
|
|
83
|
+
| **Exploratory charter** | Mission, areas, time-box, notes template | Session planning |
|
|
84
|
+
| **Session report** | Findings, bugs, risks, follow-ups | Post-session debrief |
|
|
85
|
+
|
|
86
|
+
## Workflow
|
|
87
|
+
|
|
88
|
+
1. **Input:** Spec, requirements, or feature description
|
|
89
|
+
2. **Model selection:** Choose test models (decision table, state, scenario, classification tree)
|
|
90
|
+
3. **Derive test cases:** Generate manual test cases with steps and expected results
|
|
91
|
+
4. **Prioritize:** Apply risk-based prioritization (P1/P2/P3)
|
|
92
|
+
5. **Charters (optional):** Create exploratory charters for areas needing exploration
|
|
93
|
+
6. **Personas (optional):** Add persona-based scenarios for coverage diversity
|
|
94
|
+
7. **Output:** Manual test case set + charters + session report template
|
|
95
|
+
|
|
96
|
+
## Scope
|
|
97
|
+
|
|
98
|
+
**Can do (autonomous):**
|
|
99
|
+
- Design manual test cases from specs/requirements using decision tables, state transitions, scenario models, classification trees
|
|
100
|
+
- Create exploratory testing charters with mission, areas, time-box, notes template, debrief structure
|
|
101
|
+
- Apply risk-based prioritization to manual test cases
|
|
102
|
+
- Generate persona-based test scenarios (Novice, Power User, Attacker, Admin, Mobile User)
|
|
103
|
+
- Produce session report templates for exploratory debriefs
|
|
104
|
+
- Reference qa-diagram-generator for state/flow diagrams when needed
|
|
105
|
+
|
|
106
|
+
**Cannot do (requires confirmation):**
|
|
107
|
+
- Change scope or priority set by stakeholders
|
|
108
|
+
- Override organizational test policy or risk thresholds
|
|
109
|
+
- Assign testers or schedule sessions without approval
|
|
110
|
+
|
|
111
|
+
**Will not do (out of scope):**
|
|
112
|
+
- Write test automation code
|
|
113
|
+
- Execute tests or run exploratory sessions
|
|
114
|
+
- Modify production code or environments
|
|
115
|
+
- Approve releases or sign-offs
|
|
116
|
+
|
|
117
|
+
## Quality Checklist
|
|
118
|
+
|
|
119
|
+
- [ ] Manual test cases have clear steps and measurable expected results
|
|
120
|
+
- [ ] Preconditions and postconditions specified where relevant
|
|
121
|
+
- [ ] Risk-based prioritization applied with documented rationale
|
|
122
|
+
- [ ] Exploratory charters include mission, areas, time-box, notes template, debrief structure
|
|
123
|
+
- [ ] Persona-based scenarios cover at least 2–3 personas when diversity is needed
|
|
124
|
+
- [ ] Session report template includes findings, bugs, risks, follow-ups
|
|
125
|
+
- [ ] No duplicate test cases for same scenario
|
|
126
|
+
- [ ] Traceability to requirements/specs where applicable
|
|
127
|
+
|
|
128
|
+
## Troubleshooting
|
|
129
|
+
|
|
130
|
+
| Symptom | Likely Cause | Fix |
|
|
131
|
+
| ------- | ------------ | --- |
|
|
132
|
+
| Vague test steps | Spec lacks detail | Run qa-spec-writer first; add Given/When/Then |
|
|
133
|
+
| Too many test cases | Exhaustive combination | Apply risk prioritization; focus on P1/P2 |
|
|
134
|
+
| Charters too broad | Mission not focused | Narrow mission to single area or flow |
|
|
135
|
+
| Persona scenarios generic | Persona not specific enough | Use `references/personas.md` for concrete behaviors |
|
|
136
|
+
| Session reports incomplete | Missing debrief structure | Include: what worked, what didn't, risks, follow-ups |
|
|
137
|
+
| Low coverage diversity | Only happy path | Add persona-based and negative scenarios |
|
|
138
|
+
|
|
139
|
+
## References
|
|
140
|
+
|
|
141
|
+
| Topic | File |
|
|
142
|
+
| ----- | ---- |
|
|
143
|
+
| Exploratory charter templates | `references/exploratory-charters.md` |
|
|
144
|
+
| Persona details & scenarios | `references/personas.md` |
|
|
145
|
+
| Test design techniques | `references/test-design-techniques.md` (qa-testcase-from-docs) |
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Exploratory Testing Charter Templates
|
|
2
|
+
|
|
3
|
+
Charter templates for different exploratory testing scenarios. Each charter includes mission, test areas, time-box options, notes template, and debrief structure.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## New Feature Charter
|
|
8
|
+
|
|
9
|
+
**Scenario:** First exploration of a newly implemented feature before formal test case execution.
|
|
10
|
+
|
|
11
|
+
### Mission Statement
|
|
12
|
+
Explore [feature name] to understand behavior, identify obvious defects, and map edge cases for follow-up test design.
|
|
13
|
+
|
|
14
|
+
### Test Areas
|
|
15
|
+
- **In scope:** [Feature name], [related flows], [configuration options]
|
|
16
|
+
- **Out of scope:** [Unrelated modules], [performance], [automation]
|
|
17
|
+
|
|
18
|
+
### Time-Box
|
|
19
|
+
- **25 min:** Quick smoke of main flows
|
|
20
|
+
- **45 min:** Main flows + 2–3 alternate paths
|
|
21
|
+
- **90 min:** Full exploration including edge cases and error handling
|
|
22
|
+
|
|
23
|
+
### Notes Template
|
|
24
|
+
| Observation | Severity | Reproducible? | Notes |
|
|
25
|
+
| ----------- | -------- | ------------- | ----- |
|
|
26
|
+
| | | | |
|
|
27
|
+
| | | | |
|
|
28
|
+
|
|
29
|
+
**Bugs found:** [List IDs or brief descriptions]
|
|
30
|
+
**Ideas for test cases:** [Scenarios to formalize]
|
|
31
|
+
**Questions:** [Clarifications needed from dev/product]
|
|
32
|
+
|
|
33
|
+
### Debrief Structure
|
|
34
|
+
- **What worked:** Flows that behaved as expected
|
|
35
|
+
- **What didn't:** Defects, confusing UX, missing validation
|
|
36
|
+
- **Risks:** Areas not explored, assumptions, dependencies
|
|
37
|
+
- **Follow-ups:** Test cases to add, bugs to file, areas for deeper exploration
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Regression Charter
|
|
42
|
+
|
|
43
|
+
**Scenario:** Broad regression exploration after a release or significant change.
|
|
44
|
+
|
|
45
|
+
### Mission Statement
|
|
46
|
+
Explore [module/area] to verify core functionality after [change/release]. Focus on high-traffic paths and recently modified areas.
|
|
47
|
+
|
|
48
|
+
### Test Areas
|
|
49
|
+
- **In scope:** [Core flows], [changed modules], [integration points]
|
|
50
|
+
- **Out of scope:** [Stable, low-risk areas], [new feature deep-dives]
|
|
51
|
+
|
|
52
|
+
### Time-Box
|
|
53
|
+
- **25 min:** Smoke of critical paths only
|
|
54
|
+
- **45 min:** Critical + important paths
|
|
55
|
+
- **90 min:** Full regression sweep with risk-based depth
|
|
56
|
+
|
|
57
|
+
### Notes Template
|
|
58
|
+
| Area Explored | Status | Issues |
|
|
59
|
+
| ------------- | ------ | ------ |
|
|
60
|
+
| | Pass / Fail / Blocked | |
|
|
61
|
+
| | | |
|
|
62
|
+
|
|
63
|
+
**Regression failures:** [List]
|
|
64
|
+
**New issues vs. known:** [Differentiate]
|
|
65
|
+
**Areas skipped (time):** [For follow-up]
|
|
66
|
+
|
|
67
|
+
### Debrief Structure
|
|
68
|
+
- **Pass/Fail summary:** Per area explored
|
|
69
|
+
- **Blockers:** What prevented testing
|
|
70
|
+
- **Comparison to baseline:** Better/worse/same vs. previous version
|
|
71
|
+
- **Follow-ups:** Formal test cases for failures, retest plan
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Security Review Charter
|
|
76
|
+
|
|
77
|
+
**Scenario:** Exploratory security-focused session (complements automated security scans).
|
|
78
|
+
|
|
79
|
+
### Mission Statement
|
|
80
|
+
Explore [feature/module] from a security perspective. Look for injection, auth bypass, data exposure, and privilege escalation risks.
|
|
81
|
+
|
|
82
|
+
### Test Areas
|
|
83
|
+
- **In scope:** [Auth flows], [input fields], [file upload], [API endpoints], [role-based access]
|
|
84
|
+
- **Out of scope:** [Infrastructure], [third-party components]
|
|
85
|
+
|
|
86
|
+
### Time-Box
|
|
87
|
+
- **25 min:** Quick auth and input validation checks
|
|
88
|
+
- **45 min:** Auth + input + basic access control
|
|
89
|
+
- **90 min:** Full security review including session handling, CSRF, data exposure
|
|
90
|
+
|
|
91
|
+
### Notes Template
|
|
92
|
+
| Vulnerability Type | Location | Severity | Steps to Reproduce |
|
|
93
|
+
| ------------------ | -------- | -------- | ------------------ |
|
|
94
|
+
| | | Critical / High / Medium / Low | |
|
|
95
|
+
| | | | |
|
|
96
|
+
|
|
97
|
+
**Attack vectors tried:** [List]
|
|
98
|
+
**Recommendations:** [Mitigations, follow-up scans]
|
|
99
|
+
|
|
100
|
+
### Debrief Structure
|
|
101
|
+
- **Findings by severity:** Critical/High/Medium/Low
|
|
102
|
+
- **False positives:** Checked and ruled out
|
|
103
|
+
- **Areas not covered:** Time or tool limitations
|
|
104
|
+
- **Follow-ups:** OWASP ZAP scan, penetration test, dev review
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Usability Review Charter
|
|
109
|
+
|
|
110
|
+
**Scenario:** Exploratory usability and accessibility review.
|
|
111
|
+
|
|
112
|
+
### Mission Statement
|
|
113
|
+
Explore [feature/module] from a usability perspective. Assess clarity, discoverability, error handling, and accessibility for different user types.
|
|
114
|
+
|
|
115
|
+
### Test Areas
|
|
116
|
+
- **In scope:** [User flows], [error messages], [help text], [keyboard nav], [screen reader compatibility]
|
|
117
|
+
- **Out of scope:** [Visual design polish], [performance]
|
|
118
|
+
|
|
119
|
+
### Time-Box
|
|
120
|
+
- **25 min:** First-time user flow, main friction points
|
|
121
|
+
- **45 min:** First-time + power user flows, error handling
|
|
122
|
+
- **90 min:** Full usability review including accessibility checks
|
|
123
|
+
|
|
124
|
+
### Notes Template
|
|
125
|
+
| Issue | Location | Type (Clarity / Discoverability / Error / A11y) | Severity |
|
|
126
|
+
| ----- | -------- | ---------------------------------------------- | -------- |
|
|
127
|
+
| | | | |
|
|
128
|
+
| | | | |
|
|
129
|
+
|
|
130
|
+
**Positive observations:** [What works well]
|
|
131
|
+
**User confusion points:** [Where users might get stuck]
|
|
132
|
+
**A11y findings:** [Keyboard, screen reader, contrast]
|
|
133
|
+
|
|
134
|
+
### Debrief Structure
|
|
135
|
+
- **Usability score (1–5):** Per flow or overall
|
|
136
|
+
- **Top 3 issues:** Highest impact
|
|
137
|
+
- **Accessibility gaps:** WCAG compliance notes
|
|
138
|
+
- **Follow-ups:** UX review, a11y audit, design changes
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Persona-Based Testing
|
|
2
|
+
|
|
3
|
+
Detailed persona descriptions for manual and exploratory testing. Use these to derive test scenarios that reflect different user behaviors, goals, and failure modes.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Novice User
|
|
8
|
+
|
|
9
|
+
**Profile:** First-time user, unfamiliar with the system. Easily confused, may ignore hints, gets lost in flows.
|
|
10
|
+
|
|
11
|
+
### Behaviors
|
|
12
|
+
- Clicks randomly or follows visual cues only
|
|
13
|
+
- Skips onboarding or help text
|
|
14
|
+
- Enters invalid data without reading validation messages
|
|
15
|
+
- Uses back button or closes tab when stuck
|
|
16
|
+
- May abandon flows mid-way
|
|
17
|
+
- Relies on default values, rarely changes settings
|
|
18
|
+
|
|
19
|
+
### Goals
|
|
20
|
+
- Complete a simple task with minimal learning
|
|
21
|
+
- Understand what the system does without reading documentation
|
|
22
|
+
- Get help when something goes wrong
|
|
23
|
+
|
|
24
|
+
### Test Scenarios
|
|
25
|
+
- First-time flow without prior knowledge
|
|
26
|
+
- Empty state / no data: what does the user see?
|
|
27
|
+
- Invalid input: are error messages clear and actionable?
|
|
28
|
+
- Dead ends: can the user recover or find a way back?
|
|
29
|
+
- Onboarding: does it explain enough? Can it be skipped?
|
|
30
|
+
- Default values: do they lead to success or confusion?
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Power User
|
|
35
|
+
|
|
36
|
+
**Profile:** Experienced user who values efficiency. Uses keyboard shortcuts, bulk actions, advanced features.
|
|
37
|
+
|
|
38
|
+
### Behaviors
|
|
39
|
+
- Prefers keyboard over mouse (Tab, Enter, shortcuts)
|
|
40
|
+
- Uses bulk operations, import/export, batch actions
|
|
41
|
+
- Pushes limits: max items, max length, edge cases
|
|
42
|
+
- Combines features in unexpected ways
|
|
43
|
+
- Expects consistency across similar flows
|
|
44
|
+
- May use API or CLI if available
|
|
45
|
+
|
|
46
|
+
### Goals
|
|
47
|
+
- Complete tasks quickly
|
|
48
|
+
- Automate or batch repetitive work
|
|
49
|
+
- Use advanced features without friction
|
|
50
|
+
|
|
51
|
+
### Test Scenarios
|
|
52
|
+
- Keyboard-only navigation through main flows
|
|
53
|
+
- Bulk operations: select all, bulk delete, bulk edit
|
|
54
|
+
- Boundary values: max length, max items, max file size
|
|
55
|
+
- Shortcuts: do they work? Are they documented?
|
|
56
|
+
- Import/export: large files, malformed data, encoding
|
|
57
|
+
- Feature combinations: use A then B in same session
|
|
58
|
+
- Performance: does it feel fast for power workflows?
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Attacker
|
|
63
|
+
|
|
64
|
+
**Profile:** Malicious actor trying to bypass security, inject code, or escalate privileges.
|
|
65
|
+
|
|
66
|
+
### Behaviors
|
|
67
|
+
- Injects SQL, XSS, command injection in input fields
|
|
68
|
+
- Manipulates URLs, headers, cookies
|
|
69
|
+
- Tries auth bypass: session hijack, token reuse, privilege escalation
|
|
70
|
+
- Tests file upload: executable files, path traversal
|
|
71
|
+
- Probes for information disclosure (stack traces, debug info)
|
|
72
|
+
- Uses automation (scripts, tools) to probe at scale
|
|
73
|
+
|
|
74
|
+
### Goals
|
|
75
|
+
- Bypass authentication or authorization
|
|
76
|
+
- Extract or corrupt data
|
|
77
|
+
- Disrupt service or degrade quality
|
|
78
|
+
|
|
79
|
+
### Test Scenarios
|
|
80
|
+
- SQL injection in search, login, form fields
|
|
81
|
+
- XSS in user-generated content, error messages
|
|
82
|
+
- Auth bypass: expired token, modified JWT, session fixation
|
|
83
|
+
- Privilege escalation: access admin functions as regular user
|
|
84
|
+
- File upload: .exe, .php, path traversal (../../../etc/passwd)
|
|
85
|
+
- IDOR: change resource IDs in URLs to access others' data
|
|
86
|
+
- Rate limiting: can brute-force or DoS be triggered?
|
|
87
|
+
- Information disclosure: stack traces, internal URLs in responses
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Admin
|
|
92
|
+
|
|
93
|
+
**Profile:** System administrator configuring roles, permissions, and system behavior.
|
|
94
|
+
|
|
95
|
+
### Behaviors
|
|
96
|
+
- Manages users, roles, permissions
|
|
97
|
+
- Configures system settings, integrations, webhooks
|
|
98
|
+
- Reviews audit logs and activity
|
|
99
|
+
- Handles bulk user operations
|
|
100
|
+
- Expects clear separation of admin vs. user capabilities
|
|
101
|
+
- May use API or admin-only UI
|
|
102
|
+
|
|
103
|
+
### Goals
|
|
104
|
+
- Configure the system correctly and securely
|
|
105
|
+
- Audit who did what and when
|
|
106
|
+
- Manage access without breaking user experience
|
|
107
|
+
|
|
108
|
+
### Test Scenarios
|
|
109
|
+
- Role creation and assignment: do permissions apply correctly?
|
|
110
|
+
- Permission boundaries: can admin do X? Can user do X when denied?
|
|
111
|
+
- Audit logs: are actions logged? Can logs be tampered?
|
|
112
|
+
- Configuration changes: do they take effect? Rollback?
|
|
113
|
+
- Bulk operations: deactivate users, change roles
|
|
114
|
+
- Admin vs. user UI: no privilege leakage to non-admin views
|
|
115
|
+
- Integration setup: webhooks, API keys, OAuth — secure storage and usage
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Mobile User
|
|
120
|
+
|
|
121
|
+
**Profile:** User on phone or tablet. Touch interaction, small screen, variable network.
|
|
122
|
+
|
|
123
|
+
### Behaviors
|
|
124
|
+
- Uses touch: tap, swipe, pinch, long-press
|
|
125
|
+
- Holds device in portrait and landscape
|
|
126
|
+
- May have slow or intermittent network
|
|
127
|
+
- Uses thumb for primary interactions (reachability)
|
|
128
|
+
- May switch apps and return (session restore)
|
|
129
|
+
- Expects responsive layout, no horizontal scroll
|
|
130
|
+
- May use mobile-specific features (camera, location)
|
|
131
|
+
|
|
132
|
+
### Goals
|
|
133
|
+
- Complete tasks on mobile without desktop
|
|
134
|
+
- Have a usable experience on small screens
|
|
135
|
+
- Work offline or with poor connectivity when possible
|
|
136
|
+
|
|
137
|
+
### Test Scenarios
|
|
138
|
+
- Touch targets: are buttons/links large enough (min 44×44 px)?
|
|
139
|
+
- Thumb reach: can primary actions be reached one-handed?
|
|
140
|
+
- Orientation: portrait and landscape both usable?
|
|
141
|
+
- Responsive layout: no horizontal scroll, readable text
|
|
142
|
+
- Slow network: loading states, timeouts, retry
|
|
143
|
+
- Session restore: return after backgrounding — state preserved?
|
|
144
|
+
- Forms: mobile-friendly inputs (tel, email, date pickers)
|
|
145
|
+
- File upload: camera, gallery — supported and secure?
|
|
146
|
+
- Gestures: swipe, pull-to-refresh — consistent and discoverable?
|