slogan3

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

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.