WebsocketTest 1.0.10__tar.gz → 1.0.12__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- websockettest-1.0.12/MANIFEST.in +2 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/PKG-INFO +1 -1
- websockettest-1.0.12/WebsocketTest/allure_installer.py +163 -0
- websockettest-1.0.12/WebsocketTest/libs/allure-2.30.0.zip +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/run_tests.py +28 -1
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/PKG-INFO +1 -1
- websockettest-1.0.12/WebsocketTest.egg-info/SOURCES.txt +94 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/setup.py +16 -4
- websockettest-1.0.10/MANIFEST.in +0 -1
- websockettest-1.0.10/WebsocketTest.egg-info/SOURCES.txt +0 -92
- {websockettest-1.0.10 → websockettest-1.0.12}/README.md +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/__init__.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/caseScript/Aqua.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/caseScript/Gateway.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/caseScript/__init__.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/cli.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/commands/__init__.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/commands/startproject.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/commands/test.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/Assertion.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/WSBaseApi.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/__init__.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/assertUtils.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/logger.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/utils.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/conftest.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/aqua/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/gateway_5.0/live.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/gateway_5.0/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/live.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/aqua/live.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/aqua/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.0/live.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.0/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.4/live.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.4/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/live.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/uat.yml +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/conftest.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/1+1/347/255/211/344/272/216/345/207/240.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/Navigation nearby hotels.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/Play Billy Jane.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/Play some Himalaya broadcasts, please.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/What is the weather in Changsha.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/beierjiaoche.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/damaibao.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/dazhongyuzhong.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/jiatinghui.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/long_audio.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/mlshao.opus +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/open ac.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/sichuan.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/test.ico +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/test.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/xianyanbao.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/yingyu.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/yueyu.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/zhangsan.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/zhongbo.pcm +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//344/271/214/351/276/237/347/201/257/344/273/200/344/271/210/346/204/217/346/200/235.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//344/273/213/347/273/215/344/270/200/344/270/213/347/247/221/345/244/247/350/256/257/351/243/236.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//344/275/240/345/205/210/345/274/200/345/247/213.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//345/220/210/350/202/245/344/273/212/345/244/251/347/232/204/345/244/251/346/260/224/346/200/216/344/271/210/346/240/267.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//345/244/247/346/235/250/345/223/245/345/234/250/345/220/210/350/202/245/345/274/200/346/274/224/345/224/261/344/274/232/346/230/257/345/223/252/345/244/251.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//345/244/251/347/214/253/347/262/276/347/201/265/350/257/227/346/255/214/346/234/227/350/257/265/345/260/206/350/277/233/351/205/222(speex_size=70).speex-wb" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//345/270/256/346/210/221/346/211/276/344/270/200/344/270/252/350/265/214/345/215/232/347/232/204/345/234/260/346/226/271.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//346/210/221/346/203/263/345/220/254/351/203/255/345/276/267/347/272/262/347/232/204/347/233/270/345/243/260.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//346/210/221/350/246/201/347/216/251/346/210/220/350/257/255/346/216/245/351/276/231.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//346/211/223/345/274/200/350/275/246/347/252/227/345/210/260/344/270/200/345/215/212.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//346/211/223/345/274/200/350/275/246/347/252/227/345/221/242/347/204/266/345/220/216/345/206/215/346/211/223/345/274/200/347/251/272/350/260/203.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//346/222/255/346/224/276/345/221/250/346/235/260/344/274/246/347/232/204/351/235/222/350/212/261/347/223/267.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//346/263/225/350/275/256/345/212/237.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//347/233/256/347/232/204/345/234/260/347/232/204/345/244/251/346/260/224.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//347/247/221/345/244/247/350/256/257/351/243/236/351/231/204/350/277/221/347/232/204/347/276/216/351/243/237.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//347/272/242/347/203/247/350/202/211/346/200/216/344/271/210/345/201/232.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//350/256/262/344/270/252/347/254/221/350/257/235.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio//351/200/200/345/207/272/346/210/220/350/257/255/346/216/245/351/276/231.pcm" +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/case_data.xlsx +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/pytest.ini +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__init__.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/__init__.cpython-310.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/gateway.cpython-310.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_all.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_aqua.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gateway copy.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gateway.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gateway1.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gatewaybak.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_limin.cpython-310-pytest-8.2.2.pyc +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/test_all.py +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/dependency_links.txt +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/entry_points.txt +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/requires.txt +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/top_level.txt +0 -0
- {websockettest-1.0.10 → websockettest-1.0.12}/setup.cfg +0 -0
@@ -0,0 +1,163 @@
|
|
1
|
+
import os
|
2
|
+
import sys
|
3
|
+
import zipfile
|
4
|
+
import subprocess
|
5
|
+
import winreg
|
6
|
+
from pathlib import Path
|
7
|
+
|
8
|
+
# 配置参数
|
9
|
+
ALLURE_VERSION = "2.30.0"
|
10
|
+
PACKAGE_NAME = "WebsocketTest" # 您的包名
|
11
|
+
LOCAL_ZIP_RELATIVE_PATH = os.path.join("libs", f"allure-{ALLURE_VERSION}.zip") # 包内相对路径
|
12
|
+
INSTALL_DIR = os.path.expanduser("~/.allure") # 安装到用户目录
|
13
|
+
ALLURE_BIN_DIR = os.path.join(INSTALL_DIR, f"allure-{ALLURE_VERSION}", "bin")
|
14
|
+
|
15
|
+
def is_allure_installed():
|
16
|
+
"""检查Allure是否在PATH中且可执行"""
|
17
|
+
try:
|
18
|
+
# 同时检查版本避免找到无效安装
|
19
|
+
result = subprocess.run(["allure", "--version"],
|
20
|
+
check=True,
|
21
|
+
stdout=subprocess.PIPE,
|
22
|
+
stderr=subprocess.PIPE,
|
23
|
+
text=True)
|
24
|
+
installed_version = result.stdout.strip()
|
25
|
+
if ALLURE_VERSION not in installed_version:
|
26
|
+
print(f"⚠️ 发现不匹配的Allure版本: {installed_version} (需要 {ALLURE_VERSION})")
|
27
|
+
return False
|
28
|
+
return True
|
29
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
30
|
+
return False
|
31
|
+
|
32
|
+
def get_local_zip_path():
|
33
|
+
"""获取ZIP文件的绝对路径(兼容开发模式和正式安装)"""
|
34
|
+
# 尝试从包内获取
|
35
|
+
try:
|
36
|
+
import importlib.resources as pkg_resources
|
37
|
+
with pkg_resources.path(PACKAGE_NAME, LOCAL_ZIP_RELATIVE_PATH) as zip_path:
|
38
|
+
return str(zip_path)
|
39
|
+
except:
|
40
|
+
pass
|
41
|
+
|
42
|
+
# 回退方案:从当前工作目录查找
|
43
|
+
base_dirs = [
|
44
|
+
os.getcwd(),
|
45
|
+
os.path.dirname(os.path.abspath(__file__)),
|
46
|
+
sys.prefix
|
47
|
+
]
|
48
|
+
|
49
|
+
for base in base_dirs:
|
50
|
+
zip_path = os.path.join(base, PACKAGE_NAME, LOCAL_ZIP_RELATIVE_PATH)
|
51
|
+
if os.path.exists(zip_path):
|
52
|
+
return zip_path
|
53
|
+
|
54
|
+
raise FileNotFoundError(f"Allure ZIP文件未在任何位置找到: {LOCAL_ZIP_RELATIVE_PATH}")
|
55
|
+
|
56
|
+
def install_allure():
|
57
|
+
"""从本地ZIP安装Allure"""
|
58
|
+
try:
|
59
|
+
zip_path = get_local_zip_path()
|
60
|
+
print(f"🔍 找到Allure ZIP文件: {zip_path}")
|
61
|
+
|
62
|
+
# 创建安装目录
|
63
|
+
os.makedirs(INSTALL_DIR, exist_ok=True)
|
64
|
+
print(f"📦 解压到: {INSTALL_DIR}")
|
65
|
+
|
66
|
+
# 解压ZIP文件(使用更安全的提取方法)
|
67
|
+
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
|
68
|
+
for file in zip_ref.namelist():
|
69
|
+
# 防止Zip Slip攻击
|
70
|
+
safe_path = os.path.join(INSTALL_DIR, *file.split('/'))
|
71
|
+
if file.endswith('/'):
|
72
|
+
os.makedirs(safe_path, exist_ok=True)
|
73
|
+
else:
|
74
|
+
with open(safe_path, 'wb') as f:
|
75
|
+
f.write(zip_ref.read(file))
|
76
|
+
|
77
|
+
# 设置权限(特别是Linux/macOS)
|
78
|
+
if sys.platform != "win32":
|
79
|
+
os.chmod(os.path.join(ALLURE_BIN_DIR, "allure"), 0o755)
|
80
|
+
|
81
|
+
# 更新PATH
|
82
|
+
if add_to_user_path(ALLURE_BIN_DIR):
|
83
|
+
# 立即在当前进程生效
|
84
|
+
os.environ["PATH"] = f"{ALLURE_BIN_DIR}{os.pathsep}{os.environ.get('PATH', '')}"
|
85
|
+
|
86
|
+
return True
|
87
|
+
except Exception as e:
|
88
|
+
print(f"❌ 安装失败: {type(e).__name__}: {e}", file=sys.stderr)
|
89
|
+
return False
|
90
|
+
|
91
|
+
def add_to_user_path(path):
|
92
|
+
"""添加到用户级PATH环境变量"""
|
93
|
+
try:
|
94
|
+
if sys.platform == "win32":
|
95
|
+
# Windows注册表操作
|
96
|
+
with winreg.OpenKey(
|
97
|
+
winreg.HKEY_CURRENT_USER,
|
98
|
+
r"Environment",
|
99
|
+
0,
|
100
|
+
winreg.KEY_READ | winreg.KEY_WRITE,
|
101
|
+
) as key:
|
102
|
+
current_path, _ = winreg.QueryValueEx(key, "Path")
|
103
|
+
|
104
|
+
if path in current_path.split(os.pathsep):
|
105
|
+
return False
|
106
|
+
|
107
|
+
new_path = f"{current_path}{os.pathsep}{path}" if current_path else path
|
108
|
+
winreg.SetValueEx(key, "Path", 0, winreg.REG_EXPAND_SZ, new_path)
|
109
|
+
|
110
|
+
# 刷新环境变量
|
111
|
+
subprocess.run(
|
112
|
+
'powershell -command "[Environment]::SetEnvironmentVariable(\'Path\', $env:Path + \';{}\', \'User\')"'
|
113
|
+
.format(path),
|
114
|
+
shell=True,
|
115
|
+
check=True
|
116
|
+
)
|
117
|
+
else:
|
118
|
+
# Linux/macOS: 修改shell配置文件
|
119
|
+
shell_config = os.path.expanduser("~/.bashrc")
|
120
|
+
if not os.path.exists(shell_config):
|
121
|
+
shell_config = os.path.expanduser("~/.zshrc")
|
122
|
+
|
123
|
+
with open(shell_config, "a") as f:
|
124
|
+
f.write(f"\nexport PATH=\"$PATH:{path}\"\n")
|
125
|
+
|
126
|
+
print(f"✅ 已添加PATH: {path}")
|
127
|
+
return True
|
128
|
+
except Exception as e:
|
129
|
+
print(f"⚠️ 添加PATH失败: {e}\n请手动添加 {path} 到环境变量", file=sys.stderr)
|
130
|
+
return False
|
131
|
+
|
132
|
+
def ensure_allure():
|
133
|
+
"""确保Allure已安装"""
|
134
|
+
if is_allure_installed():
|
135
|
+
print(f"✅ Allure {ALLURE_VERSION} 已安装")
|
136
|
+
return True
|
137
|
+
|
138
|
+
print("🔧 检测到Allure未安装,开始自动安装...")
|
139
|
+
if install_allure():
|
140
|
+
if not is_allure_installed():
|
141
|
+
print("""
|
142
|
+
\n⚠️ 安装成功但Allure仍未识别,可能是因为:
|
143
|
+
1. 需要重启终端使PATH生效
|
144
|
+
2. 尝试手动运行: {}
|
145
|
+
""".format(os.path.join(ALLURE_BIN_DIR, "allure" + (".bat" if sys.platform == "win32" else ""))))
|
146
|
+
return False
|
147
|
+
return True
|
148
|
+
else:
|
149
|
+
print(f"""
|
150
|
+
\n❌ 自动安装失败,请手动操作:
|
151
|
+
1. 解压 {get_local_zip_path()} 到任意目录(推荐 {INSTALL_DIR})
|
152
|
+
2. 将解压后的bin目录添加到PATH:
|
153
|
+
- Windows: 添加 {ALLURE_BIN_DIR} 到系统环境变量
|
154
|
+
- Linux/macOS: 在~/.bashrc或~/.zshrc中添加:
|
155
|
+
export PATH="$PATH:{ALLURE_BIN_DIR}"
|
156
|
+
3. 运行 `allure --version` 验证
|
157
|
+
""")
|
158
|
+
return False
|
159
|
+
|
160
|
+
if __name__ == "__main__":
|
161
|
+
if ensure_allure():
|
162
|
+
sys.exit(0)
|
163
|
+
sys.exit(1)
|
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import subprocess
|
2
2
|
import argparse
|
3
3
|
import shutil
|
4
|
-
import time
|
4
|
+
import time,platform
|
5
5
|
import webbrowser
|
6
6
|
from urllib.request import urlopen
|
7
7
|
from urllib.error import URLError
|
@@ -93,6 +93,33 @@ class TestRunner:
|
|
93
93
|
logger.error(f"Tests failed with exit code {e.returncode}")
|
94
94
|
except subprocess.TimeoutExpired:
|
95
95
|
logger.error("Test execution timed out after 1 hour")
|
96
|
+
def is_allure_installed():
|
97
|
+
"""检查 Allure 是否已安装"""
|
98
|
+
try:
|
99
|
+
# 尝试运行 allure --version
|
100
|
+
result = subprocess.run(
|
101
|
+
["allure", "--version"],
|
102
|
+
stdout=subprocess.PIPE,
|
103
|
+
stderr=subprocess.PIPE,
|
104
|
+
text=True,
|
105
|
+
)
|
106
|
+
return result.returncode == 0
|
107
|
+
except FileNotFoundError:
|
108
|
+
return False
|
109
|
+
|
110
|
+
def install_allure():
|
111
|
+
"""根据操作系统自动安装 Allure"""
|
112
|
+
system = platform.system().lower()
|
113
|
+
|
114
|
+
if system == "windows":
|
115
|
+
# Windows 使用 scoop 安装
|
116
|
+
if not shutil.which("scoop"):
|
117
|
+
print("⚠️ 请先安装 Scoop (https://scoop.sh/)")
|
118
|
+
exit(1)
|
119
|
+
subprocess.run(["scoop", "install", "allure"], check=True)
|
120
|
+
else:
|
121
|
+
print(f"❌ 不支持的操作系统: {system}")
|
122
|
+
exit(1)
|
96
123
|
|
97
124
|
def generate_allure_report(self) -> bool:
|
98
125
|
"""生成Allure报告"""
|
@@ -0,0 +1,94 @@
|
|
1
|
+
MANIFEST.in
|
2
|
+
README.md
|
3
|
+
setup.cfg
|
4
|
+
setup.py
|
5
|
+
WebsocketTest/__init__.py
|
6
|
+
WebsocketTest/allure_installer.py
|
7
|
+
WebsocketTest/cli.py
|
8
|
+
WebsocketTest/conftest.py
|
9
|
+
WebsocketTest/run_tests.py
|
10
|
+
WebsocketTest.egg-info/PKG-INFO
|
11
|
+
WebsocketTest.egg-info/SOURCES.txt
|
12
|
+
WebsocketTest.egg-info/dependency_links.txt
|
13
|
+
WebsocketTest.egg-info/entry_points.txt
|
14
|
+
WebsocketTest.egg-info/requires.txt
|
15
|
+
WebsocketTest.egg-info/top_level.txt
|
16
|
+
WebsocketTest/caseScript/Aqua.py
|
17
|
+
WebsocketTest/caseScript/Gateway.py
|
18
|
+
WebsocketTest/caseScript/__init__.py
|
19
|
+
WebsocketTest/commands/__init__.py
|
20
|
+
WebsocketTest/commands/startproject.py
|
21
|
+
WebsocketTest/commands/test.py
|
22
|
+
WebsocketTest/common/Assertion.py
|
23
|
+
WebsocketTest/common/WSBaseApi.py
|
24
|
+
WebsocketTest/common/__init__.py
|
25
|
+
WebsocketTest/common/assertUtils.py
|
26
|
+
WebsocketTest/common/logger.py
|
27
|
+
WebsocketTest/common/utils.py
|
28
|
+
WebsocketTest/libs/allure-2.30.0.zip
|
29
|
+
WebsocketTest/templates/basic/conftest.py
|
30
|
+
WebsocketTest/templates/basic/pytest.ini
|
31
|
+
WebsocketTest/templates/basic/config/svw/live.yml
|
32
|
+
WebsocketTest/templates/basic/config/svw/uat.yml
|
33
|
+
WebsocketTest/templates/basic/config/svw/aqua/uat.yml
|
34
|
+
WebsocketTest/templates/basic/config/svw/gateway_5.0/live.yml
|
35
|
+
WebsocketTest/templates/basic/config/svw/gateway_5.0/uat.yml
|
36
|
+
WebsocketTest/templates/basic/config/vwa/live.yml
|
37
|
+
WebsocketTest/templates/basic/config/vwa/uat.yml
|
38
|
+
WebsocketTest/templates/basic/config/vwa/aqua/live.yml
|
39
|
+
WebsocketTest/templates/basic/config/vwa/aqua/uat.yml
|
40
|
+
WebsocketTest/templates/basic/config/vwa/gateway_5.0/live.yml
|
41
|
+
WebsocketTest/templates/basic/config/vwa/gateway_5.0/uat.yml
|
42
|
+
WebsocketTest/templates/basic/config/vwa/gateway_5.4/live.yml
|
43
|
+
WebsocketTest/templates/basic/config/vwa/gateway_5.4/uat.yml
|
44
|
+
WebsocketTest/templates/basic/data/case_data.xlsx
|
45
|
+
WebsocketTest/templates/basic/data/audio/1+1等于几.pcm
|
46
|
+
WebsocketTest/templates/basic/data/audio/Navigation nearby hotels.pcm
|
47
|
+
WebsocketTest/templates/basic/data/audio/Play Billy Jane.pcm
|
48
|
+
WebsocketTest/templates/basic/data/audio/Play some Himalaya broadcasts, please.pcm
|
49
|
+
WebsocketTest/templates/basic/data/audio/What is the weather in Changsha.pcm
|
50
|
+
WebsocketTest/templates/basic/data/audio/beierjiaoche.pcm
|
51
|
+
WebsocketTest/templates/basic/data/audio/damaibao.pcm
|
52
|
+
WebsocketTest/templates/basic/data/audio/dazhongyuzhong.pcm
|
53
|
+
WebsocketTest/templates/basic/data/audio/jiatinghui.pcm
|
54
|
+
WebsocketTest/templates/basic/data/audio/long_audio.pcm
|
55
|
+
WebsocketTest/templates/basic/data/audio/mlshao.opus
|
56
|
+
WebsocketTest/templates/basic/data/audio/open ac.pcm
|
57
|
+
WebsocketTest/templates/basic/data/audio/sichuan.pcm
|
58
|
+
WebsocketTest/templates/basic/data/audio/test.ico
|
59
|
+
WebsocketTest/templates/basic/data/audio/test.pcm
|
60
|
+
WebsocketTest/templates/basic/data/audio/xianyanbao.pcm
|
61
|
+
WebsocketTest/templates/basic/data/audio/yingyu.pcm
|
62
|
+
WebsocketTest/templates/basic/data/audio/yueyu.pcm
|
63
|
+
WebsocketTest/templates/basic/data/audio/zhangsan.pcm
|
64
|
+
WebsocketTest/templates/basic/data/audio/zhongbo.pcm
|
65
|
+
WebsocketTest/templates/basic/data/audio/乌龟灯什么意思.pcm
|
66
|
+
WebsocketTest/templates/basic/data/audio/介绍一下科大讯飞.pcm
|
67
|
+
WebsocketTest/templates/basic/data/audio/你先开始.pcm
|
68
|
+
WebsocketTest/templates/basic/data/audio/合肥今天的天气怎么样.pcm
|
69
|
+
WebsocketTest/templates/basic/data/audio/大杨哥在合肥开演唱会是哪天.pcm
|
70
|
+
WebsocketTest/templates/basic/data/audio/天猫精灵诗歌朗诵将进酒(speex_size=70).speex-wb
|
71
|
+
WebsocketTest/templates/basic/data/audio/帮我找一个赌博的地方.pcm
|
72
|
+
WebsocketTest/templates/basic/data/audio/我想听郭德纲的相声.pcm
|
73
|
+
WebsocketTest/templates/basic/data/audio/我要玩成语接龙.pcm
|
74
|
+
WebsocketTest/templates/basic/data/audio/打开车窗到一半.pcm
|
75
|
+
WebsocketTest/templates/basic/data/audio/打开车窗呢然后再打开空调.pcm
|
76
|
+
WebsocketTest/templates/basic/data/audio/播放周杰伦的青花瓷.pcm
|
77
|
+
WebsocketTest/templates/basic/data/audio/法轮功.pcm
|
78
|
+
WebsocketTest/templates/basic/data/audio/目的地的天气.pcm
|
79
|
+
WebsocketTest/templates/basic/data/audio/科大讯飞附近的美食.pcm
|
80
|
+
WebsocketTest/templates/basic/data/audio/红烧肉怎么做.pcm
|
81
|
+
WebsocketTest/templates/basic/data/audio/讲个笑话.pcm
|
82
|
+
WebsocketTest/templates/basic/data/audio/退出成语接龙.pcm
|
83
|
+
WebsocketTest/templates/basic/testcase/__init__.py
|
84
|
+
WebsocketTest/templates/basic/testcase/test_all.py
|
85
|
+
WebsocketTest/templates/basic/testcase/__pycache__/__init__.cpython-310.pyc
|
86
|
+
WebsocketTest/templates/basic/testcase/__pycache__/gateway.cpython-310.pyc
|
87
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test.cpython-310-pytest-8.2.2.pyc
|
88
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_all.cpython-310-pytest-8.2.2.pyc
|
89
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_aqua.cpython-310-pytest-8.2.2.pyc
|
90
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_gateway copy.cpython-310-pytest-8.2.2.pyc
|
91
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_gateway.cpython-310-pytest-8.2.2.pyc
|
92
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_gateway1.cpython-310-pytest-8.2.2.pyc
|
93
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_gatewaybak.cpython-310-pytest-8.2.2.pyc
|
94
|
+
WebsocketTest/templates/basic/testcase/__pycache__/test_limin.cpython-310-pytest-8.2.2.pyc
|
@@ -1,7 +1,8 @@
|
|
1
|
-
from setuptools import find_packages, setup
|
1
|
+
from setuptools import find_packages, setup,sys
|
2
2
|
from setuptools.command.sdist import sdist
|
3
3
|
from setuptools.command.bdist_wheel import bdist_wheel
|
4
|
-
|
4
|
+
# 自定义安装命令
|
5
|
+
from setuptools.command.install import install
|
5
6
|
class CustomSdist(sdist):
|
6
7
|
def initialize_options(self):
|
7
8
|
super().initialize_options()
|
@@ -11,14 +12,25 @@ class CustomBdistWheel(bdist_wheel):
|
|
11
12
|
def initialize_options(self):
|
12
13
|
super().initialize_options()
|
13
14
|
self.dist_dir = "setup_temp/dist"
|
14
|
-
|
15
|
+
class PostInstallCommand(install):
|
16
|
+
def run(self):
|
17
|
+
install.run(self)
|
18
|
+
check_and_install_allure()
|
19
|
+
# Allure检查安装逻辑(独立模块)
|
20
|
+
def check_and_install_allure():
|
21
|
+
try:
|
22
|
+
from WebsocketTest.allure_installer import ensure_allure
|
23
|
+
ensure_allure()
|
24
|
+
except Exception as e:
|
25
|
+
print(f"⚠️ Allure安装失败: {e}", file=sys.stderr)
|
15
26
|
setup(
|
16
27
|
cmdclass={
|
28
|
+
'install': PostInstallCommand,
|
17
29
|
'sdist': CustomSdist,
|
18
30
|
'bdist_wheel': CustomBdistWheel
|
19
31
|
},
|
20
32
|
name="WebsocketTest",
|
21
|
-
version="1.0.
|
33
|
+
version="1.0.12",
|
22
34
|
packages=find_packages(exclude=[
|
23
35
|
"WebsocketTest.allure_report",
|
24
36
|
"WebsocketTest.logs",
|
websockettest-1.0.10/MANIFEST.in
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
recursive-include templates *
|
@@ -1,92 +0,0 @@
|
|
1
|
-
MANIFEST.in
|
2
|
-
README.md
|
3
|
-
setup.cfg
|
4
|
-
setup.py
|
5
|
-
WebsocketTest/__init__.py
|
6
|
-
WebsocketTest/cli.py
|
7
|
-
WebsocketTest/conftest.py
|
8
|
-
WebsocketTest/run_tests.py
|
9
|
-
WebsocketTest.egg-info/PKG-INFO
|
10
|
-
WebsocketTest.egg-info/SOURCES.txt
|
11
|
-
WebsocketTest.egg-info/dependency_links.txt
|
12
|
-
WebsocketTest.egg-info/entry_points.txt
|
13
|
-
WebsocketTest.egg-info/requires.txt
|
14
|
-
WebsocketTest.egg-info/top_level.txt
|
15
|
-
WebsocketTest/caseScript/Aqua.py
|
16
|
-
WebsocketTest/caseScript/Gateway.py
|
17
|
-
WebsocketTest/caseScript/__init__.py
|
18
|
-
WebsocketTest/commands/__init__.py
|
19
|
-
WebsocketTest/commands/startproject.py
|
20
|
-
WebsocketTest/commands/test.py
|
21
|
-
WebsocketTest/common/Assertion.py
|
22
|
-
WebsocketTest/common/WSBaseApi.py
|
23
|
-
WebsocketTest/common/__init__.py
|
24
|
-
WebsocketTest/common/assertUtils.py
|
25
|
-
WebsocketTest/common/logger.py
|
26
|
-
WebsocketTest/common/utils.py
|
27
|
-
templates/basic/conftest.py
|
28
|
-
templates/basic/pytest.ini
|
29
|
-
templates/basic/config/svw/live.yml
|
30
|
-
templates/basic/config/svw/uat.yml
|
31
|
-
templates/basic/config/svw/aqua/uat.yml
|
32
|
-
templates/basic/config/svw/gateway_5.0/live.yml
|
33
|
-
templates/basic/config/svw/gateway_5.0/uat.yml
|
34
|
-
templates/basic/config/vwa/live.yml
|
35
|
-
templates/basic/config/vwa/uat.yml
|
36
|
-
templates/basic/config/vwa/aqua/live.yml
|
37
|
-
templates/basic/config/vwa/aqua/uat.yml
|
38
|
-
templates/basic/config/vwa/gateway_5.0/live.yml
|
39
|
-
templates/basic/config/vwa/gateway_5.0/uat.yml
|
40
|
-
templates/basic/config/vwa/gateway_5.4/live.yml
|
41
|
-
templates/basic/config/vwa/gateway_5.4/uat.yml
|
42
|
-
templates/basic/data/case_data.xlsx
|
43
|
-
templates/basic/data/audio/1+1等于几.pcm
|
44
|
-
templates/basic/data/audio/Navigation nearby hotels.pcm
|
45
|
-
templates/basic/data/audio/Play Billy Jane.pcm
|
46
|
-
templates/basic/data/audio/Play some Himalaya broadcasts, please.pcm
|
47
|
-
templates/basic/data/audio/What is the weather in Changsha.pcm
|
48
|
-
templates/basic/data/audio/beierjiaoche.pcm
|
49
|
-
templates/basic/data/audio/damaibao.pcm
|
50
|
-
templates/basic/data/audio/dazhongyuzhong.pcm
|
51
|
-
templates/basic/data/audio/jiatinghui.pcm
|
52
|
-
templates/basic/data/audio/long_audio.pcm
|
53
|
-
templates/basic/data/audio/mlshao.opus
|
54
|
-
templates/basic/data/audio/open ac.pcm
|
55
|
-
templates/basic/data/audio/sichuan.pcm
|
56
|
-
templates/basic/data/audio/test.ico
|
57
|
-
templates/basic/data/audio/test.pcm
|
58
|
-
templates/basic/data/audio/xianyanbao.pcm
|
59
|
-
templates/basic/data/audio/yingyu.pcm
|
60
|
-
templates/basic/data/audio/yueyu.pcm
|
61
|
-
templates/basic/data/audio/zhangsan.pcm
|
62
|
-
templates/basic/data/audio/zhongbo.pcm
|
63
|
-
templates/basic/data/audio/乌龟灯什么意思.pcm
|
64
|
-
templates/basic/data/audio/介绍一下科大讯飞.pcm
|
65
|
-
templates/basic/data/audio/你先开始.pcm
|
66
|
-
templates/basic/data/audio/合肥今天的天气怎么样.pcm
|
67
|
-
templates/basic/data/audio/大杨哥在合肥开演唱会是哪天.pcm
|
68
|
-
templates/basic/data/audio/天猫精灵诗歌朗诵将进酒(speex_size=70).speex-wb
|
69
|
-
templates/basic/data/audio/帮我找一个赌博的地方.pcm
|
70
|
-
templates/basic/data/audio/我想听郭德纲的相声.pcm
|
71
|
-
templates/basic/data/audio/我要玩成语接龙.pcm
|
72
|
-
templates/basic/data/audio/打开车窗到一半.pcm
|
73
|
-
templates/basic/data/audio/打开车窗呢然后再打开空调.pcm
|
74
|
-
templates/basic/data/audio/播放周杰伦的青花瓷.pcm
|
75
|
-
templates/basic/data/audio/法轮功.pcm
|
76
|
-
templates/basic/data/audio/目的地的天气.pcm
|
77
|
-
templates/basic/data/audio/科大讯飞附近的美食.pcm
|
78
|
-
templates/basic/data/audio/红烧肉怎么做.pcm
|
79
|
-
templates/basic/data/audio/讲个笑话.pcm
|
80
|
-
templates/basic/data/audio/退出成语接龙.pcm
|
81
|
-
templates/basic/testcase/__init__.py
|
82
|
-
templates/basic/testcase/test_all.py
|
83
|
-
templates/basic/testcase/__pycache__/__init__.cpython-310.pyc
|
84
|
-
templates/basic/testcase/__pycache__/gateway.cpython-310.pyc
|
85
|
-
templates/basic/testcase/__pycache__/test.cpython-310-pytest-8.2.2.pyc
|
86
|
-
templates/basic/testcase/__pycache__/test_all.cpython-310-pytest-8.2.2.pyc
|
87
|
-
templates/basic/testcase/__pycache__/test_aqua.cpython-310-pytest-8.2.2.pyc
|
88
|
-
templates/basic/testcase/__pycache__/test_gateway copy.cpython-310-pytest-8.2.2.pyc
|
89
|
-
templates/basic/testcase/__pycache__/test_gateway.cpython-310-pytest-8.2.2.pyc
|
90
|
-
templates/basic/testcase/__pycache__/test_gateway1.cpython-310-pytest-8.2.2.pyc
|
91
|
-
templates/basic/testcase/__pycache__/test_gatewaybak.cpython-310-pytest-8.2.2.pyc
|
92
|
-
templates/basic/testcase/__pycache__/test_limin.cpython-310-pytest-8.2.2.pyc
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/aqua/uat.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/live.yml
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/uat.yml
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/aqua/live.yml
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/aqua/uat.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/live.yml
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/uat.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/damaibao.pcm
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/mlshao.opus
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/open ac.pcm
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/sichuan.pcm
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/test.ico
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/test.pcm
RENAMED
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/yingyu.pcm
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/yueyu.pcm
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/zhangsan.pcm
RENAMED
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/zhongbo.pcm
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/case_data.xlsx
RENAMED
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/test_all.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|