Путь к тестированию расширения платформы автоматизации интерфейса pytest — окно графического интерфейса
Путь к тестированию расширения платформы автоматизации интерфейса pytest — окно графического интерфейса

Привет всем~ В прошлом выпуске мы разобрали идеи расширения скриптов автоматизации интерфейса и продемонстрировали результаты. Этот выпуск начинается с точки зрения кода. Поделившись исходным кодом, я одновременно разобрался со своими идеями. Ладно, хватит чепухи, начнем с материалов Хао~

введение

Эта проблема начинается с ввода данных. На ранней стадии сценария расширения я думал о том, как получить источник данных полностью в виде интерфейса, не трогая код. Нажав две кнопки, можно загрузить json. файл, который необходимо проанализировать, а затем нажмите другую кнопку, чтобы выполнить сценарий автоматизации интерфейса. Когда я думаю об интерфейсе, я думаю об окне, поэтому я поискал в Интернете учебные пособия по pyqt5 и собственному tkinter Python. Давайте подробно рассмотрим эти два набора инструментов.

Насколько я понимаю, разница между pyqt5 и tkinter заключается в том, что pyqt5 более полный и всеобъемлющий, как и django. Существуют зрелые зависимости, красивые стили и сторонние инструменты для поддержки генерации кода. tkinter эквивалентен фреймворку flask. Он относительно прост и удобен в использовании. Моя текущая потребность — просто реализовать окно для ввода файлов, а затем вызвать метод выполнения скрипта. Наконец, результаты отображаются в диалоговом окне. Использование pyqt5 — это немного излишество, а стоимость обучения немного высока. Поэтому я выбрал tkiner

Поэтому я поискал в Интернете соответствующие руководства по tkinter. Позвольте мне подвести итог тому, что я узнал и как это использовать. Если вам интересно, вы можете продолжить изучение графического интерфейса графического интерфейса. Это все еще весело.

tkinter
  • Импортируйте пакет и создайте объект Tk().
  • Создание экземпляра объекта Tk() эквивалентно созданию холста, и мы можем «творить» на этом холсте.
  • PS: В конце необходимо вызвать метод mainloop. Этот метод можно рассматривать как бесконечный цикл, а операции на холсте можно повторять бесчисленное количество раз. Поможет выйти из программы. Точно так же, как мы используем программное обеспечение. Все программное обеспечение используется повторно, и невозможно запустить его один раз, а затем выйти.
Язык кода:javascript
копировать
from tkinter import *
# создать экземпляр объекта
root = Tk()

# Установить заголовок окна
root.title("Заголовок окна")

# Установите ширину, высоту и положение оси XY. Для новичков положения x и y требуют небольшой отладки.
root.geometry('1000x600+180+100')

root.mainloop()
  • Кратко опишите компоненты и методы, которые я использовал.:
    • Label:компонент этикетки。В основном используется для реализации функций отображения,Может отображать текст и изображения。Параметры следующие
      • родительский элемент: представляет родительский контейнер, в котором размещена кнопка.
      • options: Необязательный, то есть настраиваемые свойства кнопки. Эти параметры доступны с помощью ключа = значения, разделенные запятыми
    • pack:функция макета。макет。Вызовите этот метод после добавления компонента,Только после этого компонент можно разместить на артборде. Tkinter также имеет две функции макета — сетку и место.
Язык кода:javascript
копировать
# Компонент этикетки. Добавьте метку на холст
label = tk.Label(root,text ="Я лейбл").pack() 

root.mainloop()
  • Button:простая кнопка,Используется в ответ на операцию щелчка пользователя. Может быть связано с функцией,когда кнопка нажата,Эта функция вызывается автоматически. Атрибуты могут напрямую ссылаться на теги.
  • ps: компоненты tkinter имеют много общих свойств. Если вам интересно, вы можете освежить в памяти CSDN.
Язык кода:javascript
копировать
# Компонент кнопки кнопки. Добавляем кнопку на холст
def onclick():
    print("Не нажимайте на меня!")

