Een testsuite draaien met meer dan een miljoen testgevallen

We hebben een gedistribueerde testomgeving waarbij de robotremoteserver een aantal andere applicaties start en ermee werkt als onderdeel van de test. Voor de test die ik probeer uit te voeren, moet ik meer dan een miljoen testgevallen in één suite uitvoeren. Het probleem hier is dat wanneer de pybot begint te draaien, het 8 GB RAM blokkeert en trage prestaties tot gevolg heeft. Na een tijdje bevriest het.

Om dit probleem op te lossen was ik van plan om aparte suites te maken met elk minder dan 100 cases. Maar in dit geval kan ik de trefwoorden van de andere remoteservers die vanuit andere suites zijn gestart niet gebruiken. De enige manier waarop ik het kan gebruiken, is door de verbinding met de externe server te verbreken en opnieuw te verbinden in elke suite – wat het doel van de test teniet zou doen.

Ik weet niet zeker of iemand dit scenario is tegengekomen. Ik zou het op prijs stellen als iemand een oplossing voor dit probleem kan bedenken.

Aanvullende informatie

Nog iets dat helpt om dit op te lossen: is het mogelijk om een ​​trefwoord uit een bibliotheek (met status) aan te roepen die door een andere suite is gestart?

Kan ik bibliotheekinstantie ophalengebruiken wanneer ik RIDE gebruik? Ik importeer de bibliotheek in de ene suite en probeer vervolgens de bibliotheekinstantie in een andere suite te krijgen. Is dit mogelijk?

Ik krijg steeds de volgende foutmelding:

AttributeError: externe instantie heeft geen kenmerk ‘replace’

In Suite 1 doe ik dit:

Import Library    Remote    ${verifix_xmlrpc_url}    WITH NAME    Verifix
${lib}=    BuiltIn.Get Library Instance    Verifix
Set Global Variable    ${lib}

In Suite 2:

${lib}.remove messages    ${VenueNSDQ}

Antwoord 1, autoriteit 100%

Ik weet geen details over Python, maar je zou kunnen proberen om elke testcase als een afzonderlijk proces te starten. Hierdoor kunt u het geheugen van elk proces herstellen zodra het is voltooid, en kunt u mogelijk uw miljoen testgevallen veilig op één machine uitvoeren.

Over het algemeen, wanneer een programma meer geheugen nodig heeft van het besturingssysteem, neemt het dit, maar het kan het niet teruggeven totdat het wordt afgesloten. Dit is waarschijnlijk de reden waarom je proces omvalt.

Snelle processen die je kunt starten en vervolgens doden, zullen dit geheugenprobleem verlichten…. en dan is het een vrij korte stap om elk van deze testgevallen door rsh te laten lopen op een geheel andere machine.

Ik hoop dat dat een beetje helpt.


Antwoord 2

Oké. Ten eerste programmeer ik niet in Python, en ik heb ook geen idee wat voor soort computers je gebruikt of hoeveel geheugen de computer heeft of iets anders over jouw situatie met je computer(s). Dit is dus slechts algemene informatie die is verkregen door het schrijven van systeemprogramma’s en het werken op meerdere computers.

Dat gezegd hebbende: als je enorme datasets of een enorm aantal programma’s gaat draaien, moet je wat je wilt doen partitioneren, zodat het past in het systeem of de systemen die je gebruikt. Dat is het eerste deel.

Het tweede deel is dat als je via programma’s met andere programma’s of systemen wilt praten, je een soort algemeen geheugengebruik moet instellen. Ik weet dat PHP zoiets heeft ingebouwd, dus ik moet aannemen dat Python ook zoiets heeft. Je stelt het gemeenschappelijke geheugengebied in en stuurt vervolgens informatie heen en weer tussen de verschillende programma’s. Meestal wordt een of andere vorm van tokens gebruikt om elk programma en/of systeem te identificeren. Op deze manier kunt u dingen zo instellen dat zodra een reeks tests is voltooid, deze de volgende reeks kan laten beginnen en zo uw systeem niet overneemt of vastloopt.

Als je echt goed bent, kun je ook een soort controllerprogramma maken dat een test start, deze bekijkt tot de test eindigt/beëindigt, en dan de volgende test start. (Dus in plaats van een daisy chain-manier om dit te doen, heb je een master/slave-manier om dit te doen, net als een client/server-relatie.)

Als u een Windows-box / OS gebruikt, zou ik voorstellen om naar AutoIt te kijken. AutoIt kan gemakkelijk omgaan met het bekijken van een programma-uitvoer en het opstarten van een nieuwe taak zodra een oude taak is voltooid. Het biedt ook u volledige controle over zowel uw systeem als het externe systeem en is ontwikkeld om te helpen bij het automatiseren van taken zoals degene die u probeert te doen. Ik vond (door te experimenteren) dat AutoIt ook kan worden gebruikt met Unix / Linux-dozen zoals Macs en anderen. Hoewel u alleen de opdrachten hebt die u verzendt in plaats van toegang tot de Windows-functies.

Als u bekwaam bent met Python dat u het bovenstaande kunt doen met behulp van het – dan meer vermogen aan u. Ook al was het twee jaar geleden dat je dit hebt gevraagd – ik hoop dat dit je helpt bij je inspanningen. : -)

Other episodes