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

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

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

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

Добавлен: 07.11.2023

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
 
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Кафедра информационных управляющих систем

Лабораторная работа № 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() из библиотеки tkinter

def guest():

message.set("Получен гостевой доступ")

def loginForm():

global login_window

login_window = Tk()

# установка заглавия страницы

login_window.title("Авторизация")

# установка ширины и высоты окна

login_window.geometry("600x400")

#login_window.columnconfigure(0, weight = 2) # вес 0го столбца

#login_window.columnconfigure(1, weight = 1) # вес 1го столбца

# объявление переменных для использования в других функциях

global message

global username

global password

username = 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 unittest

import db_mysql

class 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 строк.