smoke_camel.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # -*- coding: utf-8 -*-
  2. """驼峰改造冒烟:核心读接口出参不得出现 snake_case key;写接口用驼峰入参。"""
  3. import re
  4. import sys
  5. sys.path.insert(0, "tools")
  6. from test_redis_auth import login, S, BASE, Redis, PREFIX
  7. def check_snake(obj, path="$"):
  8. hits = []
  9. if isinstance(obj, dict):
  10. for k, v in obj.items():
  11. if re.match(r'^[a-z]+(_[a-z0-9]+)+$', k):
  12. hits.append("%s.%s" % (path, k))
  13. hits += check_snake(v, path + "." + k)
  14. elif isinstance(obj, list):
  15. for i, v in enumerate(obj[:3]):
  16. hits += check_snake(v, "%s[%d]" % (path, i))
  17. return hits
  18. tok = login("redistest_admin", "123456")["data"]["token"]
  19. H = {"Access-Token": tok}
  20. def get(p):
  21. return S.get(BASE + p, headers=H, timeout=30).json()
  22. def post(p, b):
  23. return S.post(BASE + p, headers=H, json=b, timeout=30).json()
  24. fails = []
  25. CASES = [
  26. "/store/goods/list?page=1&pageSize=5",
  27. "/store/order/list?dataType=order&page=1&pageSize=5",
  28. "/store/order/list?dataType=delivery&page=1&pageSize=5",
  29. "/store/order/list?dataType=receipt&page=1&pageSize=5",
  30. "/store/order/list?dataType=complete&page=1&pageSize=5",
  31. "/store/store.user/list?page=1",
  32. "/store/files/list?page=1",
  33. "/store/goods.comment/list?page=1",
  34. "/store/market.coupon/list?page=1",
  35. "/store/page/list",
  36. "/store/setting/detail",
  37. "/store/statistics.data/data",
  38. "/store/statistics.data/survey",
  39. "/store/category/list",
  40. "/store/client.h5.setting/detail?key=basic",
  41. "/store/client.wxapp.setting/detail?key=basic",
  42. ]
  43. # goods/detail 用列表里真实存在的商品 ID(10001/10002 已软删)
  44. first = get("/store/goods/list?page=1&pageSize=1")
  45. lst = first.get("data", {}).get("list", {})
  46. real_gid = (lst.get("data") or [{}])[0].get("goodsId") if isinstance(lst, dict) else None
  47. if real_gid:
  48. CASES.insert(1, "/store/goods/detail?goodsId=%s" % real_gid)
  49. for p in CASES:
  50. r = get(p)
  51. hits = check_snake(r)
  52. tag = "ok" if (r.get("status") == 200 and not hits) else "FAIL"
  53. print("[%s] %-46s status=%s snake=%s" % (tag, p, r.get("status"), hits[:4] if hits else "无"))
  54. if tag == "FAIL":
  55. fails.append(p)
  56. # 写接口:驼峰入参
  57. r5 = post("/store/category/add", {"form": {"name": "冒烟分类", "parentId": 0, "sort": 99, "imageId": 0}})
  58. print("[--] category.add(驼峰入参):", r5["status"], r5["message"])
  59. if r5["status"] != 200:
  60. fails.append("category.add")
  61. with Redis() as rd:
  62. rd("DEL", PREFIX + tok)
  63. print("\n冒烟结果:", "全部通过" if not fails else "FAIL: %s" % fails)
  64. sys.exit(1 if fails else 0)