CARME
CARME · Test ve CI
Önizleme

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.

carme-test tests/ -j 32running
  • runtest_beacon_seen_by_gateway
  • ···test_node_survives_brownout
  • ···test_aes_gcm_vectors
  • ···test_ota_power_cut
  • ···test_linux_boot_from_snap
  • ···test_can_bus_off_recovery
  • ···test_watchdog_reset
0 geçti · 0 kaldı · 0.00sresults.xml
Testler Python

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.

tests/ble_beacon.cmtest
from carme import system
def 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")
CI için tasarlandı

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

Donanımın çalıştıramadığı testler

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.

Kapsam ve erim

İlk commit'ten sahaya.

01

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.

02

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.

Sorular

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.

Kart çiftliğinizin sürekli başarısız olduğu testi getirin.

Gizlilik ayarları

Bu sitenin neleri kullanabileceğini seçin. Kararınızı her sayfanın altındaki Gizlilik ayarları bağlantısından dilediğiniz zaman değiştirebilirsiniz.

Sitenin çalışması için gerekenler ve burada yaptığınız seçimin kaydı. Kayıt tarayıcınızda tutulur; çerez kullanılmaz.

Her zaman açık

Ziyaretleri saymamıza ve hangi sayfaların işe yaradığını görmemize olanak tanır; reklam ya da siteler arası takip içermez. Şu anda hiçbir analitik aracı kullanmıyoruz, yani seçiminiz ne olursa olsun hiçbir şey yüklenmez.

Çerez politikası · Gizlilik politikası