Napisałem rozmyty test, który zawodzi niewiarygodnie. Dodałem kod do debugowania, ale teraz chcę uruchomić test, dopóki się nie powiedzie, aby móc zebrać dane wyjściowe debugowania.
Skonfigurowałem test, aby móc go uruchomić przy użyciu:
./runtest
Moje obecne rozwiązanie to napisanie untilfail
skryptu:
#!/bin/bash
$@
while [ $? -eq 0 ]; do
$@
done
Następnie użyj go:
untilfail ./runtest
Czy istnieje prostsze rozwiązanie?
Odpowiedzi:
while
wykonuje polecenie, aby można było korzystać z prostszegoTo zatrzyma pętlę, gdy
./runtest
zwróci niezerowy kod wyjścia (co zwykle wskazuje na awarię).Aby dodatkowo uprościć obecne rozwiązanie, wystarczy zmienić skrypt tillfail, aby wyglądał następująco:
A potem możesz to wywołać za pomocą dowolnego polecenia, którego już używasz:
źródło
[
jest to polecenie. Jest to błędne przekonanie, że z nowych użytkowników[
jest częściąif
iwhile
składnia.count=0
przed pętlą, a następnie zamiast:
w pętli (no-op), wstaw(( count++ ))
- to zwiększa licznik.say
i głośnika, możeszwhile ./runtest; do :; done && say test failed
go powiadomić, jeśli kiedykolwiek przestaniesay
jest to specyficzne dla systemu macOS.Jeśli nie chcesz zawijać złożonej linii potoku w skrypcie lub funkcji powłoki, działa to:
Żądanie HTTP w tym przypadku zawsze zwraca 200, ale także zwraca JSON, który ma atrybut „HasErrors”: true, gdy wystąpi błąd.
źródło
Mając podobny problem w systemie, w którym powielana jest logika ponownej próby powłoki, stworzyłem dedykowane narzędzie do rozwiązania tego problemu, zwane „ponów próbę”:
Bardziej złożony przykład:
Narzędzie dostępne na https://github.com/minfrin/retry .
źródło