# Φόρτωση δοκιμών ASP.NET Core Applications με k6: Εισαγωγή

<!--category-- Testing, Performance, k6, ASP.NET -->
<datetime class="hidden">2025-12-02T14:00</datetime>

Η εφαρμογή σας λειτουργεί τέλεια στο laptop σας. Οι δοκιμές μονάδων περνούν. Οι δοκιμές ολοκλήρωσης περνούν. Αναπτύσσετε στην παραγωγή, και ξαφνικά όλα αλέσουν σε μια στάση. 500 πραγματικοί χρήστες χτύπησε την αρχική σας σελίδα ταυτόχρονα, και ο διακομιστής σας αρχίζει να επιστρέφει 503 λάθη.

Αυτό είναι το εφιαλτικό σενάριο που κάθε προγραμματιστής φοβάται, αλλά οι περισσότεροι δεν κάνουν τεστ. **Η δοκιμή απόδοσης δεν είναι προαιρετική - είναι η διαφορά μεταξύ μιας επιτυχημένης εκτόξευσης και μιας σελίδας έκτακτης ανάγκης 3 AM.** Αυτός ο οδηγός δύο μερών θα σας δείξει ακριβώς πώς να αποτρέψετε αυτό το σενάριο χρησιμοποιώντας το k6, το σύγχρονο εργαλείο δοκιμής φορτίου που είναι αρκετά ισχυρό για εφαρμογές επιχειρήσεων αλλά αρκετά απλό για να τρέξει στον αγωγό CI / CD σας.

Αυτό είναι **Μέρος 1** μιας σειράς δύο μερών για τη δοκιμή φορτίου με k6:

- **Μέρος 1 (το παρόν άρθρο)**: Εισαγωγή στο k6, εγκατάσταση, τύποι δοκιμών, και γιατί το k6
- **[Μέρος 2: Πρακτική εφαρμογή](/blog/k6-testing-practical)**: Δοκιμές γραφής, ενσωμάτωση CI/CD, προφίλ και παραδείγματα πραγματικού κόσμου

## Εισαγωγή

Δοκιμή απόδοσης είναι ζωτικής σημασίας για οποιαδήποτε παραγωγή ASP.NET Core εφαρμογή. Είτε φτιάχνετε ένα απλό blog, μια πολύπλοκη αρχιτεκτονική μικρουπηρεσίας, ή μια εφαρμογή επιχείρησης, θα πρέπει να ξέρετε πώς συμπεριφέρεται η εφαρμογή σας υπό φορτίο. Θα χειριστεί 100 ταυτόχρονη χρήστες; 1.000; Πού είναι τα εμπόδια; Δουλεύει πραγματικά η στρατηγική αποθήκευσης σας;