root = Tk()
Button(root, текст="Кнопка", command=onclick).pack()

root.mainloop()
  • Text:текстконтроль,Это очень гибкое и сложное управление.,Текст можно вставить,Вы также можете вставлять изображения и другие небольшие элементы управления.
Язык кода:javascript
копировать
root = Tk()
content = «Император династии Хань был одержим сексом и хотел захватить страну. Он много лет не мог найти императорский дворец. В семье Ян есть дочь, которая только что выросла. Она воспитывается в глубокой будуаре, и никто ее не знает». \
          «Трудно отказаться от естественной красоты. Как только вы выберете ее, вы будете на стороне короля. Оглядываясь назад, вы будете полны очарования, когда улыбаетесь. Розовый и белый в Шестом дворце не имеют цвета. "

# Вставка текстового контента
text_area.insert(INSERT, content)
# После вставки текста необходимо обновить компонент
text_area.update()
root.mainloop()
  • Scrollbar:текстполоса прокрутки
    • команда: мониторинг обратного вызова при перетаскивании полосы прокрутки, значение его атрибута является функцией обратного вызова
    • selectmode: Установите режим выбора списка. Всего существует четыре значения, SINGLE означает одиночный выбор, а BROWSE также означает одиночный выбор, но этот режим можно использовать для однократного выбора путем перетаскивания мыши, а не просто щелчка. НЕСКОЛЬКО означает множественный выбор, РАСШИРЕННЫЙ означает, что вы можете выбрать несколько элементов, перетаскивая мышь. Конечно, вы также можете выбрать несколько элементов, щелкнув клавишу Shift. Значением атрибута selectmode по умолчанию является BROWSE.
    • Listbox:
      • yscrollкоманда Мониторинг обратного вызова при вертикальной прокрутке списка. Значение этого свойства является функцией обратного вызова.
      • xscrollcommand Мониторинг обратного вызова при горизонтальной прокрутке списка.
Язык кода:javascript
копировать
root = Tk()

list_var = StringVar()
list_var.set(["go", "python", "java", "dart", "c", "c++"])

# Создайте две полосы прокрутки в направлении x и y соответственно. Атрибут orient задает направление прокрутки.
y_bar = Scrollbar(root, orient=VERTICAL)
x_bar = Scrollbar(root, orient=HORIZONTAL)

# Создать список
list_box = Listbox(root, yscrollcommand=y_bar.set,
                   xscrollcommand=x_bar.set,
                   listvariable=list_var, height=5)

y_bar['command'] = list_box.yview
x_bar['command'] = list_box.xview

# Установить ориентацию макета
y_bar.pack(side=RIGHT, fill=Y)
x_bar.pack(side=BOTTOM, fill=X)
list_box.pack(anchor=NW, fill=BOTH, expand=YES)

root.mainloop()

Вышеописанные методы я использую чаще всего. Следуйте инструкциям шаг за шагом, печатая, записывая и практикуясь. На освоение уходит около 3 часов. Ниже приведен исходный код моего скрипта.

Язык кода:javascript
копировать
import pytest
from webbrowser import open as webopen

from utils.case_utils import *
from tkinter import *
from tkinter import filedialog, ttk

from PIL import ImageTk
from PIL import Image

