Automated tests for OKAY websites in Python (Selenium) - user friendly version

Related tags

Testingokay-tests-v2
Overview

Okay Selenium Testy

Aplikace určená k testování produkčních webů společnosti OKAY s.r.o.


Závislosti

K běhu aplikace je potřeba mít v počítači nainstalovaný Python 3.8 a vyšší. Také je potřeba splnit závislosti definované v souboru requirements.txt. Testy běží v prohlížeči Google Chrome, je tedy potřeba mít nainstalovaný nejen tento prohlížeč, ale také aplikaci Chromedriver - dostupná zde.


Instalace

Aplikaci stáhněte z tohoto repozitáře, případně vytvořte kopii repozitáře na svém počítači / serveru. Před prvním spuštěním je potřeba nainstalovat potřebné balíčky:

pip install -r requirements.txt

Následně je potřeba vytvořit kopii souboru config_sample.json a změnit nastavení.

cp config_sample.json config.json
{
    "defaults": {
        "delay": 10,            // čas mezi úkony (sec)
        "is_headless": 0,       // render v paměti (bool)
        "is_email": 0,          // notifikace email (bool)
        "is_slack": 0,          // notifikace slack (bool)
    },
    "secrets": {
        "mail_to": "",          // mail pro notifikaci
        "mail_from": "",        // google mail pro odesílání
        "mail_password": "",    // heslo k tomuto mailu
        "slack_token": "",      // API token do slacku
        "slack_channel": ""     // ID kanálu ve slacku
    }
}

Pokud chcete testy spouštět automaticky, je potřeba nastavit CRON.


Jak psát testy

Pro testování jsou k dispozici dvě třídy, a sice OkayTest a JenaTest - zvolte si tu, která odpovídá testované stránce. Testy píšete v Pythonu pomocí jednoduchých metod.

Příklad:

from okay_tests import OkayTest

test = OkayTest(name="okaysk_menu")
test.open_url(url="https://www.okay.sk/")
test.open_random_menu_items(3)
test.open_random_footer_items(3)
test.abort()

Při inicializaci testu je možno použít několik volitelných argumentů, které mohou změnit chování testu. Zde jsou nejdůležitější z nich:

test = OkayTest(
    name="okaysk_menu",     # vlastní název testu
    theme="120943050794",   # ID šablony v Shopify
    is_mobile=True,         # aktivuje emulátor mobilu
    delay=5                 # změní výchozí čas mezi úkony
)

Použitelné metody (abecedně)

Všechny níže uvedené metody jsou použitelné jak pro třídu OkayTest i JenaTest.


abort

Zavře prohlížeč a ukončí probíhající test.

Příklad:

test.abort()

add_to_cart

Přidá aktuální produkt do košíku. Aby metoda fungovala, musí se test zrovna nacházet na detailu nějakého produktu.

Příklad:

test.add_to_cart()

check_services

Pokusí se zaškrtnout nábytkové služby v košíku a následně vytvoří printscreen košíku. Je potřeba definovat služby jako list (pole) obsahující variant ID těchto služeb.

Příklad:

test.check_services(services=["40968686796951", "40968686829719"])
test.check_services(services=["40968686928023"])

Argument services je povinný.


choose_delivery

Zvolí druh dopravy definovaný argumentem delivery. Je potřeba, aby se test zrovna nacházel ve fázi volby dopravy.

Příklad:

test.choose_delivery(delivery='na moju adresu', proceed=True)

Argument delivery je povinný a musí odpovídat způsobu dopravy na daném webu. Argument proceed je nepovinný a pokud jej nastavíte True, bude test pokračovat k volbě platby (výchozí hodnota je False).


choose_payment

Zvolí druh platby definovaný argumentem payment. Je potřeba, aby se test zrovna nacházel ve fázi volby platby.

Příklad:

test.choose_payment(payment='na moju adresu', proceed=True)

Argument payment je povinný a musí odpovídat způsobu platby na daném webu. Argument proceed je nepovinný a pokud jej nastavíte True, bude test pokračovat a dokončí objednávku (výchozí hodnota je False).


confirm_order

Slouží k ověření, zda byla objednávka úspěšně dokončena. Ověření proběhne tím, že se test pokusí kliknout na prvek na thank-you stránce.

