Tester les modules WASM

Le test de vos modules WASM à plusieurs niveaux vous aide à détecter les problèmes au début et à valider votre logique de traitement avant le déploiement en production. Cet article explique comment tester unitairement vos modules, inspecter la sortie WASM et exécuter des tests locaux et de bout en bout pour Opérations Azure IoT graphiques de flux de données.

Avant de suivre les étapes décrites dans cet article, configurez votre environnement de développement local et générez et exécutez une application de graphe localement. Pour plus d’informations, consultez Générer des modules WASM pour les flux de données.

Prerequisites

Remplissez les conditions préalables répertoriées dans les modules BUILD WASM pour les flux de données.

Test des unités

Extrayez votre logique principale en fonctions simples que vous pouvez tester sans WASM :

// In src/lib.rs - extract the conversion logic
pub fn fahrenheit_to_celsius(f: f64) -> f64 {
    (f - 32.0) * 5.0 / 9.0
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_boiling_point() {
        assert!((fahrenheit_to_celsius(212.0) - 100.0).abs() < 0.001);
    }

    #[test]
    fn test_freezing_point() {
        assert!((fahrenheit_to_celsius(32.0) - 0.0).abs() < 0.001);
    }

    #[test]
    fn test_body_temperature() {
        assert!((fahrenheit_to_celsius(98.6) - 37.0).abs() < 0.001);
    }
}
cargo test  # Runs tests without WASM target

Inspecter la sortie WASM

Vérifiez que votre module exporte les interfaces attendues avant d’envoyer (push) vers un registre :

wasm-tools component wit your-module.wasm

Cela montre les interfaces WIT que votre module implémente. Vérifiez que vous voyez l’exportation attendue avec map, filter ou branch.

Test local avec l’interface CLI dataflow-dev

L’interface dataflow-dev CLI vous permet de tester vos modules WASM localement par rapport à une définition de graphique sans déployer sur un cluster. L’interface CLI utilise des conteneurs Docker pour simuler le runtime de flux de données.

Pour créer un cas de test, créez un répertoire avec la structure suivante :

my-test/
  my-test.test.yaml     # Test descriptor
  input/                 # Input data files
    temperature.json
  expected/              # Expected output
    expected.json

Définissez le test dans le .test.yaml fichier :

name: "Temperature F to C conversion"
graph: "../graph-simple.yaml"
input: "./input"
expected: "./expected/expected.json"
timeout: 90000
select: ["payload"]

Le graph champ pointe vers la définition de graphique, input contient les données de test et expected a la sortie à comparer. Le select champ spécifie les champs de la sortie à comparer.

Exécutez le test :

dataflow-dev run start
dataflow-dev build --app .
dataflow-dev test --app . my-test
dataflow-dev run stop

Pour obtenir un ensemble complet d’exemples de tests, consultez le répertoire des tests dans le référentiel d’exemples.

Tests de bout en bout sur un cluster

Pour les tests d’intégration, déployez votre module sur un cluster de développement et utilisez MQTT pour envoyer des données de test :

  1. Envoyez le module à un registre de test.
  2. Déployez un DataflowGraph pointant vers le registre de test.
  3. Abonnez-vous à la rubrique de sortie : mosquitto_sub -h localhost -t "output/topic" -v
  4. Publier des messages de test : mosquitto_pub -h localhost -t "input/topic" -m '{"temperature": {"value": 72}}'
  5. Vérifiez que la sortie correspond aux attentes.
  6. Vérifiez les journaux des pods pour les erreurs : kubectl logs -l app=dataflow-dev -n azure-iot-operations --tail=50

Pour plus d’informations, consultez Déployer des modules et des définitions de graphiques et configurer des points de terminaison de Registre.