Selenium fargate op schaalraster 4

26 feb. 2024 | by Ralph Van Der Horst

Selenium Fargate op schaalraster 4

Selenium Fargate op grote schaal

Hallo, vandaag gaan we dieper in op de implementatie van Selenium Grid met AWS CDK en Fargate. Ik haal inspiratie uit deze AWS blogpost, ik heb dit herschreven in CDK 2 Python. Ik zal elke functie uitleggen, zodat je begrijpt hoe ze samenwerken om de infrastructuur te maken. We zullen HTTP gebruiken zoals in het oude voorbeeld. Ik heb een geavanceerde https-versie, maar er staat ook productcode in die ik gebruik voor productontwikkeling, dus helaas kan ik deze bron niet geven. Maar ik denk dat de lezer deze http-versie gemakkelijk geschaald en met https kan maken!

selenium grid learnautomated testing

Wat je nodig hebt voordat je begint

Voordat je begint, moet je ervoor zorgen dat je:

  • Een AWS-account met machtigingen om repositories te maken in ECR en afbeeldingen te verzenden.
  • Docker geïnstalleerd op uw lokale computer.
  • AWS CLI geïnstalleerd op uw lokale computer.

Stap 2: Omgevingsvariabelen instellen

Eerst moet je de omgevingsvariabelen voor het script instellen. Je kunt het script rechtstreeks wijzigen of een apart .env-bestand maken met deze variabelen:

ECR_REPO_NAME_SEL_HUB="selenium-hub"
ECR_REPO_NAME_CHROME="chrome"
ECR_REPO_NAME_FIREFOX="firefox"
AWS_REGION="eu-west-2"
AWS_ACCOUNT="your-aws-account-id"

Opmerking: Vervang AWS_ACCOUNT door uw werkelijke AWS-account-ID.

Stap 3: Het script uitvoeren

Na het instellen van de omgevingsvariabelen navigeert u naar de map die het shellscript bevat en voert u de volgende opdracht uit:

./push-to-ecr.sh

Ga naar de ECR-console in de AWS Management Console om te controleren of de afbeeldingen met succes naar ECR zijn gepusht. Je zou de nieuw aangemaakte repositories en de bijbehorende afbeeldingen moeten zien.

Conclusie

Het gebruik van een shellscript om Docker-images te maken en naar AWS ECR te pushen bespaart tijd. Door deze handleiding te volgen, kunt u moeiteloos Docker-images maken en naar ECR pushen. Hoewel dit proces kan worden geïntegreerd in elke GitLab/GitHub-pipeline, heb ik ervoor gekozen om het in dit geval handmatig uit te voeren, zowel als kostenbesparende maatregel als voor educatieve doeleinden.

Het CDK2 Python-onderdeel

In de cdk2 maken we de infra als code in python, die ook geschreven kan worden als typoscript of javascript. De essentie is dat het infra-cloudformatie genereert zoals Terraform dat doet, maar dan is het native zoals Bicep voor Azure is.

Hoe-> Hier komt het zeer technische gedeelte, ik denk dat ik al veel lezers ben kwijtgeraakt :-)

init Functie

De functie init fungeert als constructor voor de SeleniumStack-klasse. Het speelt een cruciale rol bij het initialiseren van een reeks AWS-bronnen. Deze bronnen omvatten:

  • VPC (Virtual Private Cloud): biedt een geïsoleerd virtueel netwerk, zodat u uw eigen netwerkomgeving kunt beheren.
  • Fargate Cluster: een serverloze rekenmachine voor containers.
  • ECR Repositories (Elastic Container Registry): een volledig beheerd Docker-containerregister waarmee ontwikkelaars eenvoudig Docker-containerimages kunnen opslaan, beheren en implementeren.
  • IAM-rollen: dit zijn entiteiten voor AWS Identity and Access Management (IAM) die een set machtigingen definiëren voor het indienen van AWS-serviceaanvragen. Nadat deze bronnen zijn geïnitialiseerd, gaat de functie verder met het maken van de Selenium Hub-service en node-services voor zowel Chrome- als Firefox-browsers.

create_selenium_hub_service Functie

Deze functie is bedoeld voor het creëren van de Selenium Hub Fargate-service. Dit is wat het doet:

  • Taakdefinitie: Stelt een Fargate-taakdefinitie in die de Selenium Hub-container bevat.
  • Beveiligingsgroep: stelt een beveiligingsgroep in om binnenkomende toegang mogelijk te maken.
  • Loggroep: initieert een loggroep voor logboekdoeleinden.
  • Application Load Balancer (ALB): Configureert een ALB, dat een gezondheidscontrole uitvoert en de communicatie via HTTP vergemakkelijkt.

create_selenium_node_service Functie

Met deze functie wordt een Selenium Node Fargate-service gemaakt, specifiek voor een bepaalde browser, ofwel Chrome of Firefox. De volgende stappen zijn:

  • Taakdefinitie: Creëert een taakdefinitie met de relevante browsercontainer.
  • Omgevingsvariabelen: Configureert omgevingsvariabelen die essentieel zijn om verbinding te maken met de Selenium Hub.
  • Loggroep en beveiligingsgroep: Net als bij de hub-service wordt een loggroep ingesteld voor logboekregistratie en een beveiligingsgroep voor inkomende toegang.
  • Fargate-serviceregistratie: Ten slotte creëert de functie de Fargate-service en registreert deze bij het ECS-cluster en de Cloud Map voor servicedetectie.

add_autoscaling_policy Functie

Deze functie is belast met het vaststellen van een beleid voor automatische schaling voor een bepaalde Fargate-service. De automatische schaling is geconfigureerd op basis van:

  • CPU- en geheugengebruik: de service schaalt omhoog of omlaag, aangepast aan de belasting.
  • Doelgebruikspercentages en afkoelingsperioden: deze parameters zijn gespecificeerd om de schaalactiviteiten efficiënt te beheren. In wezen zorgt deze functie ervoor dat de service zich aanpast aan de verschillende belastingen door de schaal aan te passen op basis van het gebruik van bronnen en gespecificeerde parameters.

AWS-cloudkaart

Om met elkaar te kunnen communiceren (hub, nodes, etc.) moet je gebruik maken van cloudmap

AWS Cloud Map is een service voor het ontdekken van cloudbronnen waarmee u aangepaste namen voor uw toepassingsbronnen kunt definiëren en waarmee de veranderende locaties van deze dynamisch veranderende bronnen worden bijgehouden. Deze service vereenvoudigt het beheer van servicedetectie en helpt de gezondheid van de bronnen te behouden door toepassingen in staat te stellen services te ontdekken op basis van aangepaste namen en kenmerken.

de code is te vinden in de repo:

https://github.com/learnautomatedtesting/cdk2seleniumpython

een

by Ralph Van Der Horst

arrow right
back to blog

share this article

Relevant articles

Afbeeldingen en tekst testen in pdf via python met CI/CD github-acties

29 mei 2024

Afbeeldingen en tekst testen in pdf via python met CI/CD github-acties

Chat GPT en Testdatacreatie

19 mrt. 2024

Chat GPT en Testdatacreatie

Chat met GPT en Testdata Creation

19 mrt. 2024

Chat met GPT en Testdata Creation