From b04281fecd1aa430c1210f216baa4c91c01991b4 Mon Sep 17 00:00:00 2001 From: Ritwik G Date: Fri, 31 Jan 2025 15:33:41 +0530 Subject: [PATCH] Initial e2e test setup --- .github/workflows/ci-test.yaml | 8 ++++++++ tests/e2e/requirements.txt | 5 +++++ tests/e2e/test_login.py | 34 ++++++++++++++++++++++++++++++++++ tox.ini | 14 +++++++++++++- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/requirements.txt create mode 100644 tests/e2e/test_login.py diff --git a/.github/workflows/ci-test.yaml b/.github/workflows/ci-test.yaml index 06ce1aa10..3ed3948ff 100644 --- a/.github/workflows/ci-test.yaml +++ b/.github/workflows/ci-test.yaml @@ -45,6 +45,13 @@ jobs: recreate: true path: runner-report.md + - name: Render the e2e report to the PR + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: e2e-test-report + recreate: true + path: e2e-report.md + - name: Output reports to the job summary when tests fail shell: bash run: | @@ -52,6 +59,7 @@ jobs: echo "
Runner Test Report" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY cat "runner-report.md" >> $GITHUB_STEP_SUMMARY + cat "e2e-report.md" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "
" >> $GITHUB_STEP_SUMMARY fi diff --git a/tests/e2e/requirements.txt b/tests/e2e/requirements.txt new file mode 100644 index 000000000..4d219ea4d --- /dev/null +++ b/tests/e2e/requirements.txt @@ -0,0 +1,5 @@ +pytest~=8.0 +pytest-mock~=3.0 +pytest-cov~=6.0 +pytest-md-report~=0.6.0 +selenium~=4.28 diff --git a/tests/e2e/test_login.py b/tests/e2e/test_login.py new file mode 100644 index 000000000..2a91fc573 --- /dev/null +++ b/tests/e2e/test_login.py @@ -0,0 +1,34 @@ +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.common.by import By + + +class TestLogin: + def setup_method(self, method): + options = Options() + options.add_argument("--headless=new") + self.driver = webdriver.Chrome(options=options) + + def teardown_method(self, method): + self.driver.quit() + + def test_login(self): + self.driver.get("http://frontend.unstract.localhost") + self.driver.implicitly_wait(0.5) + self.driver.set_window_size(960, 615) + # 3 | click | css=span | + self.driver.find_element(By.CSS_SELECTOR, "span").click() + # 4 | click | id=username | + self.driver.find_element(By.ID, "username").click() + # 5 | type | id=username | unstract + self.driver.find_element(By.ID, "username").send_keys("unstract") + # 6 | type | id=password | unstract + self.driver.find_element(By.ID, "password").send_keys("unstract") + # 7 | click | css=input:nth-child(11) | + self.driver.find_element(By.CSS_SELECTOR, "input:nth-child(11)").click() + WebDriverWait(self.driver, timeout=5).until( + lambda _: self.driver.current_url.endswith("/mock_org/onboard"), + "Login failed." + ) + self.driver.close() diff --git a/tox.ini b/tox.ini index 196cf0602..a31c99098 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -env_list = py{39,310,311}, runner +env_list = py{39,310,311}, runner, e2e # [testenv] # skip_install = true @@ -17,3 +17,15 @@ commands_pre = sh -c '[ -f cloud_requirements.txt ] && pip install -r cloud_requirements.txt || echo "cloud_requirements.txt not found"' commands = pytest -v --md-report-verbose=1 --md-report --md-report-flavor gfm --md-report-output ../runner-report.md + +[testenv:e2e] +deps = pip +allowlist_externals= + sh +commands_pre = + pip install -r tests/e2e/requirements.txt + ./run-platform.sh -b + sleep 30 + docker compose -f docker/docker-compose.yaml ps -a +commands = + pytest -v --md-report-verbose=1 --md-report --md-report-flavor gfm --md-report-output ../e2e-report.md tests/e2e/