Her test, her kart, her commit. Donanım rafı olmadan.
Bir kart çiftliği yavaş, kararsız ve pahalıdır; üstelik ihtiyacınız olan kart ihtiyacınız olduğunda orada olmaz. CARME aynı firmware'i, CI'ınızda ne kadar çekirdek varsa o kadar emüle edilmiş kartta çalıştırır ve her seferinde aynı cevabı verir.
- runtest_beacon_seen_by_gatewaynrf52840dk
- ···test_node_survives_brownoutnrf52840dk
- ···test_aes_gcm_vectorsnucleo_h753zi
- ···test_ota_power_cutnucleo_h753zi
- ···test_linux_boot_from_snapzcu102
- ···test_can_bus_off_recoveryramn
- ···test_watchdog_resethifive1
Kartı açın, girdilerini sürün, ne yaptığını kontrol edin.
Bir .cmtest, pytest tarzı bir dosyadır. UART çıktısını, yazmaçları, belleği, ağ paketlerini, GPIO'yu, güç durumunu ya da RTL'deki sinyalleri kontrol edin.
from carme import systemdef test_beacon_seen_by_gateway(): s = system("systems/ble_mesh.cmsystem") # bir ağ geçidi ve 12 düğüm s.load("node*", "build/node.elf") s.load("gateway", "build/gateway.elf") s["gateway"].uart("uart0").expect("node 12 joined", timeout_s=5)def test_node_survives_brownout(): s = system("systems/ble_mesh.cmsystem") s.load("node*", "build/node.elf") s["node3"].power.brownout(at_ms=1200, for_ms=3) s["node3"].uart("uart0").expect("recovered from brownout")Aynı girdi, aynı sonuç. Yeniden deneme yok.
- Paralel
Çekirdekler arasında carme-test -j N; makineler arasında --shard i/n ile bölün
- Deterministik
Aynı girdi, aynı sonuç. Kararsız bir kartı gizleyen yeniden denemeler yok
- Hızlı başlangıç
Her testi açılıştan sonra kaydedilmiş bir .cmsnap'ten başlatın
- Raporlar
JUnit XML, HTML, kapsam ve her hata için bir iz
- Yeniden oynatma
Her hata, onu bit bit yeniden oynatan tek komutu yazdırır
- Her CI
GitHub Actions, GitLab CI, Jenkins ya da Buildkite'ta tek komut; konteyner içinde çalışır
Hatalar, zaman ve ölçek istediğiniz anda.
İstediğiniz an hata:bir flash sayfasını bozun, RAM'de bir biti çevirin, bir CAN çerçevesini düşürün, veri yolunu durdurun, saati bozun, yazma sırasında gücü kesin.
Zamanda yolculuk:bir saatlik çalışmayı saniyelere sığdırın ya da incelerken zamanı durdurun.
Uç durumlar:sınırındaki sensör, menzilinin ucundaki radyo, %3'te ve düşmekte olan pil.
Ölçek:tek ağda bin düğüm, her biri kendi firmware'ini çalıştırırken.
İlk commit'ten sahaya.
Enstrümantasyonsuz kapsam
CARME her testin firmware'in hangi satırlarına ulaştığını, enstrümante edilmiş bir derleme olmadan doğrudan çalıştırmadan kaydeder. Bunu tüm test takımı boyunca birleştirin ve hiçbir testin çalıştırmadığı kodu görün.
Tek test takımı, her aşama
CI'da emüle edilen kartlarda çalışan testler, Lumina Sim'de RTL'e karşı da, aynı dosyalarla bir FPGA prototipine ya da gerçek karta karşı da çalışır. Tek bir test takımı ürünü ilk commit'ten sahaya kadar izler.
Sık sorulan sorular.
Mevcut testlerimi yeniden kullanabilir miyim?
Kartla UART, ağ ya da hata ayıklayıcı üzerinden konuşan testler olduğu gibi çalışır: CARME aynı arayüzleri sunar. Python test kodu birkaç değişiklikle .cmtest'e taşınır.
Aynı anda kaç test çalışabilir?
Genellikle ana makinedeki her çekirdeğe bir test; bir mikrodenetleyici testi onlarca megabayt ister. Linux sınıfı makineler daha fazlasını ister ve bir makinede daha azı çalışır.
Sonuçlar ana makineye göre değişir mi?
Hayır. Bir test dizüstü bilgisayarda, CI runner'ında ve sunucuda aynı sonucu verir.
Gömülü ve silikon ekipleri için tam sistem emülasyonu
Gömülü geliştiriciler için
Donanım olmadan geliştirin, hata ayıklayın, test edin
Silikon ekipleri için
Silikon hazır olduğunda yazılım da hazır
Döngüde RTL
HDL ve firmware birlikte test edilir
Lumina entegrasyonu
RTL'den çalışan firmware'e tek akış
Kartlar ve SoC'ler
250+ kart ve SoC, açılmaya hazır
CPU'lar
Arm, RISC-V, SPARC, Power, x86, Xtensa, MSP430, TriCore
Çevre birimleri
Yazmaç düzeyinde birebir 650+ model