Příklad:

test.confirm_order()

empty_cart

Otevře aktuální košík a smaže všechny položky v něm. Tato metoda nevyvolá žádnou chybu v případě, kdy bude košík prázdný.

Příklad:

test.empty_cart()

goto_checkout

Pokračovat z košíku do checkoutu. Pokud se zrovna nenacházíte v košíku, tato metoda jej otevře za vás. Zároveň vyplní všechny potřebné zákaznické detaily (pokud jsou potřeba) a pokračuje k volbě dopravy.

Příklad:

test.goto_checkout()

handle_gopay

Projde platební bránou gopay až po zadání čísla karty a potom se vrátí zpět do eshopu, čímž stornuje objednávku.

Příklad:

test.handle_gopay()

log_results

Za vstup vezme list (pole), které se skládá z libovolného počtu dictionary a uloží je jako výstup do souboru.

Příklad:

test.log_results(
    name='(2) Do 50 kg', 
    url='https://www.okay.sk/collections/mikrovlnne-rury-a-mini-rury',
    logs=[
        {'Zásielkovňa': '1,00 €', 'Doručiť na moju adresu': '2,00& €'},
        {'Bankový prevod': '-', 'Dobierka': '0 €', 'Platba na výdajni': '-'}
    ]
)

Všechny argumenty, tedy name, url a logs jsou povinné.


new_test

Tuto metodu je vhodné používat ve všech for a while smyčkách na začátku každé iterace. Nastaví výchozí hodnoty testu během jednotlivých iterací, vyčistí cache a cookies.

Příklad:

test.new_test()

open_product

Najde na stránce první nejprodávanější produkt skladem. Pokud takový produkt neexistuje, vybere první produkt v kolekci při aktuálním řazení.

Příklad:

test.open_product()

open_random_menu_items

Vezme seznam všech položek v hlavním menu, náhodně klikne na tolik, kolik je definováno argumentem items a pořídí printscreeny.

Příklad:

test.click_random_mainmenu_items(items=3)

Argument items je povinný.


open_random_footer_items

Vezme seznam všech položek v patičkovém menu, náhodně klikne na tolik, kolik je definováno argumentem items a pořídí printscreeny.

Příklad:

test.click_random_footer_items(items=3)

Argument items je povinný.


open_specific_menu_item

Otevře položku v hlavním menu, která odpovídá řetězci zadanému argumentem text.

Příklad:

test.click_specific_mainmenu_item(text='Televízory')

Argument text je povinný.


open_url

Otevře webovou stránku definovanou argumentem url.

Příklad"

test.open_url(url='https://www.okay.sk/')

Argument url je povinný.


parse_delivery

Vyčte seznam všech způsobů dopravy a vrátí jej jako dictionary.

Příklad:

delivery = test.parse_delivery()

parse_payment

Vyčte seznam všech platebních metod a vrátí jej jako dictionary.

Příklad:

payment = test.parse_payment()

search_for

Vyhledá frázi definovanou argumentem text.

Příklad:

test.search_for(text='mobilný telefón')

Argument text je povinný.


set_filter

Nastaví filtr v kolekci podle jeho jména name a hodnoty value.

Příklad:

test.set_filter(name='výrobcovia', value='lg')

Oba argumenty jsou povinné.


Poznámky

Každá metoda, kterou můžete v testu použít, má navíc možnost zadání argumentu screenshots. Pokud je tento argument nastaven False, v průběhu této metody nebudou pořízeny žádné printscreeny (výchozí hodnota je True).

Příklad:

test.click_random_mainmenu_items(items=3, screenshots=False)

Další příklady

Součástí repozitáře jsou také spubory okaysk__samples.py a jena__samples.py, které obsahují základní baterii testů. Můžete jej použít jako referenční příklady při psaní vlastních testů.


(C) 2021 OKAY s.r.o.

Owner
Viktor Bem
Viktor Bem
🎓 Stepik Academy Автоматизация тестирования на Python

🎓 Stepik Academy Автоматизация тестирования на Python Запуск тестов выполняется в командной строке: pytest -v --tb=line --language=en --alluredir=all

Sergey 1 Dec 03, 2021
Akulaku Create NewProduct Automation using Selenium Python

Akulaku-Create-NewProduct-Automation Akulaku Create NewProduct Automation using Selenium Python Usage: 1. Install Python 3.9 2. Open CMD on Bot Folde

Rahul Joshua Damanik 1 Nov 22, 2021
Ward is a modern test framework for Python with a focus on productivity and readability.

Ward is a modern test framework for Python with a focus on productivity and readability.

Darren Burns 1k Dec 31, 2022
Mock smart contracts for writing Ethereum test suites

Mock smart contracts for writing Ethereum test suites This package contains comm

Trading Strategy 222 Jan 04, 2023
Connexion-faker - Auto-generate mocks from your Connexion API using OpenAPI

Connexion Faker Get Started Install With poetry: poetry add connexion-faker # a

Erle Carrara 6 Dec 19, 2022
A library for generating fake data and populating database tables.

Knockoff Factory A library for generating mock data and creating database fixtures that can be used for unit testing. Table of content Installation Ch

Nike Inc. 30 Sep 23, 2022
Python Webscraping using Selenium

Web Scraping with Python and Selenium The code shows how to do web scraping using Python and Selenium. We use as data the https://sbot.org.br/localize

Luís Miguel Massih Pereira 1 Dec 01, 2021
Webscreener is a tool for mass web domains pentesting.

Webscreener is a tool for mass web domains pentesting. It is used to take snapshots for domains that is generated by a tool like knockpy or Sublist3r. It cuts out most of the pentesting time by scree

Seekurity 3 Jun 07, 2021
Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur.

Python dilinin Selenium kütüphanesini kullanarak; Amazon, LinkedIn ve ÇiçekSepeti üzerinde test işlemleri yaptığımız bir case study reposudur. LinkedI

Furkan Gulsen 8 Nov 01, 2022
Descriptor Vector Exchange

Descriptor Vector Exchange This repo provides code for learning dense landmarks without supervision. Our approach is described in the ICCV 2019 paper

James Thewlis 74 Nov 29, 2022
PENBUD is penetration testing buddy which helps you in penetration testing by making various important tools interactive.

penbud - Penetration Tester Buddy PENBUD is penetration testing buddy which helps you in penetration testing by making various important tools interac

Himanshu Shukla 15 Feb 01, 2022
Python Projects - Few Python projects with Testing using Pytest

Python_Projects Few Python projects : Fast_API_Docker_PyTest- Just a simple auto

Tal Mogendorff 1 Jan 22, 2022
1st Solution to QQ Browser 2021 AIAC Track 2

1st Solution to QQ Browser 2021 AIAC Track 2 This repository is the winning solution to QQ Browser 2021 AI Algorithm Competition Track 2 Automated Hyp

DAIR Lab 24 Sep 10, 2022
Pytest modified env

Pytest plugin to fail a test if it leaves modified os.environ afterwards.

wemake.services 7 Sep 11, 2022
Compiles python selenium script to be a Window's executable

Problem Statement Setting up a Python project can be frustrating for non-developers. From downloading the right version of python, setting up virtual

Jerry Ng 8 Jan 09, 2023
Docker-based integration tests

Docker-based integration tests Description Simple pytest fixtures that help you write integration tests with Docker and docker-compose. Specify all ne

Avast 326 Dec 27, 2022
Show surprise when tests are passing

pytest-pikachu pytest-pikachu prints ascii art of Surprised Pikachu when all tests pass. Installation $ pip install pytest-pikachu Usage Pass the --p

Charlie Hornsby 13 Apr 15, 2022
Parameterized testing with any Python test framework

Parameterized testing with any Python test framework Parameterized testing in Python sucks. parameterized fixes that. For everything. Parameterized te

David Wolever 714 Dec 21, 2022
Python Testing Crawler 🐍 🩺 🕷️ A crawler for automated functional testing of a web application

Python Testing Crawler 🐍 🩺 🕷️ A crawler for automated functional testing of a web application Crawling a server-side-rendered web application is a

70 Aug 07, 2022
Python program that uses pynput to simulate key presses. Probably only works on Windows.

AutoKey Python program that uses pynput to simulate key presses. Probably only works on Windows. Can be used for pretty much whatever you want except

2 Oct 28, 2022