# coding=utf-8 import os import sys import time import simplejson PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..') sys.path.insert(0, PROJECT_ROOT) os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.testing"}) import django django.setup() from apps.web.device.models import Device from apps.web.user.models import MyUser from apps.web.dealer.models import Dealer from apps.web.core.exceptions import ServiceException module = globals() class JNCarTest(object): def __init__(self, devNo, openId, cardNo=None): self._devNo = devNo self._openId = openId self._cardNo = cardNo @property def device(self): device = getattr(self, "_device", None) if not device: setattr(self, "_device", Device.objects.get(devNo=self._devNo)) device = getattr(self, "_device") return device @property def user(self): return MyUser.objects.filter(groupId=self.device.groupId, openId=self._openId).first() @staticmethod def get_view_func(app, funcName): myApps = __import__("apps.web.{}.views".format(app)) func = eval("myApps.web.{}.views.{}".format(app, funcName)) return func def test_start(self): beforePay = float(str(self.user.balance)) packageId = "1" package = self.device.washConfig.get(packageId) payMoney = float(package.get("coins")) payload = { "groupId": self.device.groupId, "devNo": self._devNo, "packageId": packageId, "attachParas": { "chargeIndex": 1, "startKey": str(time.time()).replace(".", "") } } request = UserRequest(payload) request._init_request( openId=self._openId, groupId=self.device.groupId ) func = self.get_view_func("user", "startAction") try: func(request) except ServiceException as e: print "启动失败, {}".format(e.result.get("description")) return afterPay = float(str(self.user.balance)) # 金额是否扣除 assert beforePay - afterPay == payMoney, "pay money error!!!" devCache = Device.get_dev_control_cache(self._devNo) assert devCache.get("status") == 1, "device status error!!!" class MyRequest(object): # 伪造django 的 http request def __init__(self, payload): self._body = payload def _init_request(self, **kwargs): pass @property def body(self): return simplejson.dumps(self._body) class UserRequest(MyRequest): def _init_request(self, **kwargs): self._openId = kwargs.pop("openId") self._groupId = kwargs.pop("groupId") @property def user(self): openId = getattr(self, "_openId", "") groupId = getattr(self, "_groupId", "") return MyUser.objects.filter(groupId=groupId, openId=openId).first() class DealerRequest(MyRequest): def _init_request(self, **kwargs): self._username = kwargs.pop("username") @property def user(self): username = getattr(self, "_username", "") return Dealer.objects.filter(username=username).first() JNCarTest("860344043047092", "o-VzzwF5B18nOA4FvJjtxoto_yEw").test_start()