jndz_car_test.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # coding=utf-8
  2. import os
  3. import sys
  4. import time
  5. import simplejson
  6. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  7. sys.path.insert(0, PROJECT_ROOT)
  8. os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.testing"})
  9. import django
  10. django.setup()
  11. from apps.web.device.models import Device
  12. from apps.web.user.models import MyUser
  13. from apps.web.dealer.models import Dealer
  14. from apps.web.core.exceptions import ServiceException
  15. module = globals()
  16. class JNCarTest(object):
  17. def __init__(self, devNo, openId, cardNo=None):
  18. self._devNo = devNo
  19. self._openId = openId
  20. self._cardNo = cardNo
  21. @property
  22. def device(self):
  23. device = getattr(self, "_device", None)
  24. if not device:
  25. setattr(self, "_device", Device.objects.get(devNo=self._devNo))
  26. device = getattr(self, "_device")
  27. return device
  28. @property
  29. def user(self):
  30. return MyUser.objects.filter(groupId=self.device.groupId, openId=self._openId).first()
  31. @staticmethod
  32. def get_view_func(app, funcName):
  33. myApps = __import__("apps.web.{}.views".format(app))
  34. func = eval("myApps.web.{}.views.{}".format(app, funcName))
  35. return func
  36. def test_start(self):
  37. beforePay = float(str(self.user.balance))
  38. packageId = "1"
  39. package = self.device.washConfig.get(packageId)
  40. payMoney = float(package.get("coins"))
  41. payload = {
  42. "groupId": self.device.groupId,
  43. "devNo": self._devNo,
  44. "packageId": packageId,
  45. "attachParas": {
  46. "chargeIndex": 1,
  47. "startKey": str(time.time()).replace(".", "")
  48. }
  49. }
  50. request = UserRequest(payload)
  51. request._init_request(
  52. openId=self._openId,
  53. groupId=self.device.groupId
  54. )
  55. func = self.get_view_func("user", "startAction")
  56. try:
  57. func(request)
  58. except ServiceException as e:
  59. print "启动失败, {}".format(e.result.get("description"))
  60. return
  61. afterPay = float(str(self.user.balance))
  62. # 金额是否扣除
  63. assert beforePay - afterPay == payMoney, "pay money error!!!"
  64. devCache = Device.get_dev_control_cache(self._devNo)
  65. assert devCache.get("status") == 1, "device status error!!!"
  66. class MyRequest(object):
  67. # 伪造django 的 http request
  68. def __init__(self, payload):
  69. self._body = payload
  70. def _init_request(self, **kwargs):
  71. pass
  72. @property
  73. def body(self):
  74. return simplejson.dumps(self._body)
  75. class UserRequest(MyRequest):
  76. def _init_request(self, **kwargs):
  77. self._openId = kwargs.pop("openId")
  78. self._groupId = kwargs.pop("groupId")
  79. @property
  80. def user(self):
  81. openId = getattr(self, "_openId", "")
  82. groupId = getattr(self, "_groupId", "")
  83. return MyUser.objects.filter(groupId=groupId, openId=openId).first()
  84. class DealerRequest(MyRequest):
  85. def _init_request(self, **kwargs):
  86. self._username = kwargs.pop("username")
  87. @property
  88. def user(self):
  89. username = getattr(self, "_username", "")
  90. return Dealer.objects.filter(username=username).first()
  91. JNCarTest("860344043047092", "o-VzzwF5B18nOA4FvJjtxoto_yEw").test_start()