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
Pytest modified env

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

wemake.services 7 Sep 11, 2022
Nokia SR OS automation

Nokia SR OS automation Nokia is one of the biggest vendors of the telecommunication equipment, which is very popular in the Service Provider segment.

Karneliuk.com 7 Jul 23, 2022
Fi - A simple Python 3.9+ command-line application for managing Fidelity portfolios

fi fi is a simple Python 3.9+ command-line application for managing Fidelity por

Darik Harter 2 Feb 26, 2022
Django test runner using nose

django-nose django-nose provides all the goodness of nose in your Django tests, like: Testing just your apps by default, not all the standard ones tha

Jazzband 880 Dec 15, 2022
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

160 Jul 25, 2022
A Python program that will log into your scheduled Google Meets hands free

Chrome GMautomation General Information This Python program will open up Chrome and log into your scheduled Google Meet with camera and mic turned off

Jonathan Leow 5 Dec 31, 2021
Minimal example of getting Django + PyTest running on GitHub Actions

Minimal Django + Pytest + GitHub Actions example This minimal example shows you how you can runs pytest on your Django app on every commit using GitHu

Matt Segal 5 Sep 19, 2022
This is a pytest plugin, that enables you to test your code that relies on a running MongoDB database

This is a pytest plugin, that enables you to test your code that relies on a running MongoDB database. It allows you to specify fixtures for MongoDB process and client.

Clearcode 19 Oct 21, 2022
HTTP client mocking tool for Python - inspired by Fakeweb for Ruby

HTTPretty 1.0.5 HTTP Client mocking tool for Python created by Gabriel Falcão . It provides a full fake TCP socket module. Inspired by FakeWeb Github

Gabriel Falcão 2k Jan 06, 2023
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
자동 건강상태 자가진단 메크로 서버전용

Auto-Self-Diagnosis-for-server 자동 자가진단 메크로 서버전용 이 프로그램은 SaidBySolo님의 auto-self-diagnosis를 참고하여 제작하였습니다. 개인 사용 목적으로 제작하였기 때문에 추후 업데이트는 진행하지 않습니다. 의존성 G

JJooni 3 Dec 04, 2021
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
Public repo for automation scripts

Script_Quickies Public repo for automation scripts Dependencies Chrome webdriver .exe (make sure it matches the version of chrome you are using) Selen

CHR-onicles 1 Nov 04, 2021
A toolbar overlay for debugging Flask applications

Flask Debug-toolbar This is a port of the excellent django-debug-toolbar for Flask applications. Installation Installing is simple with pip: $ pip ins

863 Dec 29, 2022
Python wrapper of Android uiautomator test tool.

uiautomator This module is a Python wrapper of Android uiautomator testing framework. It works on Android 4.1+ (API Level 16~30) simply with Android d

xiaocong 1.9k Dec 30, 2022
Scalable user load testing tool written in Python

Locust Locust is an easy to use, scriptable and scalable performance testing tool. You define the behaviour of your users in regular Python code, inst

Locust.io 20.4k Jan 04, 2023
The successor to nose, based on unittest2

Welcome to nose2 nose2 is the successor to nose. It's unittest with plugins. nose2 is a new project and does not support all of the features of nose.

736 Dec 16, 2022
One-stop solution for HTTP(S) testing.

HttpRunner HttpRunner is a simple & elegant, yet powerful HTTP(S) testing framework. Enjoy! ✨ 🚀 ✨ Design Philosophy Convention over configuration ROI

HttpRunner 3.5k Jan 04, 2023
PacketPy is an open-source solution for stress testing network devices using different testing methods

PacketPy About PacketPy is an open-source solution for stress testing network devices using different testing methods. Currently, there are only two c

4 Sep 22, 2022
A cross-platform GUI automation Python module for human beings. Used to programmatically control the mouse & keyboard.

PyAutoGUI PyAutoGUI is a cross-platform GUI automation Python module for human beings. Used to programmatically control the mouse & keyboard. pip inst

Al Sweigart 7.5k Dec 31, 2022