CircleCI Background Process

Reading time ~2 minutes

python으로 Simple Http Server를 띄우고 selenium으로 web page title을 확인해보는 간단한 테스트 코드를 CircleCi에 올렸다. 서버를 background로 실행시키도록 스크립트 명령에 &를 붙여서 사용해봤더니 title이 Problem loading page를 반환해서 테스트에 실패했다. 문제의 원인은 circle.yml에서 &를 사용할 수 없기 때문이었다. background: true 을 사용하면 해결된다. 원인을 파악하는데 시간이 꽤 오래 걸렸었는데 알고보니 circleci docs에 맨 첫줄에 답이 나와있었다. docs를 처음부터 잘 읽어봐야겠다는 필요성을 다시 한 번 느꼈다.


문제 발생 코드

simple-test.py

selenium으로 web browser를 띄우고 http://localhost:8000으로 접속해 title을 확인하는 테스트 코드이다.

simple-test.py

from selenium import webdriver

def test_selenium():
    driver = webdriver.Firefox()
    driver.get("http://localhost:8000")

    assert driver.title == 'Directory listing for /'
    driver.close()


circle.yml

CircleCI의 환경을 설정하는 파일로 테스트 코드를 실행하기 전에 simple 서버를 백그라운드로 띄우고자 python -m http.server 8000 명령에 &를 붙여보았다.

circle.yml

[...]

test:
  pre:
    - python -m http.server 8000 &
  override:
    - pytest selenium-browser.py


Build Result

http://localhost:8000 요청을 했을 때 title 값이 원하는 값이 반환 되지 않고 Problem loading page라는 값을 반환해서 테스트에 실패한다.

Build Result


해결 방법

CircleCI Background docs 에 보면 circle.yml 을 통해서 background process 설정이 가능하다고 한다. 하지만 command line 마지막에 & 를 붙여서 background를 사용할 수는 없다고 나와있다.

Build Result

아래는 이 방법을 적용하여 circle.yml 을 수정한 결과이다.

circle.yml

[...]

test:
  pre:
    - python -m http.server 8000:
      background: true
  override:
    - pytest selenium-browser.py

수정한 결과를 push 했더니 Build가 성공했다.

CircleCI 에서 python 3.6.0 이용하기

python 최신 버전인 3.6.0 을 사용하여 CircleCI를 붙여봤는데 오류가 발생했다. 3.6.0이 최신 버전이기 때문에 CircleCI에서 아직 지원을 안 하는듯하다. 해결방법은 CircleCI 원격 컴퓨터의 .pyenv reposi...… Continue reading