Привет всем~ В прошлом выпуске мы разобрали идеи расширения скриптов автоматизации интерфейса и продемонстрировали результаты. Этот выпуск начинается с точки зрения кода. Поделившись исходным кодом, я одновременно разобрался со своими идеями. Ладно, хватит чепухи, начнем с материалов Хао~
Эта проблема начинается с ввода данных. На ранней стадии сценария расширения я думал о том, как получить источник данных полностью в виде интерфейса, не трогая код. Нажав две кнопки, можно загрузить json. файл, который необходимо проанализировать, а затем нажмите другую кнопку, чтобы выполнить сценарий автоматизации интерфейса. Когда я думаю об интерфейсе, я думаю об окне, поэтому я поискал в Интернете учебные пособия по pyqt5 и собственному tkinter Python. Давайте подробно рассмотрим эти два набора инструментов.
Насколько я понимаю, разница между pyqt5 и tkinter заключается в том, что pyqt5 более полный и всеобъемлющий, как и django. Существуют зрелые зависимости, красивые стили и сторонние инструменты для поддержки генерации кода. tkinter эквивалентен фреймворку flask. Он относительно прост и удобен в использовании. Моя текущая потребность — просто реализовать окно для ввода файлов, а затем вызвать метод выполнения скрипта. Наконец, результаты отображаются в диалоговом окне. Использование pyqt5 — это немного излишество, а стоимость обучения немного высока. Поэтому я выбрал tkiner
Поэтому я поискал в Интернете соответствующие руководства по tkinter. Позвольте мне подвести итог тому, что я узнал и как это использовать. Если вам интересно, вы можете продолжить изучение графического интерфейса графического интерфейса. Это все еще весело.
from tkinter import *
# создать экземпляр объекта
root = Tk()
# Установить заголовок окна
root.title("Заголовок окна")
# Установите ширину, высоту и положение оси XY. Для новичков положения x и y требуют небольшой отладки.
root.geometry('1000x600+180+100')
root.mainloop()
# Компонент этикетки. Добавьте метку на холст
label = tk.Label(root,text ="Я лейбл").pack()
root.mainloop()
# Компонент кнопки кнопки. Добавляем кнопку на холст
def onclick():
print("Не нажимайте на меня!")
root = Tk()
Button(root, текст="Кнопка", command=onclick).pack()
root.mainloop()
root = Tk()
content = «Император династии Хань был одержим сексом и хотел захватить страну. Он много лет не мог найти императорский дворец. В семье Ян есть дочь, которая только что выросла. Она воспитывается в глубокой будуаре, и никто ее не знает». \
«Трудно отказаться от естественной красоты. Как только вы выберете ее, вы будете на стороне короля. Оглядываясь назад, вы будете полны очарования, когда улыбаетесь. Розовый и белый в Шестом дворце не имеют цвета. "
# Вставка текстового контента
text_area.insert(INSERT, content)
# После вставки текста необходимо обновить компонент
text_area.update()
root.mainloop()
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 часов. Ниже приведен исходный код моего скрипта.
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
хорошо. Вот и все по этому вопросу. Содержание следующего выпуска войдет в часть анализа параметров. Привет, ребята, увидимся в следующий раз~