Αυτός ο περιεκτικός οδηγός σας δείχνει πώς να φορτώσετε τις εφαρμογές ASP.NET Core χρησιμοποιώντας [k6](https://k6.io/) - ένα από τα πιο ισχυρά εργαλεία δοκιμών ανοικτού φορτίου. [MinimalBlog](/blog/minimalblog-introduction) ως το παράδειγμα εφαρμογής μας (ένα απλό blog με βάση το markdown με μνήμη και caching εξόδου), οι τεχνικές και τα πρότυπα που εμφανίζονται εδώ ισχύουν για **οποιαδήποτε εφαρμογή ASP.NET Core**.

Μέχρι το τέλος αυτής της σειράς δύο μερών, θα ξέρετε πώς:

- Εγκατάσταση και ρύθμιση του k6 σε οποιαδήποτε πλατφόρμα (Windows, Mac, Linux)
- Γράψτε ολοκληρωμένες δοκιμές απόδοσης για διάφορα σενάρια
- Ενσωματώστε το k6 στον αγωγό CI/CD σας με τις δράσεις GitHub
- Χρησιμοποιήστε εργαλεία προφίλ (dotTrace, dotMemory) παράλληλα με το k6 για να βρείτε σημεία συμφόρησης
- Εφαρμογή διαφορετικών στρατηγικών δοκιμών: έλεγχος καπνού, φορτίου, στρες, ακίδων και εμποτισμού
- Ρύθμιση ανίχνευσης παλινδρόμησης απόδοσης για την πρόληψη της αργής επίτευξης του κώδικα παραγωγής

**Γιατί το MinimalBlog ως παράδειγμα;** Είναι μια πραγματική ASP.NET Core 9.0 εφαρμογή με κοινά πρότυπα: Razor Pages, αποθήκευση μνήμης, αποθήκευση εξόδου, αρχείο I/O, και επεξεργασία σήμανσης. Οι προσεγγίσεις δοκιμής που θα μάθετε ισχύουν εξίσου για τις εφαρμογές MVC σας, Web APIs, εφαρμογές Blazor, ή minimal APIs.

[TOC]

## Τι είναι το k6 και γιατί το χρησιμοποιείτε;

[k6](https://k6.io/) είναι ένα σύγχρονο εργαλείο δοκιμής φορτίου κατασκευασμένο για προγραμματιστές. Σε αντίθεση με παλαιότερα εργαλεία όπως JMeter ή LoadRunner, k6 είναι:

- **Φιλικό προς τους προγραμματιστές**: Οι δοκιμές γράφονται στο JavaScript (ES6+)
- **CLI- first**: Ιδανικό για αγωγούς CI/CD
- **Ελαφρύς**: Μονό δυαδικό, χωρίς εξαρτήσεις
- **Ακριβής**: Γράφτηκε στο Go για ακριβείς μετρήσεις
- **Scriptable**: Πλήρεις δυνατότητες προγραμματισμού για σύνθετα σενάρια
- **Έτοιμο το σύννεφο**: Μπορεί να ενσωματωθεί με k6 Cloud, Grafana, Prometheus

Για το MinimalBlog, το k6 είναι ιδανικό επειδή:

1. **Μπορούμε να δοκιμάσουμε το caching**: k6 μπορεί να επαληθεύσει κεφαλίδες μνήμης και συμπεριφορά
2. **Μπορούμε να προσομοιώσουμε την πραγματική κίνηση.**: Δοκιμή πολλαπλών συγγενών χρηστών
3. **Μπορούμε να επικυρώσουμε τις απαιτήσεις απόδοσης.**: Μετρήστε πραγματικούς χρόνους απόκρισης
4. **Μπορούμε να ενσωματώσουμε με CI/CD**: Αυτόματη δοκιμή στον αγωγό μας
5. **Μπορούμε να δοκιμάσουμε συγκεκριμένα σενάρια**: Category filtering, ατομικές αναρτήσεις, αρχική σελίδα

## Εγκατάσταση k6

### Εγκατάσταση παραθύρων

**Επιλογή 1: Χρήση σοκολάτες (συνιστάται)**

```powershell
choco install k6
```

**Επιλογή 2: Χρήση του Winget**

```powershell
winget install k6 --source winget
```

**Επιλογή 3: Χειροκίνητη εγκατάσταση**

1. Κατεβάστε την τελευταία έκδοση των Windows από [Κυκλοφορίες GitHub](https://github.com/grafana/k6/releases)
2. Εκχύλισμα του `k6.exe` αρχείο
3. Προσθέστε τον κατάλογο στο PATH σας ή μετακινήστε `k6.exe` σε έναν κατάλογο που είναι ήδη στο PATH

**Επιβεβαίωση εγκατάστασης:**

```powershell
k6 version
```

### Εγκατάσταση Mac

**Επιλογή 1: Χρήση του Homebrew (Συνιστάται)**

```bash
brew install k6
```

**Επιλογή 2: Χρήση MacPorts**

```bash
sudo port install k6
```

**Επιλογή 3: Χειροκίνητη εγκατάσταση**

```bash
# Download and install the latest release
curl -O -L https://github.com/grafana/k6/releases/latest/download/k6-macos-amd64.zip
unzip k6-macos-amd64.zip
sudo cp k6-macos-amd64/k6 /usr/local/bin/
sudo chmod +x /usr/local/bin/k6
```

**Επιβεβαίωση εγκατάστασης:**

```bash
k6 version
```

### Εγκατάσταση Linux

**Επιλογή 1: Χρήση Διαχειριστών Πακέτων**

Για **Debian/Ubuntu**:

```bash
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
```

Για **Fedora/CentOS/RHEL**:

```bash
sudo dnf install https://dl.k6.io/rpm/repo.rpm
sudo dnf install k6
```

**Επιλογή 2: Χρήση του Snap**

```bash
sudo snap install k6
```

**Επιλογή 3: Χειροκίνητη εγκατάσταση**

```bash
# Download the latest release
curl -O -L https://github.com/grafana/k6/releases/latest/download/k6-linux-amd64.tar.gz
tar -xzf k6-linux-amd64.tar.gz
sudo cp k6-linux-amd64/k6 /usr/local/bin/
sudo chmod +x /usr/local/bin/k6
```

**Επιλογή 4: Χρήση Docker**

```bash
docker pull grafana/k6:latest

# Run a test
docker run --rm -i grafana/k6:latest run - <script.js
```

**Επιβεβαίωση εγκατάστασης:**

```bash
k6 version
```

## Κατανόηση k6 Test Anatomy

Πριν βουτήξουμε στις δοκιμές, ας κατανοήσουμε τη βασική δομή ενός τεστ k6:

```javascript
import http from 'k6/http';
import { check, sleep } from 'k6';

// Test configuration
export const options = {
  vus: 10,              // Virtual users
  duration: '30s',      // Test duration
};

// Setup function (runs once before test)
export function setup() {
  // Prepare test data
  return { baseUrl: 'http://localhost:5000' };
}

// Main test function (runs for each VU)
export default function(data) {
  const response = http.get(data.baseUrl);

  // Assertions
  check(response, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });

  sleep(1); // Wait between iterations
}

// Teardown function (runs once after test)
export function teardown(data) {
  // Clean up
}
```

Βασικές έννοιες:

- **Εικονικοί χρήστες (VU)**: Προσομοιωμένοι ταυτόχρονα χρήστες
- **Διάρκεια**: Πόσο χρόνο διαρκεί η δοκιμή
- **Έλεγχοι**Assertions that don't stop the test
- **Κατώτατα όρια**: Κριτήρια διέλευσης/αποτυχίας
- **Μετρικός**: Χρόνος απόκρισης, διόρθωση, ποσοστό σφάλματος

## Τύποι δοκιμών επιδόσεων

Πριν από τη δοκιμή της εφαρμογής σας, ας κατανοήσουμε τους πέντε κύριους τύπους δοκιμών φορτίου και πότε να χρησιμοποιήσετε το καθένα:

```mermaid
graph TD
    A[Performance Testing Types] --> B[Smoke Test]
    A --> C[Load Test]
    A --> D[Stress Test]
    A --> E[Spike Test]
    A --> F[Soak Test]

    B --> B1[1-2 VUs<br/>30s-1min<br/>Basic Functionality]
    C --> C1[Normal Load<br/>5-15 minutes<br/>Verify SLAs]
    D --> D1[Gradual Increase<br/>10-30 minutes<br/>Find Breaking Point]
    E --> E1[Sudden Spike<br/>5-10 minutes<br/>Test Recovery]
    F --> F1[Normal Load<br/>Hours/Days<br/>Memory Leaks]

    style B stroke:#90EE90
    style C stroke:#87CEEB
    style D stroke:#FFD700
    style E stroke:#FF6347
    style F stroke:#DDA0DD
```

### 1. Δοκιμές καπνού

**Αντικείμενο**: Επαληθεύστε το σύστημα λειτουργεί με ελάχιστο φορτίο

**Πότε να χρησιμοποιήσετε το φάρμακο**:

- Μετά από κάθε αλλαγή κώδικα
- Πριν από τη διεξαγωγή πιο εντατικών δοκιμών
- Ως έλεγχος νοημοσύνης σε CI/CD

**Χαρακτηριστικά**:

- 1-2 VU (εικονική χρήστες)
- Σύντομη διάρκεια (30s-1min)
- Δοκιμές βασικής λειτουργικότητας

### 2. Δοκιμές φόρτωσης

**Αντικείμενο**: Εκτίμηση των επιδόσεων υπό αναμενόμενο κανονικό φορτίο

**Πότε να χρησιμοποιήσετε το φάρμακο**:

- Για τον καθορισμό των βασικών επιδόσεων
- Για να επαληθεύσετε SLAs πληρούνται
- Τακτική δοκιμή παλινδρόμησης επιδόσεων

**Χαρακτηριστικά**:

- Ρεαλιστικός αριθμός χρηστών
- Παρατεταμένο φορτίο
- Τυπική διάρκεια: 5-15 λεπτά

### 3. Δοκιμές άγχους

**Αντικείμενο**: Βρείτε το σημείο διακοπής του συστήματος

**Πότε να χρησιμοποιήσετε το φάρμακο**:

- Για την κατανόηση των ορίων χωρητικότητας
- Για τον προσδιορισμό των σημείων συμφόρησης
- Σχεδιάζοντας για σκαλωσιές

**Χαρακτηριστικά**:

- Σταδιακά αυξανόμενο φορτίο
- Σπρώξτε πέρα από την κανονική χωρητικότητα
- Διάρκεια: 10-30 λεπτά

### 4. Δοκιμασίες Spike

**Αντικείμενο**: Δοκιμαστική συμπεριφορά κάτω από ξαφνικές αιχμές κυκλοφορίας

**Πότε να χρησιμοποιήσετε το φάρμακο**:

- Προετοιμασία για την εκτόξευση του προϊόντος
- Δοκιμή αυτοβαθμονόμησης
- Επικυρωτική συμπεριφορά οπισθοδρόμησης

**Χαρακτηριστικά**:

- Ξαφνική μεγάλη αύξηση του φορτίου
- Διάρκεια σύντομης ακρωτηριασμού
- Συνολική διάρκεια: 5-10 λεπτά

### 5. Δοκιμασίες εισπνοής (Δοκιμασίες αντοχής)

**Αντικείμενο**: Βρείτε διαρροές μνήμης και υποβάθμιση με την πάροδο του χρόνου

**Πότε να χρησιμοποιήσετε το φάρμακο**:

- Πριν από τις μεγάλες κυκλοφορίες
- Υπηρεσίες δοκιμών μεγάλων αποστάσεων
- Επικυρωτικός καθαρισμός πόρων

**Χαρακτηριστικά**:

- Κανονικά επίπεδα φορτίου
- Εκτεταμένη διάρκεια (ώρες ή ημέρες)
- Παρακολούθηση αποδόμησης

```mermaid
graph LR
    A[Start] --> B{Smoke Test Pass?}
    B -->|No| C[Fix Issues]
    C --> A
    B -->|Yes| D{Load Test Pass?}
    D -->|No| E[Optimize]
    E --> D
    D -->|Yes| F{Stress Test}
    F --> G{Found Limit?}
    G -->|Yes| H[Document Capacity]
    G -->|No| I[Increase Load]
    I --> F
    H --> J{Spike Test Pass?}
    J -->|No| K[Improve Resilience]
    K --> J
    J -->|Yes| L{Soak Test}
    L --> M{Memory Stable?}
    M -->|No| N[Fix Memory Leaks]
    N --> L
    M -->|Yes| O[Production Ready]

    style O stroke:#90EE90
```

## Γιατί το k6 και όχι...;

Με τόσα πολλά εργαλεία δοκιμών φορτίου διαθέσιμα, γιατί να επιλέξετε το k6; Ας συγκρίνουμε το k6 με τις δημοφιλείς εναλλακτικές λύσεις:

### k6 vs Apache JMeter

**Απάτσι JMeter** είναι βετεράνος των εργαλείων δοκιμών φορτίου (από το 1999).

Χαρακτηριστικό  k6  JMeter 
|---------|----|---------|
| **Εγκατάσταση** Το μονό δυαδικό, χωρίς εξαρτήσεις απαιτεί Java, βαρύτερη εγκατάσταση
| **Ορισμός δοκιμής** JavaScript code &gt; XML ή GUI
| **Χρήση πόρων** Ελαφρύ (Πήγαινε) Βαρύ (Ιάβα)
| **Ενσωμάτωση CI/CD** □ Εξαιρετικό (CLI-πρώτο) □ Απαιτεί plugins □
| **Μάθηση καμπύλης** Easy για τους προγραμματιστές Steeper, GUI-εστιασμένο
| **Υποστήριξη πρωτοκόλλου** □ HTTP, WebSockets, gRPC □ Broader (FTP, JDBC, SMTP κ.λπ.)

**Πότε να χρησιμοποιήσετε το JMeter αντ 'αυτού:**

- Ανάγκη GUI για μη τεχνικούς δοκιμαστές
- Πρωτόκολλα δοκιμών πέραν της HTTP (JDBC, LDAP, SOAP)
- Έχω ήδη εμπειρία JMeter στην ομάδα
- Χρειάζονται εκτεταμένο οικοσύστημα plugin

**Γιατί το k6 είναι καλύτερο για τις περισσότερες εφαρμογές ASP.NET Core:**

- Πιο γρήγορα για να γράψετε δοκιμές (JavaScript vs XML)
- Ελαφρύτερο αποτύπωμα πόρων
- Καλύτερη ενσωμάτωση CI/CD
- Πιο σύγχρονη εμπειρία προγραμματιστή

### k6 vs Locust

**ΛόκουστCity name (optional, probably does not need a translation)** είναι ένα Python-based εργαλείο δοκιμής φορτίου, δημοφιλές στα καταστήματα Python.

Χαρακτηριστικό ~ k6 ~ Locust ~
|---------|----|---------|
| **Γλώσσα** Η JavaScript Python
| **Επιδόσεις** Πολύ γρήγορος (Πήγαινε να τρέξεις) Πιο αργός (Python GIL)
| **Ευκολία χρήσης** Απλή JavaScript Πυθονική, εύκολη
| **Κατανεμημένη δοκιμή** K6 Cloud (πληρωμένο) □ Ενσωματωμένο (δωρεάν)
| **Web UI** □ Περιορισμένη &gt; Εξαιρετική σε πραγματικό χρόνο UI
| **Εξαγωγή μετρικού** Πολλές μορφές CSV, web UI

**Πότε να χρησιμοποιήσετε το Locust αντ 'αυτού:**

- Πρώτη ομάδα Python
- Ανάγκη δωρεάν κατανεμημένη δοκιμή
- Θέλετε πραγματικό χρόνο web UI κατά τη διάρκεια των δοκιμών
- Complex Python λογική στις δοκιμές

**Γιατί το k6 είναι καλύτερο για τις περισσότερες εφαρμογές ASP.NET Core:**

- Καλύτερη απόδοση για ακριβείς μετρήσεις
- JavaScript πιο οικεία για web developers
- Καθαρότερο κατώτατο όριο/συνταγματάρχης
- Καλύτερη ενσωμάτωση του Προμηθέα/Γκράφανα

### k6 vs Gatling

**ΓκάτλινγκCity name (optional, probably does not need a translation)** είναι ένα εργαλείο βασισμένο στο Scala με εξαιρετική αναφορά.

Περιγραφή Χαρακτηριστικό K6 Γκάτλινγκ
|---------|----|---------|
| **Γλώσσα** Η JavaScript Scala/Java
| **Εκθέσεις** Βασική (+ extensions) Όμορφη ενσωματωμένη HTML εκθέσεις
| **Μάθηση καμπύλης** Εύκολα, μεσαία (Scala DSL)
| **Επιδόσεις** Θαυμάσια. Εξαιρετικά.
| **Άνοιγμα πηγής** Ανοιχτό με πρόσθετα επιχειρήσεων
| **Cloud Service** Κ6 Κλάουντ Γκάτλινγκ Εντερπράιζ

**Πότε να χρησιμοποιήσετε το Gatling αντ 'αυτού:**

- JVM/Scala εμπειρογνωμοσύνη στην ομάδα
- Χρειάζεσαι εκπληκτικές αναφορές.
- Δοκιμαστικά σύνθετα σενάρια HTTP
- Απαιτήσεις στήριξης των επιχειρήσεων

**Γιατί το k6 είναι καλύτερο για τις περισσότερες εφαρμογές ASP.NET Core:**

- Η JavaScript είναι πιο προσβάσιμη
- Απλή ρύθμιση και εκτέλεση
- Καλύτερα για γρήγορους ελέγχους CI/CD
- Πιο απλό για απλές δοκιμές HTTP

### k6 vs Πυροβολικό

**Πυροβολικό** είναι ένα άλλο εργαλείο δοκιμής φορτίου JavaScript.

Το πυροβολικό του Κ6
|---------|----|---------|
| **Ορισμός δοκιμής** JavaScript code YAML + JS αγκίστρια
| **Επιδόσεις** Πιο γρήγορα (Πήγαινε) Πιο αργά (Node.js)
| **Ευκολία χρήσης** Ο κωδικός βασίζεται σε YAML config-based
| **Φτιαγμένο για** Δοκιμασία φορτίου Φόρτωση + Λειτουργική δοκιμή
| **Δέσμες** Αξιόπιστα κατώτατα όρια Βασικές προσδοκίες
| **Εκτεταμένη δυνατότητα** Επιμηκύνει τις επεκτάσεις

**Πότε να χρησιμοποιήσετε το πυροβολικό αντ' αυτού:**

- Προτιμήστε YAML πάνω από τον κωδικό
- Χρειαζόμαστε Socket.io δοκιμή
- Θέλετε συνδυασμένο φορτίο + λειτουργικές δοκιμές
- Ήδη χρησιμοποιεί το οικοσύστημα Node.js

**Γιατί το k6 είναι καλύτερο για τις περισσότερες εφαρμογές ASP.NET Core:**

- Πιο ακριβείς μετρήσεις (Go vs Node.js)
- Καλύτερο σύστημα κατωφλίων
- Καθαρότερο JavaScript API
- Πιο ώριμος και σταθερός

### k6 vs wrk/wrk2

**wrk** είναι ένα ελαφρύ εργαλείο συγκριτικής αξιολόγησης HTTP.

Χαρακτηριστικά γνωρίσματος k6 wrk
|---------|----|---------|
| **Ευκολία χρήσης** API Υψηλού Επιπέδου API Low-level C + Lua
| **ΣενάριαCity name (optional, probably does not need a translation)** Πλούσιο σενάριο υποστήριξης μόνο βασικό HTTP
| **Μετρικός** Ολοκληρωτικός πίνακας Βασικά στοιχεία
| **Σενάριο** Η JavaScript Lua
| **Χρήση περίπτωσης** Δοκιμάστε το πλήρες φορτίο. Γρήγορα σημεία αναφοράς.

**Πότε να χρησιμοποιήσετε το wrk αντ 'αυτού:**

- Ανάγκη απόλυτης ελάχιστης εναέριας κυκλοφορίας
- Γρήγορες εφάπαξ τιμές αναφοράς
- Δοκιμή ωμής απόδοσης HTTP
- Δοκιμή πρωτοκόλλου χαμηλού επιπέδου

**Γιατί το k6 είναι καλύτερο για τις περισσότερες εφαρμογές ASP.NET Core:**

- Πολύ πιο εύκολο να γράψεις δοκιμές
- Καλύτερη αναφορά και μετρήσεις
- Υποστήριξη σενάριο (ramp-up, στάδια)
- Φιλικό CI/CD

### k6 vs Playwright/Cypress (Based Browser)

**Playwright** και **ΚυπαρίσσιCity name (optional, probably does not need a translation)** είναι εργαλεία αυτοματισμού browser που χρησιμοποιούνται μερικές φορές για τη δοκιμή φορτίου.

Περιγραφή Χαρακτηριστικό K6 Playwright/Cypress &amp; Playwright
|---------|----|---------|
| **Προσέγγιση** Αληθινός περιηγητής σε επίπεδο πρωτοκόλλου
| **Επιδόσεις** Χιλιάδες VUs Δεκάδες προγράμματα περιήγησης
| **Χρήση πόρων** Ασθενής Βαρύς (browsers)
| **Εκτέλεση JavaScript** Όχι, ναι, ναι, ναι.
| **Υπόθεση πρωτογενούς χρήσης** Δοκιμάστε τη λειτουργική δοκιμή φορτίου E2E.

**Πότε να χρησιμοποιήσετε το Playwright/Cypress αντ' αυτού:**

- Ανάγκη για δοκιμή εκτέλεσης JavaScript
- Πρέπει να επαληθεύει την απόδοση του προγράμματος περιήγησης
- Σύμπλεγμα δοκιμών ΖΕΠ
- Λειτουργικές δοκιμές E2E

**Γιατί το k6 είναι καλύτερο για τις περισσότερες εφαρμογές ASP.NET Core:**

- Δοκιμή επιπέδου πρωτοκόλλου που είναι επαρκής για εφαρμογές εκχωρημένες από διακομιστή
- Ανάγκη προσομοίωσης 100+ συγγενών χρηστών
- Πολύ πιο αποτελεσματική χρήση πόρων

### Περίληψη: Γλυκό σημείο του k6

**Επιλέξτε το k6 όταν θέλετε:**

- Γρήγορη, ακριβής δοκιμή φορτίου
- Φιλικό προς τον προγραμματιστή JavaScript API
- Εξαιρετική ενσωμάτωση CI/CD
- Δοκιμή επιπέδου πρωτοκόλλου HTTP (δεν απαιτείται πρόγραμμα περιήγησης)
- Πλούσια υποστήριξη σεναρίου (καπνός, φορτίο, στρες, ακίδα, μούσκεμα)
- Σύγχρονη εργαλείων με καλό οικοσύστημα
- Χρήση ελαφρών πόρων

**k6 είναι ιδανικό για:**

- APIs και υπηρεσίες διαδικτύου
- Επεξεργασμένες εφαρμογές στο πλαίσιο του διακομιστή
- Πύλες επιδόσεων CI/CD
- Δοκιμή επιδόσεων με γνώμονα τον προγραμματιστή
- Cloud-native εφαρμογές

**Σκεφτείτε εναλλακτικές λύσεις αν χρειάζεστε:**

- Δοκιμή με βάση το πρόγραμμα περιήγησης (χρήση) [Playwright](https://playwright.dev/))
- Εκτεταμένη υποστήριξη πρωτοκόλλου πέρα από το HTTP (χρήση [JMeterCity name (optional, probably does not need a translation)](https://jmeter.apache.org/))
- Δωρεάν κατανεμημένη δοκιμή (χρήση) [ΛόκουστCity name (optional, probably does not need a translation)](https://locust.io/))
- Όμορφη ενσωματωμένη αναφορά (χρησιμοποιήστε [ΓκάτλινγκCity name (optional, probably does not need a translation)](https://gatling.io/))
- GUI για μη τεχνικούς δοκιμαστές (χρήση [JMeterCity name (optional, probably does not need a translation)](https://jmeter.apache.org/))

## Επόμενα βήματα

Τώρα που καταλαβαίνετε τι είναι το k6, πώς να το εγκαταστήσετε, τα είδη των διαθέσιμων δοκιμών απόδοσης, και γιατί το k6 είναι μια μεγάλη επιλογή για τις εφαρμογές ASP.NET Core, είστε έτοιμοι να ξεκινήσετε να γράφετε πραγματικές δοκιμές.

**Συνεχίστε να [Μέρος 2: Πρακτική εφαρμογή](/blog/k6-testing-practical)** όπου θα καλύψουμε:

- Ρύθμιση του περιβάλλοντος δοκιμής
- Γράφοντας τον καπνό, το φορτίο, το στρες, την αιχμή και τις δοκιμές εμποτισμού
- Δοκιμαστική συμπεριφορά κρυφής μνήμης
- Ρεαλιστικές προσομοιώσεις ταξιδιού χρήστη
- ενσωμάτωση CI/CD με δράσεις GitHub
- Ανίχνευση παλινδρόμησης επιδόσεων
- Profiling με dotTrace και dotMemory
- Βέλτιστες πρακτικές και αντιμετώπιση προβλημάτων

## Πόροι

### k6 Τεκμηρίωση

- [Επίσημα έγγραφα k6](https://k6.io/docs/) - Πλήρης τεκμηρίωση k6
- [k6 JavaScript API](https://k6.io/docs/javascript-api/) - Όλα τα διαθέσιμα k6 APIs
- [k6 παραδείγματα](https://github.com/grafana/k6-learn) - Παράδειγμα σεναρίου δοκιμής
- [k6 μετρικές](https://k6.io/docs/using-k6/metrics/) - Κατανόηση μετρήσεων
- [Κατώτατα όρια k6](https://k6.io/docs/using-k6/thresholds/) - Καθορισμός κριτηρίων πρόσβασης/αποτυχίας

### Εναλλακτικές δοκιμές φορτίου

- [Απάτσι JMeter](https://jmeter.apache.org/) - Δοκιμή φορτίου με βάση την Java
- [ΛόκουστCity name (optional, probably does not need a translation)](https://locust.io/) - Δοκιμή φορτίου με βάση Python
- [ΓκάτλινγκCity name (optional, probably does not need a translation)](https://gatling.io/) - Δοκιμή φορτίου βάσει Scala
- [Πυροβολικό](https://www.artillery.io/) - Δοκιμή φορτίου Node.js
- [wrk](https://github.com/wg/wrk) - Εργαλείο συγκριτικής αξιολόγησης HTTP
- [Playwright](https://playwright.dev/) - Αυτοματοποίηση & δοκιμή προγράμματος περιήγησης