# -*- coding: utf-8 -*- """票 12 不符③冒烟补充:star 中间态逐拍验证(每步新连接,避开 REPEATABLE READ 快照冻结,坑㉕)。 必备环境变量: CRM_TOKEN Bearer token(经 crm-auth 登录接口获取) CRM_SMOKE_CID 目标客户 id(任意可操作客户;或先跑 smoke-t12m.py 自动建) 可选: CRM_BASE 默认 http://localhost:8080 CRM_DB_HOST/CRM_DB_PORT/CRM_DB_USER/CRM_DB_PASSWORD/CRM_DB_NAME 同 smoke-t12m.py PowerShell 示例: $env:CRM_TOKEN='...'; $env:CRM_SMOKE_CID='...'; $env:CRM_DB_PASSWORD='...' python .scratch/customer-module/tools/smoke-t12m2.py """ import json import os import urllib.request BASE = os.environ.get('CRM_BASE', 'http://localhost:8080') token = os.environ.get('CRM_TOKEN') assert token, '缺 CRM_TOKEN 环境变量(Bearer token,经登录接口获取)' CID = os.environ.get('CRM_SMOKE_CID') assert CID, '缺 CRM_SMOKE_CID 环境变量(目标客户 id,可先跑 smoke-t12m.py 自动建)' def call(method, path): req = urllib.request.Request(BASE + path, headers={'Authorization': 'Bearer ' + token}, method=method) with urllib.request.urlopen(req) as resp: return json.loads(resp.read().decode('utf-8')) def db_row(tag): import pymysql conn = pymysql.connect(host=os.environ.get('CRM_DB_HOST', '127.0.0.1'), port=int(os.environ.get('CRM_DB_PORT', '3306')), user=os.environ.get('CRM_DB_USER', 'root'), password=os.environ.get('CRM_DB_PASSWORD', ''), database=os.environ.get('CRM_DB_NAME', 'crm'), charset='utf8mb4', autocommit=True) cur = conn.cursor() cur.execute("SELECT COUNT(*), IFNULL(SUM(starred), -1) FROM customer_focus WHERE customer_id = %s", (CID,)) row = cur.fetchone() conn.close() print('%-12s rows=%s starred_sum=%s' % (tag, row[0], row[1])) return row print('focus :', call('POST', '/api/customer/%s/focus' % CID)['code']) db_row('after-focus') print('star :', call('POST', '/api/customer/%s/star' % CID)['code']) r = db_row('after-star') assert r[1] == 1, 'FAIL: starred should be 1 after star' print('unstar:', call('POST', '/api/customer/%s/unstar' % CID)['code']) r = db_row('after-unstar') assert r == (1, 0), 'FAIL: row kept with starred=0 expected, got %s' % (r,) print('unfocus:', call('POST', '/api/customer/%s/unfocus' % CID)['code']) r = db_row('after-unfocus') assert r[0] == 0, 'FAIL: row should be physically deleted, got %s' % (r,) print('STAR-SMOKE ALL PASS')