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
A simple script to login into twitter using Selenium in python.

Quick Talk A simple script to login into twitter using Selenium in python. I was looking for a way to login into twitter using Selenium in python. Sin

Lzy-slh 4 Nov 20, 2022
Python tools for penetration testing

pyTools_PT python tools for penetration testing Please don't use these tool for illegal purposes. These tools is meant for penetration testing for leg

Gourab 1 Dec 01, 2021
Lightweight, scriptable browser as a service with an HTTP API

Splash - A javascript rendering service Splash is a javascript rendering service with an HTTP API. It's a lightweight browser with an HTTP API, implem

Scrapinghub 3.8k Jan 03, 2023
A test fixtures replacement for Python

factory_boy factory_boy is a fixtures replacement based on thoughtbot's factory_bot. As a fixtures replacement tool, it aims to replace static, hard t

FactoryBoy project 3k Jan 05, 2023
A Proof of concept of a modern python CLI with click, pydantic, rich and anyio

httpcli This project is a proof of concept of a modern python networking cli which can be simple and easy to maintain using some of the best packages

Kevin Tewouda 17 Nov 15, 2022
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
模仿 USTC CAS 的程序,用于开发校内网站应用的本地调试。

ustc-cas-mock 模仿 USTC CAS 的程序,用于开发校内网站应用阶段调试。 请勿在生产环境部署! 只测试了最常用的三个 CAS route: /login /serviceValidate(验证 CAS ticket) /logout 没有测试过 proxy ticket。(因为我

taoky 4 Jan 27, 2022
A single module to link Python ecosystem to the Web

A single module to link Python ecosystem to the Web. Have a quick look at the Gallery first to get convinced ! FAQ For any questions, please use Stack

66 Dec 21, 2022
hyppo is an open-source software package for multivariate hypothesis testing.

hyppo (HYPothesis Testing in PythOn, pronounced "Hippo") is an open-source software package for multivariate hypothesis testing.

neurodata 137 Dec 18, 2022
Useful additions to Django's default TestCase

django-test-plus Useful additions to Django's default TestCase from REVSYS Rationale Let's face it, writing tests isn't always fun. Part of the reason

REVSYS 546 Dec 22, 2022
A simple python script that uses selenium(chrome web driver),pyautogui,time and schedule modules to enter google meets automatically

A simple python script that uses selenium(chrome web driver),pyautogui,time and schedule modules to enter google meets automatically

3 Feb 07, 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
A wrapper for webdriver that is a jumping off point for web automation.

Webdriver Automation Plus ===================================== Description: Tests the user can save messages then find them in search and Saved items

1 Nov 08, 2021
Pynguin, The PYthoN General UnIt Test geNerator is a test-generation tool for Python

Pynguin, the PYthoN General UnIt test geNerator, is a tool that allows developers to generate unit tests automatically.

Chair of Software Engineering II, Uni Passau 997 Jan 06, 2023
Active Directory Penetration Testing methods with simulations

AD penetration Testing Project By Ruben Enkaoua - GL4Di4T0R Based on the TCM PEH course (Heath Adams) Index 1 - Setting Up the Lab Intallation of a Wi

GL4DI4T0R 3 Aug 12, 2021
Object factory for Django

Model Bakery: Smart fixtures for better tests Model Bakery offers you a smart way to create fixtures for testing in Django. With a simple and powerful

Model Bakers 632 Jan 08, 2023
ApiPy was created for api testing with Python pytest framework which has also requests, assertpy and pytest-html-reporter libraries.

ApiPy was created for api testing with Python pytest framework which has also requests, assertpy and pytest-html-reporter libraries. With this f

Mustafa 1 Jul 11, 2022
A Demo of Feishu automation testing framework

FeishuAutoTestDemo This is a automation testing framework which use Feishu as an example. Execute runner.py to run. Technology Web UI Test pytest + se

2 Aug 19, 2022
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
masscan + nmap 快速端口存活检测和服务识别

masnmap masscan + nmap 快速端口存活检测和服务识别。 思路很简单,将masscan在端口探测的高速和nmap服务探测的准确性结合起来,达到一种相对比较理想的效果。 先使用masscan以较高速率对ip存活端口进行探测,再以多进程的方式,使用nmap对开放的端口进行服务探测。 安

starnightcyber 75 Dec 19, 2022