Приемочный тест «Пользователь меняет пароль» в поведении

Я автоматизировал приемочные тесты с помощью поведения (python), когда столкнулся с проблемой написания теста для сценария смены пароля.

Это мои шаги в test_change_password.py

from behave import *
from features.steps.common_steps import fill_in_email, fill_in_password, show_main_page, register_user, logout
from features.steps.constants import *
import time

CHANGE_PASSWORD_USER_EMAIL = '[email protected]'

use_step_matcher("re")


def login(context, password):
    context.browser.visit("/login")
    context.browser.is_element_present_by_css("//input")
    fill_in_email(context, '[email protected]')
    fill_in_password(context, password)
    context.browser.find_by_xpath("//button").first.click()

def change_password_fields_and_logout(context):
    old_pass_field = context.browser.find_by_xpath('//form/div[%s]/input' % OLD_PASS_INDEX)
    old_pass_field.fill(NEW_PASSWORD)
    new_pass_field = context.browser.find_by_xpath('//form/div[%s]/input' % NEW_PASS_INDEX)
    new_pass_field.fill(OLD_PASSWORD)
    confirm_new_pass_field = context.browser.find_by_xpath('//form/div[%s]/input' % CONFIRM_NEW_PASS_INDEX)
    confirm_new_pass_field.fill(OLD_PASSWORD)
    context.browser.find_by_xpath('//button[text()="Submit"]').first.click()
    logout(context)


@given("change password user login")
def step_impl(context):
    context.browser.visit('/login')
    context.browser.is_element_present_by_css('//h1')
    fill_in_email(context, CHANGE_PASSWORD_USER_EMAIL)
    fill_in_password(context, NEW_PASSWORD)
    context.browser.find_by_xpath("//button[@type='submit']").first.click()
    if not context.browser.is_element_present_by_text('first name last name'):
        NEW_PASSWORD, OLD_PASSWORD = OLD_PASSWORD, NEW_PASSWORD
        fill_in_password(context, NEW_PASSWORD)


@when("user changed his password")
def step_impl(context):
    context.browser.is_element_present_by_text('first name last name')
    context.browser.find_by_text("first name last name").first.click()
    context.browser.is_element_present_by_text('Change password')
    context.browser.find_by_xpath('//a[text()="Change password"]').first.click()
    change_password_fields_and_logout(context)


@then("user login with new password")
def step_impl(context):
    login(context, NEW_PASSWORD)

Он работает, как и ожидалось, при первом запуске тестов, но поскольку он меняет пароль пользователя в БД, мне приходится менять местами значения NEW_PASSWORD и OLD_PASSWORD или усекать БД и заполнять мои фикстуры перед запуском тестов.

Я думаю, что есть лучшие, более автоматизированные способы сделать это.


person Islam Murtazaev    schedule 04.11.2018    source источник
comment
Да, вы хотите усечь свою БД между тестами или реализовать явные шаги поведения, которые позволят вам каким-то образом очистить БД. Как это сделать, зависит от вашей реализации БД и других факторов, которые потребуют более подробного ответа на ваш вопрос и, вероятно, выходят за рамки Stack Overflow. Найдите несколько руководств по тестированию транзакционных БД с помощью Behave.   -  person Jim Stewart    schedule 04.11.2018


Ответы (1)


  1. Подключитесь к базе данных и вставьте нового пользователя в метод настройки.
  2. Проверьте изменение пароля для добавленного пользователя на шаге 1.
  3. Удалите пользователя из базы данных в тестовой очистке.

    Вы можете использовать environmental-controls для настройки и очистки, или вы можете написать свои собственные шаги для этого.
person Marek Martyniak    schedule 05.11.2018