Simulez le trafic HTTP à l'aide de la rediffusion statique dans le AWS SDK pour Rust - Kit AWS SDK pour Rust

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Simulez le trafic HTTP à l'aide de la rediffusion statique dans le AWS SDK pour Rust

Kit AWS SDK pour Rust Il fournit plusieurs approches pour tester votre code qui interagit avec Services AWS. Cette rubrique décrit comment utiliser le StaticReplayClient pour créer un faux client HTTP qui peut être utilisé à la place du client HTTP standard normalement utilisé par Services AWS. Ce client renvoie les réponses HTTP que vous spécifiez plutôt que de communiquer avec le service via le réseau, afin que les tests obtiennent des données connues à des fins de test.

La aws-smithy-http-client caisse inclut une classe utilitaire de test appelée StaticReplayClient. Cette classe de client HTTP peut être spécifiée à la place du client HTTP par défaut lors de la création d'un Service AWS objet.

Lors de l'initialisation duStaticReplayClient, vous fournissez une liste de paires de requêtes et de réponses HTTP sous forme d'ReplayEventobjets. Pendant le test, chaque requête HTTP est enregistrée et le client renvoie la réponse HTTP suivante trouvée dans la liste d'événements ReplayEvent en tant que réponse du client HTTP. Cela permet d'exécuter le test en utilisant des données connues et sans connexion réseau.

Utilisation du replay statique

Pour utiliser le replay statique, il n'est pas nécessaire d'utiliser un wrapper. Déterminez plutôt à quoi devrait ressembler le trafic réseau réel pour les données que votre test utilisera, et fournissez ces données de trafic StaticReplayClient au destinataire chaque fois que le SDK émet une demande du Service AWS client.

Note

Il existe plusieurs méthodes pour collecter le trafic réseau attendu, notamment les analyseurs de trafic réseau AWS CLI et les outils de détection de paquets.

  • Créez une liste d'ReplayEventobjets qui spécifient les requêtes HTTP attendues et les réponses qui doivent leur être renvoyées.

  • Créez une StaticReplayClient en utilisant la liste de transactions HTTP créée à l'étape précédente.

  • Créez un objet de configuration pour le AWS client, en le spécifiant StaticReplayClient comme étant celui de l'Configobjethttp_client.

  • Créez l'objet Service AWS client en utilisant la configuration créée à l'étape précédente.

  • Effectuez les opérations que vous souhaitez tester à l'aide de l'objet de service configuré pour utiliser leStaticReplayClient. Chaque fois que le SDK envoie une demande d'API à AWS, la réponse suivante de la liste est utilisée.

    Note

    La réponse suivante de la liste est toujours renvoyée, même si la demande envoyée ne correspond pas à celle du vecteur d'ReplayEventobjets.

  • Lorsque toutes les demandes souhaitées ont été effectuées, appelez la StaticReplayClient.assert_requests_match() fonction pour vérifier que les demandes envoyées par le SDK correspondent à celles de la liste des ReplayEvent objets.

exemple

Regardons les tests pour la même determine_prefix_file_size() fonction dans l'exemple précédent, mais en utilisant le replay statique au lieu du simulacre.

  1. Dans une invite de commande pour le répertoire de votre projet, ajoutez le aws-smithy-http-clientcrate en tant que dépendance :

    $ cargo add --dev aws-smithy-http-client --features test-util

    L'utilisation de --dev cette option ajoute la caisse à la [dev-dependencies] section de votre Cargo.toml fichier. En tant que dépendance de développement, elle n'est pas compilée et incluse dans votre binaire final utilisé pour le code de production.

    Cet exemple de code utilise également Amazon Simple Storage Service comme exemple Service AWS.

    $ cargo add aws-sdk-s3

    Cela ajoute la caisse à la [dependencies] section de votre Cargo.toml fichier.

  2. Dans votre module de code de test, incluez les deux types dont vous aurez besoin.

    use aws_smithy_http_client::test_util::{ReplayEvent, StaticReplayClient}; use aws_sdk_s3::primitives::SdkBody;
  3. Le test commence par créer les ReplayEvent structures représentant chacune des transactions HTTP qui doivent avoir lieu pendant le test. Chaque événement contient un objet de requête HTTP et un objet de réponse HTTP représentant les informations auxquelles ils Service AWS répondraient normalement. Ces événements sont transmis dans un appel à StaticReplayClient::new() :

    let page_1 = ReplayEvent::new( http::Request::builder() .method("GET") .uri("https://test-bucket.s3.us-east-1.amazonaws.com/?list-type=2&prefix=test-prefix") .body(SdkBody::empty()) .unwrap(), http::Response::builder() .status(200) .body(SdkBody::from(include_str!("./testing/response_multi_1.xml"))) .unwrap(), ); let page_2 = ReplayEvent::new( http::Request::builder() .method("GET") .uri("https://test-bucket.s3.us-east-1.amazonaws.com/?list-type=2&prefix=test-prefix&continuation-token=next") .body(SdkBody::empty()) .unwrap(), http::Response::builder() .status(200) .body(SdkBody::from(include_str!("./testing/response_multi_2.xml"))) .unwrap(), ); let replay_client = StaticReplayClient::new(vec![page_1, page_2]);

    Le résultat est enregistré dansreplay_client. Cela représente un client HTTP qui peut ensuite être utilisé par le SDK pour Rust en le spécifiant dans la configuration du client.

  4. Pour créer le client Amazon S3, appelez la from_conf() fonction de la classe client pour créer le client à l'aide d'un objet de configuration :

    let client: s3::Client = s3::Client::from_conf( s3::Config::builder() .behavior_version(BehaviorVersion::latest()) .credentials_provider(make_s3_test_credentials()) .region(s3::config::Region::new("us-east-1")) .http_client(replay_client.clone()) .build(), );

    L'objet de configuration est spécifié à l'aide de la http_client() méthode du générateur, et les informations d'identification sont spécifiées à l'aide de la credentials_provider() méthode. Les informations d'identification sont créées à l'aide d'une fonction appeléemake_s3_test_credentials(), qui renvoie une fausse structure d'informations d'identification :

    fn make_s3_test_credentials() -> s3::config::Credentials { s3::config::Credentials::new( "ATESTCLIENT", "astestsecretkey", Some("atestsessiontoken".to_string()), None, "", ) }

    Ces informations d'identification n'ont pas besoin d'être valides car elles ne seront pas réellement envoyées à AWS.

  5. Exécutez le test en appelant la fonction à tester. Dans cet exemple, le nom de cette fonction estdetermine_prefix_file_size(). Son premier paramètre est l'objet client Amazon S3 à utiliser pour ses demandes. Par conséquent, spécifiez le client créé à l'aide du système StaticReplayClient afin que les demandes soient traitées par celui-ci plutôt que de passer par le réseau :

    let size = determine_prefix_file_size(client, "test-bucket", "test-prefix") .await .unwrap(); assert_eq!(19, size); replay_client.assert_requests_match(&[]);

    Lorsque l'appel à determine_prefix_file_size() est terminé, un assertion est utilisé pour confirmer que la valeur renvoyée correspond à la valeur attendue. Ensuite, la assert_requests_match() fonction de StaticReplayClient méthode est appelée. Cette fonction analyse les requêtes HTTP enregistrées et confirme qu'elles correspondent toutes à celles spécifiées dans le tableau d'ReplayEventobjets fourni lors de la création du client de rediffusion.

Vous pouvez consulter le code complet de ces exemples sur GitHub.