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.
Files changed (97) hide show
  1. websockettest-1.0.12/MANIFEST.in +2 -0
  2. {websockettest-1.0.10 → websockettest-1.0.12}/PKG-INFO +1 -1
  3. websockettest-1.0.12/WebsocketTest/allure_installer.py +163 -0
  4. websockettest-1.0.12/WebsocketTest/libs/allure-2.30.0.zip +0 -0
  5. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/run_tests.py +28 -1
  6. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/PKG-INFO +1 -1
  7. websockettest-1.0.12/WebsocketTest.egg-info/SOURCES.txt +94 -0
  8. {websockettest-1.0.10 → websockettest-1.0.12}/setup.py +16 -4
  9. websockettest-1.0.10/MANIFEST.in +0 -1
  10. websockettest-1.0.10/WebsocketTest.egg-info/SOURCES.txt +0 -92
  11. {websockettest-1.0.10 → websockettest-1.0.12}/README.md +0 -0
  12. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/__init__.py +0 -0
  13. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/caseScript/Aqua.py +0 -0
  14. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/caseScript/Gateway.py +0 -0
  15. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/caseScript/__init__.py +0 -0
  16. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/cli.py +0 -0
  17. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/commands/__init__.py +0 -0
  18. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/commands/startproject.py +0 -0
  19. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/commands/test.py +0 -0
  20. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/Assertion.py +0 -0
  21. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/WSBaseApi.py +0 -0
  22. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/__init__.py +0 -0
  23. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/assertUtils.py +0 -0
  24. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/logger.py +0 -0
  25. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/common/utils.py +0 -0
  26. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest/conftest.py +0 -0
  27. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/aqua/uat.yml +0 -0
  28. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/gateway_5.0/live.yml +0 -0
  29. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/gateway_5.0/uat.yml +0 -0
  30. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/live.yml +0 -0
  31. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/svw/uat.yml +0 -0
  32. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/aqua/live.yml +0 -0
  33. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/aqua/uat.yml +0 -0
  34. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.0/live.yml +0 -0
  35. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.0/uat.yml +0 -0
  36. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.4/live.yml +0 -0
  37. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/gateway_5.4/uat.yml +0 -0
  38. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/live.yml +0 -0
  39. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/config/vwa/uat.yml +0 -0
  40. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/conftest.py +0 -0
  41. {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
  42. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/Navigation nearby hotels.pcm +0 -0
  43. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/Play Billy Jane.pcm +0 -0
  44. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/Play some Himalaya broadcasts, please.pcm +0 -0
  45. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/What is the weather in Changsha.pcm +0 -0
  46. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/beierjiaoche.pcm +0 -0
  47. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/damaibao.pcm +0 -0
  48. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/dazhongyuzhong.pcm +0 -0
  49. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/jiatinghui.pcm +0 -0
  50. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/long_audio.pcm +0 -0
  51. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/mlshao.opus +0 -0
  52. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/open ac.pcm +0 -0
  53. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/sichuan.pcm +0 -0
  54. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/test.ico +0 -0
  55. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/test.pcm +0 -0
  56. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/xianyanbao.pcm +0 -0
  57. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/yingyu.pcm +0 -0
  58. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/yueyu.pcm +0 -0
  59. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/zhangsan.pcm +0 -0
  60. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/audio/zhongbo.pcm +0 -0
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/data/case_data.xlsx +0 -0
  80. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/pytest.ini +0 -0
  81. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__init__.py +0 -0
  82. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/__init__.cpython-310.pyc +0 -0
  83. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/gateway.cpython-310.pyc +0 -0
  84. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test.cpython-310-pytest-8.2.2.pyc +0 -0
  85. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_all.cpython-310-pytest-8.2.2.pyc +0 -0
  86. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_aqua.cpython-310-pytest-8.2.2.pyc +0 -0
  87. {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
  88. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gateway.cpython-310-pytest-8.2.2.pyc +0 -0
  89. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gateway1.cpython-310-pytest-8.2.2.pyc +0 -0
  90. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_gatewaybak.cpython-310-pytest-8.2.2.pyc +0 -0
  91. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/__pycache__/test_limin.cpython-310-pytest-8.2.2.pyc +0 -0
  92. {websockettest-1.0.10 → websockettest-1.0.12/WebsocketTest}/templates/basic/testcase/test_all.py +0 -0
  93. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/dependency_links.txt +0 -0
  94. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/entry_points.txt +0 -0
  95. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/requires.txt +0 -0
  96. {websockettest-1.0.10 → websockettest-1.0.12}/WebsocketTest.egg-info/top_level.txt +0 -0
  97. {websockettest-1.0.10 → websockettest-1.0.12}/setup.cfg +0 -0
@@ -0,0 +1,2 @@
1
+ recursive-include WebsocketTest/templates *
2
+ recursive-include WebsocketTest/libs *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: WebsocketTest
3
- Version: 1.0.10
3
+ Version: 1.0.12
4
4
  Summary: websocket api autotest
5
5
  Requires-Dist: allure_python_commons==2.13.5
6
6
  Requires-Dist: numpy==2.2.4
@@ -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)
@@ -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报告"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: WebsocketTest
3
- Version: 1.0.10
3
+ Version: 1.0.12
4
4
  Summary: websocket api autotest
5
5
  Requires-Dist: allure_python_commons==2.13.5
6
6
  Requires-Dist: numpy==2.2.4
@@ -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.10",
33
+ version="1.0.12",
22
34
  packages=find_packages(exclude=[
23
35
  "WebsocketTest.allure_report",
24
36
  "WebsocketTest.logs",
@@ -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