Файл: Лабораторная работа 1 по дисциплине программирование критических сервисов Студент гр. Иб22з Фамилия И. О.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 140

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)Кафедра информационных управляющих системЛабораторная работа № 1по дисциплине«ПРОГРАММИРОВАНИЕ КРИТИЧЕСКИХ СЕРВИСОВ»Студент гр. ИБ-22з ____________________________ Фамилия И.О.(подпись)Проверил ___________________________ Параничев А.В.(оценка и подпись)Санкт-Петербург2023 год Лабораторная работа № 1Создание и тестирование прототипа GUI приложения на языке Python[желтым - для подстановки своих значений; зеленым - прочитать комментарии и удалить перед отправкой; все выделение убрать перед отправкой; файл переименовать по шаблону]Выполним создание GUI приложения на языке Python для процесса [см. таблицу 1] «Авторизация пользователя в системе» с помощью IDE PyCharm.Добавим новый модуль в среде PyCharm: File->New->Python file->Python file с именем gui_login. Код добавления соответствующих графических элементов:from tkinter import *def login():# извлекаем данные из формыuname=username.get()pwd=password.get()# проверяем заполненные данныеif uname == '' or pwd == '':message.set("Заполните пустые поля!!!")else:if uname == "abcd@mail.ru" and pwd == "123456":message.set("Авторизация успешно выполнена!!")else:message.set("Неправильная пара логин-пароль!(")# функция авторизации формы Tk() из библиотеки tkinterdef guest():message.set("Получен гостевой доступ")def loginForm():global login_windowlogin_window = Tk()# установка заглавия страницыlogin_window.title("Авторизация")# установка ширины и высоты окнаlogin_window.geometry("600x400")#login_window.columnconfigure(0, weight = 2) # вес 0го столбца#login_window.columnconfigure(1, weight = 1) # вес 1го столбца# объявление переменных для использования в других функцияхglobal messageglobal usernameglobal passwordusername = StringVar()password = StringVar()
message = StringVar()# Размещение элементов на форме: Label, Entry,lab_enter = Label(login_window, text="Введите логин и пароль для входа в систему",\bg="green2",fg="orange4")lab_uname = Label(login_window, text="Логин")ent_uname = Entry(login_window, textvariable=username)lab_passw = Label(login_window, text="Пароль")ent_passw = Entry(login_window, textvariable=password, show="*")lab_msg = Label(login_window, text="",textvariable=message)btn_log = Button(login_window, text="Авторизоваться", width=20, height=1, bg="green2", command=login)btn_guest = Button(login_window, text="Получить гостевой доступ", width=30, height=1, bg="green2",command=guest)lab_enter.grid(column = 0, row = 0, columnspan = 2)lab_uname.grid(column = 0, row = 1)ent_uname.grid(column = 1, row = 1)lab_passw.grid(column = 0, row = 2)ent_passw.grid(column = 1, row = 2)lab_msg.grid(column = 0, row = 3, columnspan = 2)btn_log.grid(column = 0, row = 4, columnspan = 2)btn_guest.grid(column = 0, row = 5, columnspan = 2)login_window.mainloop()# вызов функции формыif __name__ == '__main__':loginForm()Индивидуальные задания нужно взять по табл. 1. Поменять все отображаемые цвета по табл. 2.Таблица 1Индивидуальные задания (https://pythonru.com/uroki/obuchenie-python-gui-uroki-po-tkinter#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D0%B0-Label )

№ по журналу

Предметная область

Добавляемые элементы (сами данные взять из 1й лабораторной работы или сформировать снова): для всех вариантов: Button, Entry

1

Сервис поиска (Search Service)

системы хранения данных

Checkbutton, Menu

2

проекторы

Radiobutton, Spinbox

3

среды разработки

Checkbutton, Frame

4

мотоциклы

Radiobutton, Scrolledtext

5

клавиатуры

Checkbutton, Spinbox

6

мыши

Radiobutton, Menu

7

бытовые вентиляторы

Checkbutton, Scrolledtext

8

сканеры

Radiobutton, Frame

9

Сервис пользовательских настроек (Account Service)

бытовые нагреватели

Checkbutton, Menu

10

системные блоки

