feat: requirements analysis, submission checks (stability stress test), AI inspection pipeline
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
"""真实 API 冒烟测试: 起服务 → 注册 → 建要求 → 提交 → 轮询报告"""
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
BASE = "http://127.0.0.1:8765"
|
||||
|
||||
|
||||
def main():
|
||||
import flask
|
||||
if not flask:
|
||||
pass
|
||||
server = subprocess.Popen(
|
||||
[sys.executable, "manage.py", "runserver", "127.0.0.1:8765", "--noreload"],
|
||||
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
|
||||
cwd=os.path.dirname(os.path.abspath(__file__)),
|
||||
)
|
||||
try:
|
||||
for _ in range(30):
|
||||
try:
|
||||
requests.get(BASE + "/api/requirements/", timeout=1)
|
||||
break
|
||||
except requests.RequestException:
|
||||
time.sleep(1)
|
||||
s = requests.Session()
|
||||
r = s.post(BASE + "/api/auth/token/", data={"username": "smoke_user", "password": ""})
|
||||
if r.status_code != 200:
|
||||
from django.contrib.auth.models import User
|
||||
import django
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ojplatform.settings")
|
||||
django.setup()
|
||||
User.objects.create_user("smoke_user", password="pass12345")
|
||||
r = s.post(BASE + "/api/auth/token/", data={"username": "smoke_user", "password": "pass12345"})
|
||||
assert r.status_code == 200, r.text
|
||||
token = r.json()["token"]
|
||||
s.headers["Authorization"] = f"Token {token}"
|
||||
|
||||
r = s.post(BASE + "/api/requirements/create/", json={
|
||||
"title": "冒烟作业",
|
||||
"content": "实现 web 服务, 首页返回 ok",
|
||||
})
|
||||
assert r.status_code == 201, r.text
|
||||
req_id = r.json()["id"]
|
||||
print("requirement:", req_id, r.json()["spec"].get("stability", {}).get("enabled"))
|
||||
|
||||
with open("/tmp/opencode/smoke/proj.tar", "rb") as fh:
|
||||
r = s.post(f"{BASE}/api/requirements/{req_id}/submissions/",
|
||||
data={"name": "smoke"}, files={"file": ("proj.tar", fh, "application/x-tar")})
|
||||
assert r.status_code == 201, r.text
|
||||
sub_id = r.json()["id"]
|
||||
|
||||
deadline = time.time() + 300
|
||||
while time.time() < deadline:
|
||||
r = s.get(f"{BASE}/api/submissions/{sub_id}/report/")
|
||||
if r.status_code == 200:
|
||||
print("REPORT OK:", str(r.json())[:400])
|
||||
return 0
|
||||
time.sleep(3)
|
||||
print("TIMEOUT")
|
||||
return 1
|
||||
finally:
|
||||
server.terminate()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user