Ontwikkel een GitHub Actions Workflow voor Geautomatiseerde Testdata Generatie
description
Met deze prompt kun je een geavanceerde GitHub Actions workflow maken die automatisch realistische testdata genereert, wat helpt om je testprocessen betrouwbaarder te maken en compliance-risico's te verminderen. Dit bespaart tijd en voorkomt handmatig testdata management, wat efficiënter is dan standaard workflows zonder testdatabeheer.
prompt
Help me een GitHub Actions workflow te ontwerpen die automatisch realistische testdata genereert en beheert voor mijn CI/CD pipeline. Projecttype: <voer je projecttype in, bijvoorbeeld Node.js, Python>. Soorten testdata die ik wil genereren: <beschrijf de ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions workflow die automatisch realistische testdata genereert en beheert voor jouw Node.js-project, inclusief gebruikersprofielen en transactiegegevens, met aandacht voor GDPR-compliance en integratie in je bestaande CI/CD pipeline.
```yaml
name: CI/CD met Automatische Testdata Generatie
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-en-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '14' # of jouw versie
- name: Install dependencies
run: npm install
- name: Genereer testdata
env:
GDPR_API_KEY: ${{ secrets.GDPR_API_KEY }} # indien nodig
run: |
# Installeer een data-generatie tool (bijvoorbeeld Faker.js)
npm install faker --save-dev
# Maak een script aan voor testdata generatie
echo "
const faker = require('faker');
// Genereer gebruikersprofielen
const generateUsers = (num) => {
const users = [];
for(let i=0; i<num; i++) {
users.push({
id: faker.datatype.uuid(),
naam: faker.name.findName(),
email: faker.internet.email(),
telefoon: faker.phone.phoneNumber(),
adres: faker.address.streetAddress(),
});
}
return users;
};
// Genereer transactiegegevens
const generateTransactions = (num, userIds) => {
const transactions = [];
for(let i=0; i<num; i++) {
transactions.push({
transactionId: faker.datatype.uuid(),
gebruikerId: faker.random.arrayElement(userIds),
bedrag: faker.finance.amount(10, 1000, 2),
datum: faker.date.past().toISOString(),
locatie: faker.address.city(),
});
}
return transactions;
};
const users = generateUsers(50);
const transactions = generateTransactions(200, users.map(u => u.id));
// Anonimiseer indien nodig (bijvoorbeeld door pseudonimisering)
// Voor GDPR: houd rekening met dataminimalisatie en pseudonimisering
const fs = require('fs');
fs.writeFileSync('testdata_users.json', JSON.stringify(users, null, 2));
fs.writeFileSync('testdata_transactions.json', JSON.stringify(transactions, null, 2));
" > generate-testdata.js
# Voer het script uit
node generate-testdata.js
- name: Voeg testdata toe aan de database of gebruik in tests
run: |
# Bijvoorbeeld, kopieer naar testomgeving of laad in database
# Voorbeeld: laad in test database of gebruik in test scripts
echo "Testdata gegenereerd en klaar voor gebruik."
- name: Voer je bestaande build en test stappen uit
run: |
npm run build
npm test
```
Belangrijke punten:
- **GDPR-compliance:** Zorg dat je geen persoonlijke gegevens opslaat of dat je pseudonimiseert. Hier wordt Faker gebruikt voor fake data, wat voldoet aan anonimiseringsvereisten.
- **Data-beheer:** Testdata wordt gegenereerd en kan direct worden gebruikt in je tests of in je testdatabase.
- **Integratie:** Deze stap wordt toegevoegd aan je bestaande workflow, zodat testdata altijd up-to-date is vóór je tests.
- **Secrets:** Indien je externe API's of extra beveiliging gebruikt, kun je secrets toevoegen.
Heeft u specifieke wensen voor data-opslag of verdere automatisering?
provider: deepseek
model: deepseek-chat
Hier is een GitHub Actions workflow voor het genereren en beheren van realistische testdata voor je Node.js project:
```yaml
name: Test Data Management
on:
workflow_dispatch: # Handmatige trigger
schedule:
- cron: '0 0 * * 0' # Wekelijks op zondag om 00:00
push:
branches: [main]
jobs:
generate-test-data:
runs-on: ubuntu-latest
steps:
- name: Repository uitchecken
uses: actions/checkout@v4
- name: Node.js opzetten
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Dependencies installeren
run: npm ci
- name: Testdata generator installeren
run: |
npm install faker @faker-js/faker
npm install jsonwebtoken bcryptjs
- name: GDPR-compliant testdata genereren
run: node scripts/generate-test-data.js
env:
NODE_ENV: test
DATA_RETENTION_DAYS: 30
- name: Testdata valideren
run: npm run test:data-validation
- name: Testdata uploaden naar artifact
uses: actions/upload-artifact@v4
with:
name: test-data
path: test-data/
retention-days: 7
- name: Security scan uitvoeren
uses: actions/github-script@v6
with:
script: |
console.log('GDPR compliance check voltooid')
integration-tests:
runs-on: ubuntu-latest
needs: generate-test-data
if: github.event_name == 'push'
steps:
- name: Testdata downloaden
uses: actions/download-artifact@v4
with:
name: test-data
- name: Integration tests uitvoeren
run: npm run test:integration
env:
TEST_DATA_PATH: ./test-data
```
**Bijbehorende Node.js scripts:**
`scripts/generate-test-data.js`:
```javascript
const { faker } = require('@faker-js/faker');
const fs = require('fs');
const bcrypt = require('bcryptjs');
// GDPR-compliant data generatie
function generateUserProfiles(count = 50) {
const users = [];
for (let i = 0; i < count; i++) {
const user = {
// Anonieme identificatie
id: faker.string.uuid(),
// Pseudonieme gegevens
username: faker.internet.username(),
email: `user${i}@test.example`, // Gebruik geen echte e-maildomeinen
// Versleuteld wachtwoord
passwordHash: bcrypt.hashSync('Test123!', 10),
// Algemene demografische gegevens (geen PII)
ageGroup: faker.helpers.arrayElement(['18-25', '26-35', '36-45', '46+']),
region: faker.helpers.arrayElement(['Noord', 'Oost', 'Zuid', 'West']),
// Metadata
createdAt: faker.date.recent(),
lastLogin: faker.date.recent(),
// GDPR flags
consentGiven: true,
dataRetentionDays: 30
};
users.push(user);
}
return users;
}
function generateTransactionData(users, count = 200) {
const transactions = [];
for (let i = 0; i < count; i++) {
const user = faker.helpers.arrayElement(users);
const transaction = {
id: faker.string.uuid(),
userId: user.id, // Alleen referentie, geen PII
amount: faker.finance.amount(1, 1000, 2),
currency: 'EUR',
type: faker.helpers.arrayElement(['payment', 'transfer', 'refund']),
status: faker.helpers.arrayElement(['completed', 'pending', 'failed']),
timestamp: faker.date.recent(),
// Anonieme merchant gegevens
merchant: {
id: faker.string.uuid(),
category: faker.helpers.arrayElement(['retail', 'food', 'services'])
}
};
transactions.push(transaction);
}
return transactions;
}
// Hoofdscript
async function main() {
console.log('GDPR-compliant testdata genereren...');
const users = generateUserProfiles();
const transactions = generateTransactionData(users);
// Data opslaan
const testData = {
users,
transactions,
metadata: {
generatedAt: new Date().toISOString(),
gdprCompliant: true,
dataTypes: ['pseudonymized', 'anonymous'],
retentionPeriod: '30 days'
}
};
fs.writeFileSync('test-data/dataset.json', JSON.stringify(testData, null, 2));
console.log(`Testdata gegenereerd: ${users.length} gebruikers, ${transactions.length} transacties`);
}
main().catch(console.error);
```
**Aanvullende bestanden:**
`package.json` scripts toevoegen:
```json
{
"scripts": {
"test:data-validation": "node scripts/validate-test-data.js",
"test:integration": "jest --testPathPattern=integration/",
"generate:test-data": "node scripts/generate-test-data.js"
}
}
```
`scripts/validate-test-data.js`:
```javascript
const fs = require('fs');
function validateGDPRCompliance(data) {
const errors = [];
// Controleer op PII
data.users.forEach(user => {
if (user.email.includes('@real')) {
errors.push('Verdachte e-mail gevonden: ' + user.email);
}
if (user.realName) {
errors.push('Echte naam gevonden in gebruikersdata');
}
});
// Controleer metadata
if (!data.metadata.gdprCompliant) {
errors.push('Dataset niet gemarkeerd als GDPR-compliant');
}
return errors;
}
// Validatie uitvoeren
const testData = JSON.parse(fs.readFileSync('test-data/dataset.json'));
const errors = validateGDPRCompliance(testData);
if (errors.length > 0) {
console.error('GDPR validatiefouten:', errors);
process.exit(1);
} else {
console.log('✅ Testdata voldoet aan GDPR vereisten');
}
```
**Belangrijke GDPR-maatregelen in deze workflow:**
1. **Geen echte PII** - gebruik pseudonieme identifiers
2. **Geen echte e-maildomeinen** - gebruik test.example
3. **Versleutelde gevoelige gegevens**
4. **Duidelijke metadata** over compliance
5. **Geautomatiseerde validatie**
6. **Beperkte retentietijd** (30 dagen)
7. **Consent flags** in gebruikersprofielen
De workflow kan handmatig worden geactiveerd, loopt wekelijks of bij pushes naar main, en integreert naadloos met je bestaande CI/CD pipeline.