class ApiGui:
 # Инициализируйте холст, текст и установите фоновое изображение.
   def __init__(self, msg=None):
       # Создать артборд
       self.root = Tk()
       self.root.title("Инструмент автоматизации интерфейса")
       # Установите длину, ширину, высоту и ось xy
       self.root.geometry('1000x600+180+100')
       # Настройки не снимаются
       self.root.resizable(False, False)
       # Установить фоновое изображение. Кусок кода, взятый из интернета. Ссылка на CSDN размещена в конце статьи.
       self.canvas_root = Canvas(self.root, width=1000, height=600)
       # Перехватывайте исключения и обеспечивайте совместимость кода. Если фонового изображения нет, оставьте окно страницы пустым.
       try:
           im_root = self.get_img(f'{get_cwd()}/picture/backgroud.jpeg', 1000, 600)
           self.canvas_root.create_image(500, 300, image=im_root)
           self.canvas_root.pack()
       except FileNotFoundError:
           self.canvas_root.pack()
       # Установить раскрывающийся список для текстового поля
       self.y_bar = Scrollbar(self.root, orient=VERTICAL)
       self.y_bar.pack(side=RIGHT, fill=Y)
       self.text_area = Text(self.root, yscrollcommand=self.y_bar.set, wrap=WORD, height=20)
       self.y_bar["command"] = self.text_area.yview
       self.text_area.place(x=200, y=200)
       # Добавьте две кнопки. ttk — это пакет оптимизации пользовательского интерфейса для tkinter. При использовании страница окна будет адаптирована к работающей платформе, и пользовательский интерфейс будет выглядеть лучше.
       # При использовании напрямую импортируйте из tkinter.ttk import *Вот и все
       ttk.Button(self.root, text="Пожалуйста, выберите файл", command=self.onclick).place(x=300, y=100)
       ttk.Button(self.root, text="Нажмите, чтобы начать автоматизацию интерфейса", command=self.pytest_main).place(x=500, y=100)
       
       # Принять параметры возврата журнала
       if msg:
           self.text_area.insert(INSERT, f"{msg}")
           self.text_area.update()
       self.root.mainloop()

   # Метод, используемый для фоновых изображений
   def get_img(self, filename, width, height):
       im = Image.open(filename).resize((width, height))
       im = ImageTk.PhotoImage(im)
       return im

    # Нажмите на метод, и после нажатия во всплывающем окне откроется окно выбора файла.
   def onclick(self):
       """
      filedialog.askopenfilename диалог выбора файла.
      заголовок — это заголовок окна
      Initialdir: путь, открытый по умолчанию
      типы файлов: Ограничьте дополнительные типы файлов, которые можно открыть в окне.
      """
       self.file_name = filedialog.askopenfilename(
           title="Открыть мой файл", initialdir="~./Desktop",
           filetypes=[("JSON", ".json")])
       self.text_area.insert(INSERT, «Генерация обратных тестовых примеров\n»)
       self.text_area.update()
       # Вызов метода для создания файлов вариантов использования — будет опубликован позже.
       result = create_case_file(self.file_name)
       if result == 200:
           self.text_area.insert(INSERT, "После завершения генерации нажмите кнопку "Начать автоматизацию интерфейса", чтобы выполнить операции по автоматизации интерфейса\n")
       else:
           self.text_area.insert(INSERT, «Интерфейс уже существует\n»)
       self.text_area.update()
       
       
# Выполнить автоматизацию интерфейса
   def pytest_main(self):
       self.text_area.insert(INSERT, "являются Выполнить автоматизацию интерфейсавариант использования\n")
       self.text_area.update()
       pytest.main()
       self.text_area.insert(INSERT, «Выполнение варианта использования завершено, и отчет создается\n»)
       self.text_area.update()
       os.system("allure generate ./temps -o ./reports --clean")
       self.text_area.insert(INSERT, f"Создание отчета завершено\n")
       self.text_area.update()
       self.text_area.tag_configure('link',foreground='blue',underline=True)
       self.text_area.insert('end','Нажмите на меня, чтобы просмотреть отчет','ссылка')
       self.text_area.tag_bind('link','<Button-1>',
                               lambda event: webopen("http://localhost:63342/huayuapi/reports/index.html"))
       self.text_area.place()
       self.text_area.update()


if __name__ == '__main__':
   ApiGui()

Рендеринг:

Заключение

Вот и все по этому вопросу. Слишком много кода. Можешь попробовать сбить его. Есть много методов, которые я изучил через CSDN и «изучил» (на самом деле это резюме. Ха-ха-ха ~).

Ссылка CSDN: https://blog.csdn.net/qq_28949847/article/details/116936201

хорошо. Вот и все по этому вопросу. Содержание следующего выпуска войдет в часть анализа параметров. Привет, ребята, увидимся в следующий раз~

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose