我有一个由PySimpleGui创建的接口,它允许用户:
- 为测试设置一些参数
- 浏览到包含所有测试的文件夹
- 启动命令以运行python脚本沿着所有参数
在当前状态下,接口可以设置参数,选择测试文件夹,并发送命令。但是,当python脚本运行时,脚本中包含的模块不会被加载。它在gui代码的venv中搜索模块,而不是在包含测试脚本的文件夹的venv中搜索模块。
import sys
import PySimpleGUI as sg
import infraLib
import glob
from serial.tools.list_ports import comports
import os
import subprocess
import pytest
infraData = infraLib.infraCommands()
def window_layout(ttTTY, vlbTTY):
layout_01 = [
[sg.Text('Choose TT port ', size=(30), font=('Arial', 10), justification='left')],
[sg.Combo(ttTTY, default_value='None', key='_tt_')],
[sg.Text('Choose VLB port ', size=(30), font=('Arial', 10), justification='left')],
[sg.Combo(vlbTTY, default_value='None', key='_vlb_')],
]
layout_02 = [[sg.Text('Browse to Test folder'), sg.In(size=(25, 1), enable_events=True, key='_folder_'), sg.FolderBrowse()]]
layout_03 = [
[sg.Checkbox('Default Tests', key=('_0_'), default=False)],
[sg.Checkbox('User Management Tests', key=('_1_'), default=False)]
]
layout_04 = [
[sg.Button("Run"), sg.Button('Exit'), sg.Button('Cancel')]
]
layout = [
[sg.T('Run tests on-demand', font='_ 14', justification='c', expand_x=True)],
[sg.T(" ")],
[sg.Col(layout_01, p=0, justification="left", size=(300,150))],
[sg.Col(layout_02, p=0, justification='left')],
[sg.Col(layout_03, p=0, justification='left')],
[sg.Output(size=(80, 20))],
[sg.Col(layout_04, p=0, justification='c')]
]
return layout
def run_cmd(folderPath, test_cmd, tty_tt_vlb):
os.chdir(os.path.normpath(folderPath))
print(os.getcwd())
tPath = os.path.normpath(folderPath)
if sys.platform == "win32":
tty_tt = tty_tt_vlb[0].strip('COM')
tty_vlb = tty_tt_vlb[1].strip('COM')
pCall = "python"
if sys.platform == "linux":
tty_tt = tty_tt_vlb[0]
tty_vlb = tty_tt_vlb[1]
pCall = "python3"
match (test_cmd):
case "default":
mFlag = '"default"'
cmdStr = pCall + ' -m pytest -vvv --tty ' + tty_tt + ',' + tty_vlb + ' -m=' + mFlag + ' ' + tPath + ' ' + optArg
# case "factory reset":
# mFlag = "factory"
case "userMgmt":
optArg = "UserManagement"
cmdStr = pCall + ' -m pytest -vvv --tty ' + tty_tt + ',' + tty_vlb + ' ' + tPath + ' ' + optArg
#cmdStr = pCall + ' -m pytest -vvv --tty ' + tty_tt + ',' + tty_vlb + ' -m=' + mFlag + ' ' + tPath + ' ' + optArg
print(cmdStr)
sp = subprocess.Popen(cmdStr, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=None)
out, err = sp.communicate()
if out:
print(out.decode("utf-8"))
if err:
print(err.decode("utf-8"))
ports_list = list(comports())
TTYs = []
for port in ports_list:
TTYs.append(port.name)
temp_vlb_ports = infraData.get_vlb_ports(TTYs)
temp_tt_ports = infraData.get_tt_ports(TTYs, temp_vlb_ports)
tty_vlb_ports = []
tty_tt_ports = []
for tport in TTYs:
for vKey, vValue in temp_vlb_ports.items():
if vKey == tport:
tty_vlb_ports.append(tport)
for tKey, tValue in temp_tt_ports.items():
if tKey == tport:
tty_tt_ports.append(tport)
wlayout = window_layout(tty_tt_ports, tty_vlb_ports)
window = sg.Window("Run tests on-demand", wlayout, default_element_size=(25, 1), auto_size_text=False, finalize=True)
while True:
event, values = window.read()
# End program if user closes window or presses the Exit or Cancel button
if event == 'Exit' or event == sg.WIN_CLOSED or event == 'Cancel':
break
elif values is None:
break
elif event == '_folder_':
folder = values['_folder_']
# os.chdir(values[folder])
elif event == 'Run':
justChecked = [element for element in values if values[element] == True]
tt_vlb_port = values['_tt_'], values['_vlb_']
if ('_0_') in justChecked:
run_cmd(folder, "default", tt_vlb_port)
if ('_1_') in justChecked:
# run_cmd(folder, "factory", tt_vlb_port)
run_cmd(folder, "userMgmt", tt_vlb_port)
window.close()
有什么建议可以解决这个问题吗?
谢谢,阿奇
1条答案
按热度按时间avwztpqn1#
该脚本太长,不能在我的平台上执行,所以我创建了一个新的和短的,它的工作。
注意:它调用Python来运行所选文件夹下的
test.py
。