AWS Lambda를 통해 Selenium을 실행하는 API 생성

자동화 테스터이기 때문에 제 임무는 모든 것을 자동화하는 것입니다. 터미널을 통해 테스트 스크립트를 실행하면서 내가 만든 스크립트를 실행할 수 있는 사람은 나뿐이라는 것을 깨달았습니다. 누군가 그것을 실행하고 싶다면? 개발자, 프로젝트 관리자 등. 내 저장소를 복제하고 라이브러리를 설치하고 스크립트를 실행하는 것은 지루한 작업이 될 것입니다. 그래서 서버리스 시스템에 테스트 스크립트를 저장하고 API 요청을 통해 액세스할 수 있도록 할 수 있다고 결정했습니다.

자체 Lambda 함수 생성, API 게이트웨이 기능 확인, Codepipeline 등 다양한 AWS 리소스를 실험했습니다. 몇 번의 시도 끝에 마침내 내 스크립트를 내부에서 실행할 수 있었습니다. 그런 다음 API를 통해 내 람다에 액세스하는 방법을 조사했습니다.

이것은 더 높은 생산성과 시간 절약으로 이어질 것입니다. 자동화된 테스트에는 인간의 상호 작용이 필요하지 않기 때문에 엔지니어는 중요한 작업에 집중할 수 있습니다. 이것은 누구나 실행할 수 있는 휴대용 테스트 장치와 같습니다. 빠른 테스트 실행을 통해 개발자는 즉시 테스트 보고서를 받을 수 있으므로 오류가 발생할 때마다 신속하게 대응합니다. 테스트 자동화를 통해 프로그램을 신속하게 업데이트하는 것이 더 쉬워집니다. 결과적으로 자동화된 테스트는 팀 응답성 향상, 사용자 경험 개선 및 고객 만족도 향상으로 이어집니다.

개요


  • 셀레늄 및 chromedriver 라이브러리가 있는 2개의 Lambda 계층 생성
  • 생성된 lambda 레이어를 lambda의 serverless.yml에 포함시킨 후 배포합니다
  • .

    Selenium Lambda 계층 생성



    라이브러리를 python/lib/python3.6/site-packages/에 배치하여 레이어에 포함합니다.

    Selenium을 레이어 디렉토리에 다운로드

    pip3.6 install -t selenium/python/lib/python3.6/site-packages selenium==3.8.0
    cd selenium
    zip -r python.zip python/
    


    완료되면 람다 레이어를 생성한 후 zip 파일을 업로드합니다.

    1. AWS 콘솔 Lambda/계층으로 이동합니다.
    2. 레이어 만들기를 클릭합니다.
    3. 레이어 구성에 다음을 입력합니다.

    Name: selenium
    Description: Selenium layer
    Upload zip file created: python.zip
    Compatible runtimes: Python 3.6
    




    4. 만들기를 클릭합니다.

    참고: 원하는 버전을 사용할 수 있습니다. 패키지를 업로드할 때 호환되는 런타임을 선택하기만 하면 됩니다.

    Chromedriver Lambda 레이어 생성



    Chrome 드라이버 다운로드

    mkdir -p chromedriver
    cd chromedriver
    curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
    unzip chromedriver.zip
    rm chromedriver.zip
    


    Chrome 바이너리 다운로드

    curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-41/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
    unzip headless-chromium.zip
    rm headless-chromium.zip
    


    압축 드라이버 및 바이너리

    ls
    chromedriver headless-chromium
    zip -r chromedriver.zip chromedriver headless-chromium
    


    완료되면 람다 레이어를 생성한 후 zip 파일을 업로드합니다.

    1. AWS 콘솔 Lambda/계층으로 이동합니다.
    2. 레이어 만들기를 클릭합니다.
    3. 레이어 구성에 다음을 입력합니다.

    Name: chromedriver
    Description: chrome driver and binary layer
    Upload zip file created: chromedriver.zip
    Compatible runtimes: Python 3.6
    




    4. 만들기를 클릭합니다.

    Lambda 함수 생성



    함수 코드가 계층에 포함된 라이브러리에 액세스할 수 있도록 Lambda 런타임에는 '/opt' 디렉터리에 경로가 포함됩니다.

    파일 구조




    ── /lambda/            # lambda function
      ├── /handler.py      # source code of lambda function 
      └── /serverless.yaml # serverless config
    


    암호



    아래 코드를 /lambda/handler.py에 복사합니다.

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    def main(event, context):
        options = Options()
        options.binary_location = '/opt/headless-chromium'
        options.add_argument('--headless')
        options.add_argument('--no-sandbox')
        options.add_argument('--single-process')
        options.add_argument('--disable-dev-shm-usage')
    
        driver = webdriver.Chrome('/opt/chromedriver',chrome_options=options)
        driver.get('https://www.google.com/')
    
        driver.close();
        driver.quit();
    
        response = {
            "statusCode": 200,
            "body": "Selenium Headless Chrome Initialized"
        }
    
        return response
    


    아래 코드를 /lambda/serverless.yaml에 복사합니다.

    service: selenium-lambda
    
    provider:
      name: aws
      runtime: python3.6
      region: ap-southeast-2
      timeout: 900
    
    functions:
      main:
        memorySize: 1000
        handler: handler.main
        events:
          - http:
              path: test
              method: get
    
        layers:
          - arn:aws:lambda:ap-southeast-2:{}:layer:chromedriver:2
          - arn:aws:lambda:ap-southeast-2:{}:layer:selenium:2
    
    resources:
      Resources:
        ApiGatewayRestApi:
          Properties:
            BinaryMediaTypes:
              - "*/*"
    


    Lambda 함수 배포


    /lambda 디렉토리로 이동

    $ sls deploy
    


    산출




    Serverless: Stack update finished...
    Service Information
    service: selenium-lambda
    stage: dev
    region: ap-southeast-2
    stack: selenium-lambda-dev
    api keys:
      None
    endpoints:
      GET - https://{name}.execute-api.ap-southeast-2.amazonaws.com/dev/test
    functions:
      main: selenium-lambda-dev-main
    




    API에 액세스할 때 아래와 같은 응답을 받아야 합니다.

    {
    "statusCode": 200,
    "body": "Selenium Headless Chrome Initialized"
    }
    


    이 배포는 자동으로 Cloudformation 스택과 s3 버킷을 생성합니다.





    이메일: [email protected]

    좋은 웹페이지 즐겨찾기