Radiobutton, Spinbox

11

видеокарты

Checkbutton, Frame

12

принтеры

Radiobutton, Scrolledtext

13

легковые автомобили

Checkbutton, Spinbox

14

бытовые вентиляторы

Radiobutton, Menu

15

видеорегистраторы

Checkbutton, Scrolledtext

16

операционные системы

Radiobutton, Frame

17

Сервис оплаты (Checkout Service)

телевизоры

Checkbutton, Menu

18

грузовые автомобили

Radiobutton, Spinbox

19

смартфоны

Checkbutton, Frame

20

ноутбуки

Radiobutton, Scrolledtext

21

планшеты

Checkbutton, Spinbox

22

жесткие диски

Radiobutton, Menu

23

холодильники и морозильники

Checkbutton, Scrolledtext

24

наушники

Radiobutton, Frame

25

радиотелефоны

Checkbutton, Menu

Таблица 2Цветовые решения из библиотеки Tkinter (источник: https://python-scripts.com/tkinter )Скриншот запуска приложения представлен на рис. 1, фрагмент работы приложения показан на рис. 2.Рис. 1. Скриншот запуска модуля «Авторизация пользователя в системе» [поменять на свое по варианту!!!] с помощью IDE PyCharm Free Community для варианта 00Рис. 2. Фрагмент работы приложения среде PyCharm Free Community для варианта 00На рис. 1 и 2 графические элементы отображены с помощью следующих строк кода:

  • кнопка с текстом (Button) "Авторизоваться" создается с помощью следующих параметров::

    • размеры кнопки: …;

    • положение на экране;

  • окно редактирования (Entry) для ввода логина-пароля создается следующим образом:

    • размеры окна редактирования: ;

    • положение на экране:..;



    • Frame…



    • Menu…
Для проверки работы прототипа GUI составлены 4 класса по 2 функции-теста в каждом (успешный и неуспешный); реализация выполнена в виде файла testgui_00.py: [в таблицу подставить функции GUI приложения; код дополнить значениями return (см. прилагаемые примеры) для функций GUI, чтобы тест выполнялся без ввода данных пользователем]import unittestimport db_mysqlclass Test_MySQL(unittest.TestCase):test_mysql_db = db_mysql.dbase_mysql()def test_dbase_select_unknown(self):json_wait_repl = '[]'self.assertEqual(json_wait_repl, self.test_mysql_db.select_data(100500))def test_dbase_select_Kvadro_1002(self):json_wait_repl = '[{"KVDR_id": 1002, "KVDR_name": "Pioneer FPV JXD-509G", "KVDR_image": null, ' \'"KVDR_price": 6404.0, "KVDR_size_id": 1, "KVDR_max_dist": 100, ' \'"KVDR_time": 8, "KVDR_camera": 2}]'self.assertEqual(json_wait_repl, self.test_mysql_db.select_data(1002) )if __name__ == '__main__':unittest.main()Таблица 1Результаты юнит-тестирования функций GUI

Номер теста п/п

Тестовая функция и значения параметров

Ожидаемый результат

Фактический результат

Результат теста

1

assertEqual:

send_requests("AANDA")

3

3

OK

2

assertNotEqual:

send_requests("AANDA")

0

3

OK

3

assertEqual:

send_requests("")

0

-1

Failed

[оформление таблицы, если не вмещается на 1 страницу: указывается "Окончание"]Таблица 1 (Окончание)

Номер теста п/п

Тестовая функция и значения параметров

Ожидаемый результат

Фактический результат

Результат теста

4













5













6













7













8







OK
В табл. 1 показаны следующие тесты:

  • № 1, 3, 5 и 7 выполнены успешно (ОК), т.к. ожидаемое значение и фактическое совпали;

  • № 2, 4, 6 и 8 выполнены неуспешно (Failed), т.к. в БД нет идентификатора "100500", невозможно добавить и обновить строку с теми данными, которые уже есть в таблице, невозможно удалить строку по несуществующему индексу 11.
Вывод: о том, какие коды можно присвоить соответствующим функциям для проведения автоматизированного модульного тестирования (юнит-тестирования); об используемых значениях ответа для функций модульного тестирования (юнит-тестирования): 5-6 строк.