The load test results repository is out of space

by lgmorand 5. septembre 2010 01:25

Si jamais vous avez l’habitude de mettre en place une plateforme de test de charge et que vous avez industrialisé ces tests pour les faire tourner à chaque nouvelle version d’une application, vous êtes peut-être déjà tombé sur l’erreur indiquant que la base de données stockant les résultats de test de charge est pleine: “Error occurred running test. Result collection stopped due to the following error: The load test results repository is out  of space”.

Deux solutions s’offrent alors à vous:

  • le nettoyage par le vide
  • le nettoyage sélectif

Solution 1: le nettoyage  par le vide.

Le principe n’est pas réellement de tout supprimer mais de jeter tous les résultats de campagne ayant plus de N jours. Avec cette solution, nous gagnons “rapidement” beaucoup de place dans notre base de données pour ne garder que les toutes dernières campagnes. Cette solution se fait tout simplement par l’exécution d’un script SQL que vous trouverez un peu partout sur le net (notamment sur le blog de Bill Barnett) et qui peut être personnalisé sur le nombre de jours de résultats à gagner.

 

-- This script deletes all load test run older than two weeks
-- To change the timeframe, change the number of days from 14 to the desired number

USE LoadTest
DECLARE @LoadTestRunId int
DECLARE OldLoadTestsCursor CURSOR FOR
    SELECT LoadTestRunId FROM LoadTestRun WHERE datediff(dd, StartTime, getdate()) > 14

OPEN OldLoadTestsCursor
FETCH NEXT FROM OldLoadTestsCursor INTO @LoadTestRunId

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC Prc_DeleteLoadTestRun @LoadTestRunId
    FETCH NEXT FROM OldLoadTestsCursor INTO @LoadTestRunId
END

CLOSE OldLoadTestsCursor
DEALLOCATE OldLoadTestsCursor

/!\ A noter que ce script est très lent et peut prendre plusieurs heures!

Solution 2: le nettoyage sélectif

Si la première solution permet de répondre à un gain de place, elle a pour problématique majeure de ne pas permettre de la sélection des éléments que l’on supprime. La seule chose qu’il nous faudrait c’est donc une simple IHM permettant de visualiser les résultats de campagnes et pourquoi gérer certains d’entre eux pour soit les supprimer, soit les exporter.

Et par le plus grand des hasards, c’est exactement ce que nous propose Visual Studio! Puis y accéder, ouvrez un test de charge (fichier loadtest) et à l’aide du bouton droit, choisissez Open and Manage Results dans le menu contextuel.

cleanDb2

Une fenêtre s’ouvre à vous permettant de filtrer tout d’abord par contrôleur (si vous en avez un), puis par test de charge. Ceci vous affiche alors toutes les campagnes terminées ou non, et vous permet d’agir sur chacune d’entre elles. Dans notre cas il suffit de sélectionner les campagnes à supprimer (ctrl + clic) puis de cliquer sur Remove. Comme le script plus haut, plus la campagne a enregistré d’information, plus la suppression est longue.

cleanDb1

 

Ce process est encore plus lent que la première solution mais permet réellement de ne garder que ce que l’on souhaite.

Ces deux solutions permettent de corriger de façon temporaire notre problème de place disponible mais si vous voulez exécuter des campagnes de façon pérenne et éviter que l’erreur ne se déclenche en plein de milieu de campagne (vous obligeant à recommencer de zéro), pensez à revoir le sizing de la base de données. Par défaut, Visual Studio s’installe avec SQL Express qui limite la taille des bases de données à 4Go. Envisagez-donc d’utiliser SQL Server.

Tags:

Visual Studio | Team test

Mettre une application Web en mode offline

by lgmorand 13. novembre 2009 09:19

Ca fait maintenant quelques année que je fais du .Net et ca fait surtout deux ans que je fais exclusivement des applications Web, ait passé toutes les certifs sur le sujet, lu moulte bouquins et pourtant j'apprend encore des choses.

Cette chose, je veux vous la partager car en en parlant autour de moi, j'ai vu différentes personnes, développeurs ASP.Net également, ne le sachant pas non plus. Il s'agit donc de quelque chose d'éventuellement pas assez connu.

Contexte : un client veut mettre en pause une application, le temps d'évolution. Nous souhaitons alors que toutes les pages du sites soit redirigéés vers une page indiquant "en travaux".

Solution : un seul et unique fichier htm.

En effet, depuis la version 2.0 d'ASP.Net, lorsque vous placez un fichier html contenant le texte de votre choix, nommé app_offline.htm (important le nom!) et que vous le placez à la racine de votre site Web, instantanément et sans redémarrage du site Web, toute requête de ce site est automatiquement redirigée vers cette page.

Il est également important que le fichier fasse AU MOINS 1octet. Si le fichier est vide, il ne sera pas pris en compte.

et voilà, c'est tout :)

Tags: ,

ASP.Net

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen