Udemy practice test skill
Generate Udemy Practice Test CSV files from any input (text, webpage, PDF, URLs). Produces 10000% accurate, real-exam-like questions in Udemy bulk upload format with proper explanations.From its SKILL.md
npx -y skills add Yash-Kavaiya/udemy-practice-test-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.7 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
Udemy Practice Test CSV Generator
Purpose
Convert any source material (text, webpage, PDF, URLs) into a perfectly formatted Udemy Practice Test bulk upload CSV. Questions must be real-exam-like, 10000% accurate, with proper explanations for every option.
CSV Format Specification
Header Row (17 columns, exact order):
Question,Question Type,Answer Option 1,Explanation 1,Answer Option 2,Explanation 2,Answer Option 3,Explanation 3,Answer Option 4,Explanation 4,Answer Option 5,Explanation 5,Answer Option 6,Explanation 6,Correct Answers,Overall Explanation,Domain
Column Details:
| Column | Description | Required |
|---|---|---|
| Question | The question text | Yes |
| Question Type | multiple-choice OR multi-select | Yes |
| Answer Option 1-6 | Answer choices (min 2, max 6) | Min 2 |
| Explanation 1-6 | Why each option is correct/incorrect | Recommended |
| Correct Answers | Number(s) of correct option(s) | Yes |
| Overall Explanation | Comprehensive explanation | Recommended |
| Domain | Topic/category grouping | Recommended |
Rules:
- Question Type: Only two values allowed:
multiple-choice= exactly ONE correct answermulti-select= TWO or MORE correct answers
- Correct Answers:
- For multiple-choice: single number (e.g.,
2) - For multi-select: comma-separated numbers (e.g.,
1,3,4)
- For multiple-choice: single number (e.g.,
- CSV Escaping:
- Wrap fields containing commas in double quotes
- Escape internal quotes by doubling them:
""like this"" - Newlines within fields are NOT supported
- Empty options: Leave both the option AND its explanation blank if unused (options 5-6 are optional)
Input Handling by Source Type
Raw Text / Pasted Content
- Use directly as source material
- Split into logical sections/topics for domain mapping
URLs / Webpages
- Load the page and extract full content
- For multi-page content, follow pagination/next links
- If content is behind auth or blocked, ask user to paste it
PDF Files
- Extract text using pymupdf or marker-pdf:
python -c "import fitz; doc=fitz.open('file.pdf'); print('\n'.join(p.get_text() for p in doc))" - For scanned PDFs, use OCR via marker_single or pytesseract
- Preserve headings/structure for domain mapping
Multiple Sources
- Process each source independently first
- Merge extracted content, deduplicate overlapping topics
- Cross-reference facts across sources for accuracy
Batch Size Guidelines
| Source Size | Questions to Generate |
|---|---|
| 1-5 pages / short article | 15-25 questions |
| 5-20 pages / medium doc | 30-60 questions |
| 20-50 pages / large doc | 60-120 questions |
| 50+ pages / book/course | 120-200 questions |
| User specifies count | Exactly that many |
Rule of thumb: 5-10 questions per page of dense technical content, 3-5 per page of general content. Always ask user if they want a specific count.
Udemy Platform Limits
- Min questions per practice test: 2
- Max questions per practice test: No hard cap, but 150-250 is typical for certification exams
- Max options per question: 6
- Min options per question: 2 (but use 4+ for exam realism)
- Question text max length: ~600 characters recommended (no hard limit but UI truncates long text)
- Option text max length: ~200 characters recommended
- Explanation max length: ~1000 characters recommended
- Domain field: Free text, keep short (1-3 words ideal)
- File encoding: UTF-8 (Python csv module default)
- Max 2 practice tests per regular course (unlimited for practice test courses)
Generation Process
Step 1: Analyze Source Material
- Read/extract content from all provided sources (text, PDFs, URLs, webpages)
- Identify key concepts, facts, procedures, definitions, and relationships
- Map content to domains/topics for balanced coverage
Step 2: Question Design Principles
- Real exam style: Questions should mimic actual certification/professional exam patterns
- Difficulty distribution: 30% easy, 50% medium, 20% hard
- Question types to use:
- Scenario-based ("A company wants to..." / "You are tasked with...")
- Direct knowledge ("Which of the following...")
- Best practice ("What is the recommended approach...")
- Troubleshooting ("A user reports X error. What is the most likely cause?")
- Multi-select for "select ALL that apply" patterns
- Distractor quality: Wrong answers must be plausible, not obviously wrong
- No trick questions: Questions should test knowledge, not reading comprehension
Step 3: Explanation Quality Standards
- Per-option explanations: Explain WHY each option is correct OR incorrect
- For correct: Confirm with supporting detail
- For incorrect: Explain what makes it wrong and what it actually refers to
- Overall explanation: Provide comprehensive context, relevant theory, and exam tips
- Be specific: Reference official docs, specifications, or standards where applicable
Step 4: Generate CSV
Use Python to generate properly escaped CSV:
import csv
import io
# Build questions list
questions = []
# Each question is a dict with keys:
# question, type, options (list of {text, explanation}), correct (list of ints), overall, domain
output = io.StringIO()
writer = csv.writer(output, quoting=csv.QUOTE_MINIMAL)
# Header
writer.writerow([
"Question", "Question Type",
"Answer Option 1", "Explanation 1",
"Answer Option 2", "Explanation 2",
"Answer Option 3", "Explanation 3",
"Answer Option 4", "Explanation 4",
"Answer Option 5", "Explanation 5",
"Answer Option 6", "Explanation 6",
"Correct Answers", "Overall Explanation", "Domain"
])
for q in questions:
row = [q["question"], q["type"]]
# Pad to 6 options
options = q["options"] + [{"text": "", "explanation": ""}] * (6 - len(q["options"]))
for opt in options:
row.append(opt["text"])
row.append(opt["explanation"])
# Correct answers
row.append(",".join(str(c) for c in q["correct"]))
row.append(q["overall"])
row.append(q["domain"])
writer.writerow(row)
Step 5: Validation Checklist
Before delivering the CSV, verify:
- Header row matches exactly (17 columns)
- Every question has at least 4 options (standard for exams)
-
multiple-choicequestions have exactly 1 correct answer -
multi-selectquestions have 2+ correct answers - Correct answer numbers reference valid option positions (1-6)
- No empty Question or Question Type fields
- All commas and quotes properly escaped
- Explanations are substantive (not just "Correct" or "Incorrect")
- Questions are factually accurate to the source material
- Domain field populated for all questions
- Mix of multiple-choice (~70%) and multi-select (~30%)
Quality Targets
- Accuracy: Every fact must be verifiable from the source material
- Coverage: Questions should cover ALL major topics from the source
- Balance: Even distribution across domains
- Exam-like: Should feel like a real certification exam
- Explanations: Every option needs WHY it's right or wrong
Example Row (multiple-choice):
What is the primary purpose of a VPC in AWS?,multiple-choice,To host static websites,A VPC is not specifically for hosting static websites - that's Amazon S3 or CloudFront.,To provide isolated network environment in the cloud,A VPC provides a logically isolated section of the AWS cloud where you can launch resources in a virtual network you define.,To manage DNS records,DNS management is handled by Route 53 not VPC.,To store objects,Object storage is provided by Amazon S3 not VPC.,,,,,2,"A Virtual Private Cloud (VPC) is a logically isolated section of the AWS Cloud where you can launch AWS resources in a virtual network that you define. You have complete control over your virtual networking environment including IP ranges, subnets, route tables, and network gateways.",AWS Networking
Example Row (multi-select):
Which of the following are valid EC2 instance states? (Select ALL that apply),multi-select,running,Running is a valid EC2 state - the instance is launched and operational.,stopped,Stopped is a valid EC2 state - the instance exists but is not running.,paused,Paused is NOT a valid EC2 instance state. EC2 instances cannot be paused.,terminated,Terminated is a valid EC2 state - the instance has been permanently deleted.,hibernating,Hibernating is NOT a standard EC2 state - though hibernation exists it shows as 'stopped' state.,,"","1,2,4","EC2 instances go through these lifecycle states: pending, running, stopping, stopped, shutting-down, and terminated. There is no 'paused' or 'hibernating' state. When an instance is hibernated it appears in 'stopped' state.",AWS Compute
Pitfalls
- Never use newlines inside CSV fields (Udemy doesn't support it)
- Don't use more than 6 options per question
- Multi-select MUST have 2+ correct answers (otherwise use multiple-choice)
- Correct answer numbers are 1-indexed (first option = 1, not 0)
- If source material is ambiguous, skip that topic rather than guess
- Always quote fields containing commas - Python csv module handles this automatically
- Test the CSV by opening in Excel/Sheets to verify column alignment
What ships with it: 4 files
11.5 KB alongside SKILL.md, 1 of them executable
scripts/
- generate_csv.pyruns6.9 KB
templates/
Gives 0 of the 12 instructions most test skills give in ~2.2k tokens
Counted across 964 of the 1,571 authors here whose files we hold, read 2026-08-07
- Close the browser when donein 55 of 964, across 12 files
- Wait for network idle statein 51 of 964, across 6 files
- Launch Chromium in headless modein 49 of 964, across 6 files
- Use descriptive selectors for elementsin 49 of 964, across 6 files
- Run provided scripts with help flag firstin 49 of 964, across 6 files
- Add appropriate explicit waitsin 48 of 964, across 5 files
- Use bundled scripts as black boxesin 46 of 964, across 3 files
- Do not read script source codein 46 of 964, across 3 files
- Use sync playwright for scriptsin 46 of 964, across 3 files
- Inspect dom before executing actionsin 46 of 964, across 3 files
- Run the full test suitein 37 of 964
- Write the failing test firstin 29 of 964, across 23 files
Said here and by no other author read
- Generate real-exam-like practice questions
- Use exact 17-column header row
- Generate 5 to 10 questions per page
- Explain why each option is correct or incorrect
- Escape quotes by doubling them
- Leave unused options and explanations blank
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.