Testa WASM-moduler

Genom att testa DINA WASM-moduler på flera nivåer kan du fånga upp problem tidigt och verifiera bearbetningslogiken innan du distribuerar till produktion. Den här artikeln beskriver hur du enhetstestar dina moduler, inspekterar WASM-utdata och kör lokala och slutpunkt-till-slutpunkt-tester för Azure IoT Operations dataflödesdiagram.

Innan du slutför stegen i den här artikeln konfigurerar du din lokala utvecklingsmiljö och skapar och kör ett grafprogram lokalt. Mer information finns i Skapa WASM-moduler för dataflöden.

Förutsättningar

Slutför de krav som anges i Skapa WASM-moduler för dataflöden.

Enhetstestning

Extrahera kärnlogik i vanliga funktioner som du kan testa utan 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

Inspektera WASM-utdata

Kontrollera att modulen exporterar de förväntade gränssnitten innan du skickar till ett register:

wasm-tools component wit your-module.wasm

Detta visar WIT-gränssnitten som modulen implementerar. Kontrollera att du ser den förväntade map, filter, eller branch export.

Lokal test med dataflow-dev CLI

Med dataflow-dev CLI kan du testa dina WASM-moduler lokalt mot en grafdefinition utan att distribuera till ett kluster. CLI använder Docker-containrar för att simulera dataflödeskörningen.

Skapa ett testfall genom att skapa en katalog med följande struktur:

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

Definiera testet i .test.yaml filen:

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

Fältet graph pekar på grafdefinitionen, input innehåller testdata och expected har utdata att jämföra med. Fältet select anger vilka fält i utdata som ska jämföras.

Kör testet:

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

En fullständig uppsättning testexempel finns i testkatalogen i exempellagringsplatsen.

Slutpunkt till slutpunkt-testning i ett kluster

För integreringstestning distribuerar du modulen till ett utvecklingskluster och använder MQTT för att skicka testdata:

  1. Skicka modulen till ett testregister.
  2. Distribuera en DataflowGraph som pekar på testregistret.
  3. Prenumerera på ämnet: mosquitto_sub -h localhost -t "output/topic" -v
  4. Publicera testmeddelanden: mosquitto_pub -h localhost -t "input/topic" -m '{"temperature": {"value": 72}}'
  5. Kontrollera att utdata matchar förväntningarna.
  6. Kontrollera poddloggarna efter fel: kubectl logs -l app=dataflow-dev -n azure-iot-operations --tail=50

Mer information finns i Distribuera moduler och grafdefinitioner och Konfigurera registerslutpunkter.