python - ligne - test de performance jmeter



Comment est-ce que je devrais insister tester/charger le test d'une application de serveur de client? (4)

Pour la performance, vous regardez deux choses: la latence (la réactivité de l'application) et le débit (combien d'opérations par intervalle). Pour la latence, vous devez avoir un point de référence acceptable. Pour le débit, vous devez avoir un débit minimum acceptable.

Ce sont les points de départ. Pour indiquer à un client combien de xyz vous pouvez faire par intervalle, vous devez connaître la configuration matérielle et logicielle. Connaître le matériel de production est important pour obtenir des chiffres précis. Si vous ne connaissez pas la configuration matérielle, vous devez trouver un moyen de mapper vos chiffres du matériel de test au matériel de production final.

Sans la connaissance du matériel, vous ne pouvez vraiment observer que les tendances dans les performances au fil du temps plutôt que des absolus.

Connaître la configuration du logiciel est également important. Avez-vous une configuration de serveur en cluster, est-ce que la charge est équilibrée, y a-t-il autre chose qui s'exécute sur le serveur? Pouvez-vous adapter votre logiciel ou devez-vous adapter le matériel à la demande?

Pour savoir combien de clients vous pouvez supporter, vous devez comprendre ce qu'est un ensemble standard d'opérations. Un test rapide consiste à supprimer le client et écrire un client stub et le spin autant que vous le pouvez. Demandez à chacun de se connecter au serveur. Vous finirez par atteindre la limite de ressources de connexion au serveur. Sans pool de connexion ou un meilleur matériel, vous ne pouvez pas obtenir plus élevé que cela. Souvent, vous rencontrerez un problème d'architecture avant, mais dans les deux cas vous avez des limites supérieures.

Prenez cette information et concevez un script que votre client peut adopter. Vous devez définir la durée de votre script pour effectuer l'action en fonction du temps nécessaire à l'utilisateur pour le faire. Commencez à augmenter vos nombres comme mentionné ci-dessus pour atteindre le point où l'augmentation des clients entraîne une plus grande diminution des performances.

Il y a plusieurs façons de tester le stress mais la clé est de comprendre la charge attendue. Interrogez vos clients sur leurs attentes. Quelle est la demande attendue par intervalle? De là, vous pouvez travailler sur les charges supérieures.

Vous pouvez faire un test de trempage avec de nombreux clients fonctionnant continuellement pendant plusieurs heures ou plusieurs jours. Vous pouvez essayer de connecter autant de clients que vous le pouvez aussi rapidement que possible pour voir comment votre serveur gère une forte demande (également une attaque DOS).

Les recherches simultanées doivent être effectuées par le biais de vos recherches de comportement standard agissant au nom du client ou, écrire un script pour établir un sémaphore qui attend sur de nombreux threads, puis vous pouvez les libérer tous en même temps. C'est amusant et punit votre base de données. Lorsque vous effectuez des recherches, vous devez prendre en compte les couches de mise en cache qui peuvent exister. Vous devez tester à la fois la mise en cache et la mise en cache (dans les scénarios où tout le monde fait des requêtes de recherche uniques).

Le stockage de base de données est basé sur l'espace physique. Vous pouvez déterminer la taille des lignes à partir des longueurs de champ et de la population de données attendues. Extrapolez cela statistiquement ou créez un script de génération de données (utile pour vos scénarios de test de charge et qui devrait être un atout pour votre organisation), puis mappez les données générées aux objets métier. Vos clients se soucient du nombre d'objets de gestion qu'ils peuvent stocker, tout en vous souciant de la quantité de données brutes pouvant être stockées.

Autres points à considérer: Quelle est la disponibilité attendue? Qu'en est-il du temps qu'il faut pour mettre un serveur en ligne? La disponibilité de 99,9% n'est pas bonne s'il faut deux jours pour la ramener en ligne une fois que la disponibilité diminue. D'un autre côté, une disponibilité inférieure est plus acceptable si cela prend 5 secondes pour redémarrer et vous avez une chute.

Je développe un système basé sur une base de données de type client-serveur et j'ai besoin de trouver un moyen de tester le système. Les clients veulent inévitablement savoir des choses telles que:

• Combien de clients un serveur peut-il prendre en charge?
• Combien de recherches simultanées un serveur peut-il prendre en charge?
• Combien de données pouvons-nous stocker dans la base de données?
• Etc.

La clé de toutes ces questions est le temps de réponse. Nous devons être en mesure de mesurer comment le temps de réponse et les performances se dégradent au fur et à mesure que de nouvelles charges sont introduites afin de produire une sorte de joli graphique que nous pourrions lancer sur les clients pour leur donner une idée du rendement attendu. configuration matérielle.

À l'heure actuelle, nous mettons les doigts en l'air et faisons des suppositions éclairées en nous basant sur ce que nous savons déjà du système par expérience. Comme le produit est soumis à des conditions plus exigeantes, cela s'avère inadéquat pour nos besoins futurs.

On m'a confié la tâche de concevoir une méthode pour obtenir de telles réponses d'une manière significative. Je me rends compte que ce n'est pas une question à laquelle tout le monde peut répondre de façon définitive, mais je cherche des suggestions sur la façon dont les gens ont fait un tel travail sur leurs propres systèmes.

Une chose à noter est que nous avons un accès complet à notre API client via le langage Python (gracieuseté de SWIG) qui est beaucoup plus facile à utiliser que C ++ pour ce genre de travail.

Alors on y va, je jette ça à l'étage: vraiment intéressé de voir quelles idées vous pouvez imaginer!


Answer #1

Si vous êtes à l'aise pour coder des tests en Python, j'ai trouvé funkload très performant. Vous ne dites pas que votre serveur est basé sur http, vous devrez donc adapter leurs installations de test à votre propre style client / serveur.

Une fois que vous avez un test en Python, funkload peut l'exécuter sur de nombreux threads, en surveillant les temps de réponse et en résumant pour vous à la fin du test.


Answer #2

Test 1 : Connecter et déconnecter des clients comme des fous, pour voir comment vous gérez l'init et la fin des sessions, et combien votre serveur survivra sous les pics, tout en mesurant le nombre de clients qui ne parviennent pas à se connecter. C'est très important

Test 2 : Connectez les clients et gardez-les connectés pendant une semaine, en faisant des actions aléatoires (FuzzTest) . Planifiez l'aller-retour de chaque action. Gardez également un registre de l'ordre des actions, car de cette façon vos "clients" trouveront des failles dans vos usecases (très important, et très difficile à tester rationnellement).

Test 3 et 4 : déterminez les principaux cas d'utilisation de votre système et rédigez des scripts qui exécutent ces tâches. Ensuite, exécutez plusieurs clients effectuant la même tâche (test 3), ainsi que plusieurs clients effectuant des tâches différentes (test 4).

Série: Maintenant, l'autre dimension dont vous avez besoin ici est le nombre de clients. Une belle série serait: 5,10,50,100,500,1000,5000,10000, ...

De cette façon, vous pouvez obtenir des données pour chaque série de tests avec différentes charges de travail.

Félicitations aussi sur SWIG à vos clients api à Python! C'est un excellent moyen de préparer les choses.

Remarque: IBM dispose d'un exemple de test de fuzz sur Java , ce qui n'est pas conforme à votre cas, mais qui vous aidera à concevoir un bon fuzztest pour votre système.


Answer #3

Sur une note connexe: Twitter récemment OpenSourced leur cadre de test de charge . Cela pourrait valoir le coup :)





stress-testing