2016-11-22 2 views
2

J'ai une application qui se connecte à une API tierce externe, et dernièrement l'instance de test de l'API n'a pas été particulièrement fiable. Cela arrête la progression du développement et transforme nos pipelines de build en rouge, donc je voudrais ajouter un proxy d'enregistrement HTTP pour arrêter cela.La lecture et l'enregistrement de WireMock peuvent-ils être utilisés en même temps?

J'ai eu WireMock recommandé, et après avoir essayé son record and play features, il semble être très bon - il a pratiquement tout à fait prêt à l'emploi. Nous changeons simplement l'URL configurée pour le service externe, puis les enregistrer comme ceci:

java -jar wiremock-standalone-2.3.1.jar \ 
    --port 8080 \ 
    --proxy-all="https://test-api.example.com/" \ 
    --record-mappings \ 
    --verbose 

Cela crée des dossiers de cache dans le répertoire de travail courant, et il peut être commuté en mode de lecture en tuant l'enregistreur et le passage à lecture:

java -jar wiremock-standalone-2.3.1.jar \ 
    --port 8080 \ 
    --verbose 

Cependant, pour l'utiliser dans la pratique, je aurais besoin de mettre en place une instance de mon application en cours d'exécution à travers un paquet de régression de test pour enregistrer beaucoup d'utilisation de l'API, et Botté de dire un jour. Je devrais alors arrêter l'enregistreur et copier les fichiers de cache sur un processus de lecture, puis redémarrer le processus de lecture.

Cela fonctionnerait probablement, mais il se sent comme beaucoup de pièces en mouvement, et idéalement, je voudrais courir jouer et enregistrer en même temps. Cela permettrait au cache d'être automatiquement actualisé si un nouvel appel d'API devenait nécessaire (en raison de modifications naturelles du projet) mais serait reproduit par défaut lorsqu'une correspondance est trouvée.

Est-ce possible? Je ne suis pas un programmeur Java, mais supposons qu'il soit disponible si l'on devait écrire un plugin WireMock. Ce serait génial si cela pouvait être fait à la console, mais la formulation du manuel indique que le jeu et l'enregistrement sont considérés par les mainteneurs comme des choses séparées.

Je me demandais si je pouvais passer à Mountebank, qui ressemblait à it might support this, mais il s'avère that play and record are separate modes here too. En tout cas, j'aime bien le fait que WireMock ait été facile à démarrer, alors j'aimerais le faire si possible.

Répondre

3

WireMock sera pas tout à fait faire ce que vous demandez à l'heure actuelle, cependant:

1) Vous pouvez utiliser le paramètre --proxy-all et non --record-mappings lors de la lecture. Cela entraînera le transfert de toute requête non appariée par un mappage de talon existant (enregistré ou non) vers le service réel.

2) Une solution de contournement qui vous rapprocherait de ce que vous recherchez serait d'envoyer un point de terminaison POST à /__admin/mappings/reset après avoir collecté de nouveaux mappages enregistrés. Cela entraîne l'analyse du système de fichiers et le chargement de toutes les mappages.

+0

Merci Tom, c'est très utile. Je suis actuellement dans une phase d'enquête, mais je vais attirer l'attention de mes collègues sur notre mise en œuvre. Je pense à un conteneur Docker qui offre un enregistreur qui actualise un cache API (en cours d'exécution une fois par jour), puis un mode de lecture pour mettre en cache le réel. L'astuce de redémarrage est utile - je pensais utiliser Supervisord ici avec un redémarrage automatique, mais votre approche semble plus gracieuse. – halfer

+0

Pas de soucis. Je pense à réécrire complètement l'enregistreur bientôt donc je vais garder ce cas d'utilisation à l'esprit. – Tom

+0

Super, je pense que cela pourrait être utile en général. – halfer