IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Boucle requete GET http pour test de charge


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Par défaut Boucle requete GET http pour test de charge
    Bonjour à tous,

    Voici ma question:

    Je fais un test de performances et de montée en charge d'un serveur web.
    Afin de simuler plusieurs connexions simultanées, j'utilise ce script (à deux trois lignes près)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/usr/bin/env python
     
    import httplib
    import sys
     
    #get http server ip
    http_server = sys.argv[1]
    #create a connection
    conn = httplib.HTTPConnection(http_server)
     
    while 1:
      cmd = "GET / HTTP/1.1\r\n"
      cmd = cmd.split()
     
      if cmd[0] == 'exit': #tipe exit to end it
        break
     
      #request command to server
      conn.request(cmd[0], cmd[1])
     
      #get response from server
      rsp = conn.getresponse()
     
      #print server response and data
      print(rsp.status, rsp.reason)
      data_received = rsp.read()
      print(data_received)
     
    raw_input()
    Je mets un "raw_input() à la fin afin de garder la connexion active.
    Un script (.bat) lance ce script 100, 1000 ou 10000 fois en simultané afin de tester la résistance du serveur.

    J'en arrive à ma question:
    Est-ce que mon script ne fait qu'un seul GET et puis garde la connexion ouverte, ou bien il fait des "GET" en continu ? Pour moi il boucle bien à l'infini mais je suis pas sur...
    S'il le fait qu'une fois, comment puis-je lui dire de faire un "GET toutes les deux secondes par exemple?

    Merci d'avance pour votre aide.

    P.S: je ne connais pas bien du tout python.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Citation Envoyé par ludo40190 Voir le message
    Est-ce que mon script ne fait qu'un seul GET et puis garde la connexion ouverte, ou bien il fait des "GET" en continu ? Pour moi il boucle bien à l'infini mais je suis pas sur...
    Ben les "print" sont aussi dans la boucle... Si elle est exécutée plusieurs fois, vous devriez voir défiler les informations affichées par ces "print".

    Citation Envoyé par ludo40190 Voir le message
    S'il le fait qu'une fois, comment puis-je lui dire de faire un "GET toutes les deux secondes par exemple?
    time.sleep est approprié dans ce genre de cas.

    Citation Envoyé par ludo40190 Voir le message
    P.S: je ne connais pas bien du tout python.
    Ce ne sont ni les tutos, ni la documentation qui manquent.... Et vous êtes supposé les avoir compulsé un minimum avant de coder quoi que ce soit (comme vous êtes supposé lire le mode d'emploi de votre machine à café avant de la mettre sous-tension).
    note : ce sont les règles de ces forums.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    au delà des connaissances python minimum à avoir, il y a également des lacunes sur le fonctionnement des réseaux, la base étant de savoir investiguer ce qui transite sur le réseau à l'aide d'outils comme wireshark

    chaque GET envoyé l'est au sein d'une nouvelle connexion (TCP), pour conserver la connexion ouverte il faut rajouter un header HTTP Connexion: keep-alive et réutiliser le même objet tout simplement

    en revanche un outil de montée en charge ça ne s'improvise pas vraiment non plus, en l'occurrence les limites de la machine qui envoie les requêtes peuvent biaiser les résultats, si le serveur accepte 10K connexions simultanées mais que la machine de bench ne peut en avoir que 2000 par exemple, les limites seront celles du bench, pas celles du serveur

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    chaque GET envoyé l'est au sein d'une nouvelle connexion (TCP), pour conserver la connexion ouverte il faut rajouter un header HTTP Connexion: keep-alive et réutiliser le même objet tout simplement
    Ma compréhension est que l'en-tête Connexion: keep-alive est nécessaire pour rendre la connexion persistante avec HTTP 1.0. Avec les versions 1.1 et 2.0, ce devrait être le défaut. C'est en tous cas ce que raconte wikipedia (l'autorité restant les RFC que je n'ai pas pris la peine de relire).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ma compréhension est que l'en-tête Connexion: keep-alive est nécessaire pour rendre la connexion persistante avec HTTP 1.0. Avec les versions 1.1 et 2.0, ce devrait être le défaut.
    ah oui tiens, je me souvenais plus de ça comme ça, merci pour la piqûre de rappel

    bon après en pratique il faudrait regarder (sniffer) ce qu'envoie réellement httplib, souvent quand on ne précise pas le keep-alive on se retrouve avec un Connection: close explicite dans les headers

    après vérif. il semble que tu as raison wiztricks, par défaut avec httplib la connexion est réutilisée :

    Nom : Sans titre.png
Affichages : 735
Taille : 14,5 Ko

    mea maxima culpa

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/04/2012, 16h42
  2. C++ Requete GET Http Erreur 400 Bad Request
    Par gy0m76 dans le forum C++
    Réponses: 2
    Dernier message: 02/07/2008, 15h49
  3. base de donnée d'exemple pour tests de charge
    Par eiki49 dans le forum Administration
    Réponses: 2
    Dernier message: 04/03/2008, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo