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

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.

You might also like...
:game_die: Pytest plugin to randomly order tests and control random.seed

pytest-randomly Pytest plugin to randomly order tests and control random.seed. Features All of these features are on by default but can be disabled wi

Selects tests affected by changed files. Continous test runner when used with pytest-watch.

This is a pytest plug-in which automatically selects and re-executes only tests affected by recent changes. How is this possible in dynamic language l

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

To automate the generation and validation tests of COSE/CBOR Codes and it's base45/2D Code representations

To automate the generation and validation tests of COSE/CBOR Codes and it's base45/2D Code representations, a lot of data has to be collected to ensure the variance of the tests. This respository was established to collect a lot of different test data and related test cases of different member states in a standardized manner. Each member state can generate a folder in this section.

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

Django-google-optimize is a Django application designed to make running server side Google Optimize A/B tests easy.

Django-google-optimize Django-google-optimize is a Django application designed to make running Google Optimize A/B tests easy. Here is a tutorial on t

Run ISP speed tests and save results
Run ISP speed tests and save results

SpeedMon Automatically run periodic internet speed tests and save results to a variety of storage backends. Supported Backends InfluxDB v1 InfluxDB v2

Given some test cases, this program automatically queries the oracle and tests your Cshanty compiler!

The Diviner A complement to The Oracle for compilers class. Given some test cases, this program automatically queries the oracle and tests your compil

Statistical tests for the sequential locality of graphs

Statistical tests for the sequential locality of graphs You can assess the statistical significance of the sequential locality of an adjacency matrix

Owner
Viktor Bem
Viktor Bem
A library to make concurrent selenium tests that automatically download and setup webdrivers

AutoParaSelenium A library to make parallel selenium tests that automatically download and setup webdrivers Usage Installation pip install autoparasel

Ronak Badhe 8 Mar 13, 2022
LuluTest is a Python framework for creating automated browser tests.

LuluTest LuluTest is an open source browser automation framework using Python and Selenium. It is relatively lightweight in that it mostly provides wr

Erik Whiting 14 Sep 26, 2022
User-oriented Web UI browser tests in Python

Selene - User-oriented Web UI browser tests in Python (Selenide port) Main features: User-oriented API for Selenium Webdriver (code like speak common

Iakiv Kramarenko 575 Jan 2, 2023
A small faсade for the standard python mocker library to make it user-friendly

unittest-mocker Inspired by the pytest-mock, but written from scratch for using with unittest and convenient tool - patch_class Installation pip insta

Vertliba V.V. 6 Jun 10, 2022
Minimal example of how to use pytest with automated 'devops' style automated test runs

Pytest python example with automated testing This is a minimal viable example of pytest with an automated run of tests for every push/merge into the m

Karma Computing 2 Jan 2, 2022
Let your Python tests travel through time

FreezeGun: Let your Python tests travel through time FreezeGun is a library that allows your Python tests to travel through time by mocking the dateti

Steve Pulec 3.5k Dec 29, 2022
Data-Driven Tests for Python Unittest

DDT (Data-Driven Tests) allows you to multiply one test case by running it with different test data, and make it appear as multiple test cases. Instal

null 424 Nov 28, 2022
Selenium-python but lighter: Helium is the best Python library for web automation.

Selenium-python but lighter: Helium Selenium-python is great for web automation. Helium makes it easier to use. For example: Under the hood, Helium fo

Michael Herrmann 3.2k Dec 31, 2022
The pytest framework makes it easy to write small tests, yet scales to support complex functional testing

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries. An example o

pytest-dev 9.6k Jan 2, 2023
a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)

pytest-sugar pytest-sugar is a plugin for pytest that shows failures and errors instantly and shows a progress bar. Requirements You will need the fol

Teemu 963 Dec 28, 2022