Главная / Блог / PYTHON QA AUTOMATION INTERVIEW

Шпаргалка для
Python QA Automation

Шпаргалка для собеседования на Python QA Automation

Smartiqa Article Python qa automation
  • Дата: 25 сентября 2022
  • Автор: Евгений Поваров
Деление

# Остаток от деления на 5 
x % 5 

# Целочисленное деление
x // 5
Генераторы списков / словарей

[x * 2 for x in range(0, 10) if x != 5]
a = [x * 2 if x == 5 else x for x in range(0, 10)]
{item[0]: item[1] * 2 for item in dct.items()}
Замыкание

def closure_example():
    x = 5

    def inner():
        print(x)

    return inner
Декораторы

# Простой декоратор
def my_decorator(my_func):

    def inner():
        print('Decorator starts...')
        my_func()
        print('Decorator finishes...')

    return inner


# Декоратор для функции с параметрами
def my_decorator_with_params(my_func):

    def inner(*args, **kwargs):
        print('Decorator starts...')
        my_func(*args, **kwargs)
        print('Decorator finishes...')

    return inner

# Использование декоратора
@my_decorator
def print_hi():
    print('Hi!')

decorated_func = my_decorator(print_hi)
decorated_func()

# Использование декоратора для функции с параметрами
@my_decorator_with_params
def adder(**nums):
    print(sum(nums.values()))


print_hi()
adder(a=1, b=2)
Оператор Match

match command:
    case "quit":
        quit()
    case "reset":
        reset()
    case unknown_command:
        print (f"Unknown command'{unknown_command}'")
Сортировки и фильтры

sorted(lst, key = lambda x: x % 2 == 0)
filtered_lst = list(filter(lambda x: x % 2 == 0, lst))
filtered_dict = dict(filter(lambda item: 'O' in item[1], dct.items()))
Обработка исключений

try:
    f.write('Hello')
except io.UnsupportedOperation as e:
    print('UnsupportedOperation!')
finally:
    print('Releasing resources')
    f.close()
Контекстный менеджер

with open('1.txt', 'w') as f:
    f.write('Hello!')
Встроенные библиотеки

sys, os, os.path, time, datetime, random, collections, json, unittest, re, hashlib, bz2, gzip, tarfile, zipfile
Регулярные выражения

res = re.search('Start(\d+)en(\w)', 'Start123end456')
a = res[0]
# re.match() ищет с начала строки
# re.search() - по всей строке
# re.findall() - только список групп
Виртуальное окружение

source my_project/venv/bin/activate
deactivate
Json

# Создаем json-строку из словаря
dct = {1: 'One', 2: 'Two'}
my_json = json.dumps(dct, indent=4)

# Парсим строку в json
my_str = '{"1": "One", "2": "Two"}'
my_json = json.loads(my_str)
Локаторы в Selenium

class By:
    """
    Set of supported locator strategies.
    """

    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"

Читайте также

Класс BasePage в Selenium

class BasePage:

    def __init__(self, driver):
        self.driver = driver
        self.base_url = 'https://google.com/'

    def find_element(self, locator, time=10):
        return WebDriverWait(self.driver, time).until(EC.presence_of_element_located(locator), message=f'Cant find element by locator {locator}')

    def find_elements(self, locator, time=10):
        return WebDriverWait(self.driver, time).until(EC.presence_of_all_elements_located(locator), message=f"Can't find elements by locator {locator}")

    def go_to_site(self):
        return self.driver.get(self.base_url)
Работа с элементами на странице с помощью Selenium WebDriver

from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(executable_path='chromedriver')
# Переходим на нужную страницу
obj = driver.get('http://www.google.com/')
# Ищем поле ввода поискового запроса
search_box = driver.find_element(By.NAME, 'q')

# Ищем элементы с помощью разных типов локаторов
account = driver.find_elements(By.CSS_SELECTOR, 'a') # css locator
menu_links = driver.find_elements(By.CSS_SELECTOR, '.gb_d') # css locator by сlass
mail_link = [item for item in menu_links if item.text == 'Почта']
mail_link = next((item for item in menu_links if item.text == 'Почта'), None)

google_picture = driver.find_elements(By.CSS_SELECTOR, '.lnXdpd[alt=Google]') # link css locator
buttons = driver.find_elements(By.XPATH, '//*/input[@role="button"]') # xpath locator

search_box = driver.find_element_by_name('q')

# Получаем / меняем настройки окна
res = driver.set_window_size(400, 300)
log = driver.get_log('driver')
name = driver.name
title = driver.title

# Работаем с атрибутами элемента
tag_name = search_box.tag_name
text = search_box.text
attr = search_box.get_attribute('class')
enabled = search_box.is_enabled()

# Осуществляем поисковый запрос
search_div = driver.find_element(By.CLASS_NAME, 'RNNXgb')
search_box = search_div.find_element_by_tag_name('input')
search_box.send_keys('smartiqa')
res = search_box.submit()
current_url = driver.current_url
Работа с PostgreSQL

# Создаем таблицу months и заполняем данными
create table months(id int, name varchar(10), days_number int);
insert into months (id, name, days_number) values (0, 'January', 31);
insert into months (id, name, days_number) values (1, 'February', 28);
insert into months (id, name, days_number) values (2, 'March', 30);

# Работаем с данными в таблице months
select * from months;
delete from months where name='February';
select * from months where days_number>=30;
select * from months order by days_number desc limit 1;
select * from months where days_number = (select max(days_number) from months);

# Задаем первичный ключ для таблицы months (поле id)
alter table months add primary key (id);
ALTER TABLE months ADD UNIQUE (id);

# Создаем таблицу workers и добавляем первичный ключ
create table workers (id int, name text, month int);
alter table workers add primary key (id);
ALTER TABLE workers ADD UNIQUE (id);

# Заполняем таблицу workers данными
insert into workers (id, name, month) values (0, 'Petya', 0);
insert into workers (id, name, month) values (1, 'Lena', 0);
insert into workers (id, name, month) values (2, 'Evgen', 1);
select * from workers;

# Задаем внешний ключ - поле id в таблице months соответствует столбцу month в таблице workers
alter table months ADD CONSTRAINT fk_months FOREIGN KEY (id) REFERENCES workers (month);

# Делаем выборку с объединением таблиц
select months.id, months.name, workers.name, workers.month from months inner join workers on months.id = workers.month;
25 СЕНТЯБРЯ / 2022
Как вам материал?

Читайте также