test(paper): Phase 3c 端到端冒烟脚本(login+create+equity/trades/strategies)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""Phase 3c 模拟盘端到端冒烟(部署后跑)。
|
||||
|
||||
流程:login → POST /paper/create → GET /paper/{id} → /equity → /trades → /strategies
|
||||
用法:python scripts/smoke_phase3c.py https://vnpy.mysanguo.top admin <password>
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
import urllib.request
|
||||
|
||||
|
||||
def _req(method: str, base: str, path: str, token: str | None, body=None):
|
||||
url = f"{base}/api/v1{path}"
|
||||
headers = {"Content-Type": "application/json"}
|
||||
if token:
|
||||
headers["Authorization"] = f"Bearer {token}"
|
||||
data = json.dumps(body).encode() if body is not None else None
|
||||
req = urllib.request.Request(url, data=data, headers=headers, method=method)
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
return json.loads(resp.read())
|
||||
|
||||
|
||||
def main() -> int:
|
||||
base = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:8000"
|
||||
user = sys.argv[2] if len(sys.argv) > 2 else "admin"
|
||||
pwd = sys.argv[3] if len(sys.argv) > 3 else "admin"
|
||||
|
||||
tok = _req("POST", base, "/auth/login", None, {"username": user, "password": pwd})["token"]
|
||||
print("✓ login")
|
||||
|
||||
aid = _req("POST", base, "/paper/create", tok, {
|
||||
"mode": "replay", "interval": "d", "symbols": ["600000"],
|
||||
"strategies": [{"name": "DoubleMa", "symbol": "600000",
|
||||
"match_session": "next_open"}],
|
||||
"start": "2024-01-01", "end": "2024-06-30", "initial_capital": 1_000_000,
|
||||
})["account_id"]
|
||||
print(f"✓ create paper #{aid}")
|
||||
|
||||
assert _req("GET", base, f"/paper/{aid}", tok)["id"] == aid
|
||||
print("✓ get paper")
|
||||
assert isinstance(_req("GET", base, f"/paper/{aid}/equity", tok), list)
|
||||
assert isinstance(_req("GET", base, f"/paper/{aid}/trades", tok), list)
|
||||
assert isinstance(_req("GET", base, f"/paper/{aid}/strategies", tok), list)
|
||||
print("✓ equity / trades / strategies")
|
||||
print(f"\n✅ Phase 3c 冒烟通过(account #{aid})")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user