Взаимодействие с интерфейсом, являющееся важной частью контента тестирования «черного ящика», стало почти первым контактным контентом среди обширной группы тестировщиков. При выполнении задач тестирования каждому тестировщику необходимо стоять с точки зрения клиента. Основные условия были соблюдены. и моделирования ежедневных бизнес-операций клиентов, взаимодействие с интерфейсом стало главным приоритетом. Аналогично, как мы можем лучше интегрировать операции взаимодействия интерфейса в реальный код и структуру автоматизированного тестирования? Сегодня блоггер предложит вам взглянуть на некоторые передовые методы проектирования взаимодействия с интерфейсом.
Так в чем конкретное практическое значение взаимодействия интерфейсов при автоматизированном тестировании? Во-первых, с точки зрения бизнеса, чтобы приблизиться к повседневному деловому поведению реальных пользователей, тестировщики должны разработать серию соответствующих операций взаимодействия с интерфейсом, поскольку сложное тестирование взаимодействия будет включать в себя сложные взаимодействия между несколькими элементами и изменениями статуса страницы. ближе к реальной работе реальных пользователей с тестируемым веб-объектом. По сравнению с незапланированными случайными операциями конкретные интерактивные операции интерфейса могут эффективно моделировать реальные сценарии использования пользователя, тем самым более полно проверяя функции приложения и взаимодействие с пользователем. Это соответствует тому, что как только будет сформирован четкий план работы взаимодействия интерфейса, тестовое покрытие функционального модуля, естественно, будет улучшено. Знакомое нам интерфейсное взаимодействие, помимо работы некоторых компонентов, Динамический контент, асинхронный. запросы, переходы по страницам, взаимодействие со всплывающими окнами и т. д. также часто задействованы. Благодаря пересечению и комбинации этих элементов тестировщики могут обнаружить больше потенциальных проблем, тем самым улучшая покрытие тестами.
Кроме того, помимо базового взаимодействия интерфейса, обмен данными (логическая обработка front-end и back-end) также может быть проверен путем проверки взаимодействия интерфейса. Конечно, это требует предварительного эффективного интерактивного планирования операций в качестве предварительного условия. Например, с помощью отправки данных в форме и фоновой обработки данных вы можете проверить, правильно ли передаются внешние и внутренние данные. Я считаю, что каждый должен быть знаком с этим сценарием. Итак, как эффективно организовать и объединить различные отправки форм. Проверка данных стала вопросом о том, является ли один из основных факторов успешного выполнения этого типа сценария тестирования.
Хорошо, теперь, когда у нас есть общее представление о взаимодействии интерфейсов, давайте воспользуемся реальным бизнес-кейсом, чтобы применить взаимодействие интерфейсов в автоматизированном тестировании.
Тестируйте бизнес-сценарии:в определенной финансовой системе,Пользователь хочет подать заявку на кредит。Заявка на кредит предполагает заполнение личной информации.、Выбрать кредитный продукт、Введите сумму кредита、Выберите период погашения、Загрузите необходимую информацию и другие шаги,При этом система рассчитает лимит и отобразит план погашения на основе информации о пользователе и кредитных продуктах. В процессе подачи заявки,Вы можете столкнуться с различными сообщениями о проверке и подсказках.,Пользователям необходимо правильно заполнять и обрабатывать различную информацию.,с успехом Подать заявку на кредит.
Затем мы разберем бизнес-сценарий на самые основные этапы бизнес-потока. Это тесно связано с покрытием, этапами выполнения и интерфейсным взаимодействием нашего кода тестирования дизайна, поэтому дизассемблирование должно быть максимально ясным и кратким.
Соответствующие ожидаемые результаты
На основе приведенных выше бизнес-сценариев и шагов мы можем четко видеть соответствующие области тестирования и функциональные точки. На этой основе мы можем систематически выводить вышеуказанное, чтобы сформировать соответствующие тестовые истории.
Сценарий: Пользователь подает заявку на получение обычного кредита. Описание сцены: Как заявитель на получение кредита, пользователь надеется успешно подать заявку на получение кредита, тем самым начиная ряд шагов, необходимых для подачи заявки. Given: Пользователь уже вошел в свой финансовый счет Пользователь не зарегистрировал соответствующую информацию (имя, идентификационный номер, номер мобильного телефона) Вся аутентификационная информация, принадлежащая пользователю, действительна, и регистрация прошла успешно. When: Пользователь заходит на страницу заявки на кредит Пользователь заполняет форму, указывая действительную личную информацию. Пользователь выбирает тип кредитного продукта Пользователь вводит сумму кредита, которая попадает в допустимый диапазон. Пользователь выбирает эффективный период погашения Пользователь загружает необходимые файлы Then: Субъект должен рассчитать сумму кредита и представить план погашения. Пользователь просматривает и принимает условия кредита Пользователь отправляет заявку на кредит Пользователь должен видеть статус своей заявки на кредит как успешный.
После того, как мы разберемся с приведенной выше информацией, мы сможем официально приступить к разработке соответствующего тестового кода. Конечно, это всего лишь простая демонстрация того, как мы можем интегрировать содержимое тестирования взаимодействия интерфейса в среду автоматизированного тестирования в рамках традиционного бизнеса. шаги в нем (разработка тестовых примеров, модульное тестирование кода, итерация оптимизации) Я не буду здесь вдаваться в подробности из-за нехватки места. Если у вас есть вопросы, вы можете оставить сообщение или отправить блоггеру личное сообщение. .
Как и в большинстве сред автоматизированного тестирования пользовательского интерфейса, мы можем разделить бизнес-часть, которую необходимо протестировать, на три части: base, page_objects и test_loan_application соответствуют трем скриптам Python соответственно. когда page_objects увидит имя, вы узнаете, что мы инкапсулируем элементы страницы на основе режима PO, и test_loan_application, конечно же, является нашим тестовым примером.
Без лишних слов, давайте сначала разработаем базовый скрипт:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BasePage:
def __init__(self, driver):
self.driver = driver
def wait_for_element_to_be_visible(self, by, locator, timeout=10):
wait = WebDriverWait(self.driver, timeout)
return wait.until(EC.visibility_of_element_located((by, locator)))
class BaseTest:
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(5)
cls.driver.maximize_window()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
О базовом скрипте особо нечего сказать. Это рутинная операция. Необходимо пояснить, что в базу добавлено явное ожидание, соответствующее асинхронному обмену данными. У всех разные мнения, и они могут свободно использовать его. Далее идет page_objects. Все видимые объекты (тестовые объекты) на странице, включая некоторые общие компоненты (кнопки, раскрывающиеся списки и т. д.), инкапсулируются в них для облегчения повторного использования в последующих тестовых случаях.
from selenium.webdriver.common.by import By
from base import BasePage
class LoginPage(BasePage):
def __init__(self, driver):
super().__init__(driver)
self.username_input = (By.ID, "username")
self.password_input = (By.ID, "password")
self.login_button = (By.ID, "login_button")
def login(self, username, password):
self.driver.get("https://example-bank.com/login")
self.driver.find_element(*self.username_input).send_keys(username)
self.driver.find_element(*self.password_input).send_keys(password)
self.driver.find_element(*self.login_button).click()
class LoanApplicationPage(BasePage):
def __init__(self, driver):
super().__init__(driver)
self.product_type_dropdown = (By.ID, "product_type")
self.loan_amount_input = (By.ID, "loan_amount")
self.repayment_period_dropdown = (By.ID, "repayment_period")
self.upload_file_input = (By.ID, "upload_file")
self.submit_button = (By.ID, "submit_button")
def apply_for_loan(self, product_type, loan_amount, repayment_period, file_path):
self.driver.get("https://example-bank.com/loan_application")
self.driver.find_element(*self.product_type_dropdown).send_keys(product_type)
self.driver.find_element(*self.loan_amount_input).send_keys(loan_amount)
self.driver.find_element(*self.repayment_period_dropdown).send_keys(repayment_period)
self.driver.find_element(*self.upload_file_input).send_keys(file_path)
self.driver.find_element(*self.submit_button).click()
def click_calculate_button(self):
calculate_button = self.wait_for_element_to_be_visible(By.ID, "calculate_button")
calculate_button.click()
def select_repayment_period(self, period):
repayment_period_dropdown = self.wait_for_element_to_be_visible(By.ID, "repayment_period")
select = Select(repayment_period_dropdown)
select.select_by_visible_text(period)
def accept_risk_warning(self):
accept_button = self.wait_for_element_to_be_visible(By.ID, "accept_button")
accept_button.click()
def risk_assessment(self):
assessment_button = self.wait_for_element_to_be_visible(By.ID, "assessment_button")
assessment_button.click()
В test_loan_application мы в основном делаем утверждения о расчете тестового лимита, отображении плана погашения и результатах заявки на кредит. Прежде чем утверждать, мы выполняем соответствующие интерактивные операции интерфейса для бизнес-процесса. Конечно, реальный бизнес - это гораздо больше, чем просто вы. нужно просто понять, как инкапсулировать различные компоненты и вызывать их запланированным образом в сценариях использования.
import unittest
from base import BaseTest
from page_objects import LoginPage, LoanApplicationPage
class TestLoanApplication(BaseTest):
def test_loan_application(self):
login_page = LoginPage(self.driver)
login_page.login("testuser", "testpass")
loan_application_page = LoanApplicationPage(self.driver)
loan_application_page.apply_for_loan("Personal Loan", "5000", "12 months", "path/to/uploaded/file.pdf")
# Добавьте асинхронную связь и явное ожидание отображения и проверки статуса заявки на кредит.
loan_application_page.wait_for_element_to_be_visible(By.ID, "loan_application_status", timeout=20)
status = self.driver.find_element(By.ID, "loan_application_status").text
assert "Successful" in status, «Ошибка статуса заявки на кредит»
# Расчет суммы теста и отображение плана погашения
loan_amount = "5000"
repayment_period = "12 months"
expected_loan_amount = "5000"
expected_repayment_plan = "Monthly Installments: 12\nAmount per Installment: 416.67"
loan_application_page.fill_loan_amount_and_repayment_period(loan_amount, repayment_period)
loan_application_page.click_calculate_button()
loan_application_page.wait_for_element_to_be_visible(By.ID, "calculated_loan_amount", timeout=10)
calculated_loan_amount = self.driver.find_element(By.ID, "calculated_loan_amount").text
assert calculated_loan_amount == expected_loan_amount, «Ошибка расчета суммы»
repayment_plan = self.driver.find_element(By.ID, "repayment_plan").text
assert repayment_plan == expected_repayment_plan, «Ошибка отображения плана погашения»
# Советы по управлению рисками
risk_warning = loan_application_page.get_risk_warning_text()
if risk_warning:
loan_application_page.accept_risk_warning()
else:
# Если предупреждение о риске отсутствует, проведите оценку инвестиционного риска.
loan_application_page.risk_assessment()
# Выберите период погашения
new_repayment_period = "24 months"
loan_application_page.select_repayment_period(new_repayment_period)
# Подать заявку на кредит
loan_application_page.submit_loan_application()
loan_application_page.wait_for_element_to_be_visible(By.ID, "loan_application_status", timeout=20)
status = self.driver.find_element(By.ID, "loan_application_status").text
assert "Successful" in status, «Ошибка статуса заявки на кредит»
if __name__ == "__main__":
unittest.main()
Прочитав приведенный выше практический пример, я не знаю, вдохновит ли он вас. На самом деле это не означает, что вы должны использовать описанный выше метод для дизассемблирования тестового задания, я просто хочу вам здесь сказать, что это происходит при автоматизированном тестировании пользовательского интерфейса. , когда мы сталкиваемся с При тестировании сценариев взаимодействия интерфейса нам необходимо планировать и реализовывать операции взаимодействия интерфейса. Что касается метода, то я считаю, что в будущем каждый разберется с применимыми и практичными методами. Работа Набор методов проектирования и исполнения для себя и своей команды.