web-dev-qa-db-fra.com

Comment testez-vous le logiciel qui est sensible au temps?

Par temps sensible, je veux dire par exemple un script qui fonctionne uniquement une fois par mois ou un script qui fonctionne en continu mais donne une certaine production une fois par mois. Évidemment, vous pouvez tester un appareil pour beaucoup de cas, mais il y a des exceptions (dans ma compréhension).

Un exemple récent que j'ai rencontré consistait à mettre en place un emploi cron pour courir le second au dernier jour de chaque mois. Cela nécessitait à l'aide d'un script shell avec onglet cron pour obtenir le bon jour du mois pour Cron, quelque chose comme:

1 0 [Shell command] * * [my script]

J'étais inconnu avec le script et inconnu avec des scripts shell en général et n'avait donc aucun moyen de le tester autre que d'attendre la fin du mois de venir et de voir si le script est exécuté correctement (ma solution était en fait de trouver un co- Travailleur qui en savait beaucoup plus sur le script de cron et shell que j'ai fait).

Je suis donc curieux s'il y a des contours utiles pour les scripts sensibles au temps.

9
DanLeaningphp

Outre les tests unitaires, il existe deux autres stratégies de mise en place de tests automatisés pour traiter un problème spécifique au système d'exploitation:

  • Virtualisation : Vous configurez plusieurs images de système d'exploitation (par exemple, à l'aide de VMware ) avec les configurations exactes que vous avez besoin, définissez Un moyen de tirer automatiquement le binaire pour tester (généralement en montrant un répertoire spécial dans l'espace de la VM), puis exécutez le test.

Ou:

  • Instrumentation : Ajouter manuellement spécial if Conditions à votre programme qui fera le comportement du programme différemment. Sous UNIX, cela serait fait en vérifiant si une certaine variable d'environnement est définie, comme FOOBAR_TEST_TIME_WITH_T=500. Vos tests automatisés utiliseront alors différents paramètres des variables d'environnement et différentes variables d'environnement, pour exécuter ce dont vous avez besoin.

Vous pouvez également créer un lien vers différentes bibliothèques si vos interactions peuvent être exprimées au niveau de la bibliothèque, que vous pouvez penser comme une virtualisation (si la "bibliothèque" est le noyau OS) ou en tant que technique d'instrumentation. Les deux termes peuvent être utilisés, bien que le terme virtualisation tel que utilisé aujourd'hui signifie presque toujours quelque chose comme VMware. Une bibliothèque spécifiquement pour renvoyer des valeurs en conserve ou réorganiser des interactions spécifiques serait un Mock ou Stub Approche.

Il existe également des outils d'instrumentation automatiques, qui peuvent réécrire vos fichiers binaires pour obtenir d'autres effets souhaités, comme le système de fichiers étant plein.

Dans l'ensemble, votre objectif est de trouver des bugs. Pour vérifier les cas étranges, comme le système de fichiers étant surexploitant, il est plus facile et toujours efficace pour simplement instruminer manuellement votre programme, en passant par voie de configuration de la virtualisation ou de la machine manuelle rarement si jamais.

7
Macneil

Je ne connais pas votre script, mais j'essaie d'utiliser une sorte de paramètre où je peux définir la date. Dans votre cas, si aucune date n'est donnée, par défaut à la fin du mois. Dans votre code, prenez le paramètre de date et exécutez si aujourd'hui est deux jours avant. Non seulement vous serez capable de le tester (passer à une date deux jours à partir de maintenant), mais également le lendemain, il l'empêchait d'empêcher de courir dans des circonstances normales (panne de courant, serveur en panne, etc.).

1
JeffO

Il n'ya pas beaucoup de besoin de tester le cron, car il est à peu près testé ("test de production") pour de nombreuses générations. Bien sûr, si vous travaillez avec un script shell, vous pouvez définir la date/heure dans une machine virtuelle.

La manière préférée de traiter cela est la "moqueur de l'horloge", en utilisant une truc de programmation ou une autre pour simuler le temps. Dans les scripts Shell, vous pouvez utiliser la syntaxe $ {: -} pour utiliser une date définie dans une variable d'environnement et redescendez le temps réel s'il n'a pas été forcé.

Dans d'autres langues, nous utilisons des bibliothèques simulées ou construisent une abstraction au-dessus de l'horloge.

L'horloge simulée est bonne parce que vous pouvez l'automatiser au lieu d'avoir à configurer manuellement votre test. C'est un très grand avantage lorsqu'il s'agit de modifier le script/code plus tard et que vous pourrez facilement savoir si cela fonctionne toujours ou non.

0
Tim Ottinger