weifule_dev_test.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import threading
  4. import os,sys,time
  5. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  6. sys.path.insert(0, PROJECT_ROOT)
  7. os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.testing"})
  8. import django
  9. django.setup()
  10. from apps.web.device.models import Device
  11. from apps.web.core.helpers import ActionDeviceBuilder
  12. from apps.web.constant import Const
  13. from apps.web.core.mqtt_client import MqttClient
  14. import threading
  15. import uuid,datetime
  16. from django.conf import settings
  17. import simplejson as json
  18. dev = Device.get_dev('865650042312401')
  19. box = ActionDeviceBuilder.create_action_device(dev)
  20. class DeviceTaskListoner(threading.Thread):
  21. def __init__(self, orderNos=[]):
  22. super(DeviceTaskListoner, self).__init__()
  23. self.orderNoDict = {}
  24. for orderNo in orderNos:
  25. self.orderNoDict[str(orderNo)] = []
  26. def register_order_event(self,orderNo,funCode):
  27. value = {'funCode':funCode,'time':datetime.datetime.now().strftime(Const.DATETIME_FMT)}
  28. if not self.orderNoDict.has_key(orderNo):
  29. self.orderNoDict[str(orderNo)] = [value]
  30. else:
  31. self.orderNoDict[str(orderNo)].append(value)
  32. def check_order(self,orderNo,funCode):
  33. events = self.orderNoDict.get(str(orderNo),None)
  34. if events is None:
  35. return False
  36. for event in events:
  37. if event['funCode'] == funCode:
  38. return True
  39. return False
  40. def run(self):
  41. try:
  42. mqttc = MqttClient(client_id='webapp_' + str(uuid.uuid1()))
  43. mqttc.on_message = self.on_message
  44. mqttc.on_connect = self.on_connect
  45. # 连接到现网
  46. mqttc.connect(settings.MQTT_HOSTNAME, settings.MQTT_PORT, 60)
  47. mqttc.loop_forever()
  48. finally:
  49. mqttc.disconnect()
  50. mqttc.close()
  51. def on_connect(self,client, userdata, flags, rc):
  52. # 订阅设备的120响应事件,用于检查
  53. device_topic = 'server/865650042312401/100'
  54. client.subscribe(device_topic, qos = Const.MQTT_QOS)
  55. print('subscribe topic(%s) success' % device_topic)
  56. def on_message(self,mqttc, obj, msg):
  57. msgDict = json.loads(bytes.decode(msg.payload))
  58. print('receive msg = %s' % msgDict)
  59. dev = Device.get_dev(msgDict['IMEI']) # type: DeviceDict
  60. if dev is None or (not dev.has_key('devType')):
  61. return
  62. if msgDict['data'].has_key('order'):
  63. self.register_order_event(msgDict['data']['order']['id'], msgDict['data']['fun_code'])
  64. print u'-----------------------测试查询所有端口状态'
  65. def test_main():
  66. listoner = DeviceTaskListoner()
  67. listoner.setDaemon(True)
  68. listoner.start()
  69. #前置条件:0:未接负载;1:接负载;2:无继电器
  70. portStatus = [1,0,0,0,0,0,0,0,0,0]
  71. #关闭所有端口,检查端口状态是否空闲
  72. print u'关闭所有端口,检查端口状态是否空闲'
  73. for ii in range(10):
  74. box.stop_charging_port(ii+1)
  75. box.lock_unlock_port(ii+1,False)
  76. time.sleep(5)
  77. result = box.get_port_status_from_dev()
  78. for ii in range(10):
  79. if portStatus[ii] in [0,1] and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_IDLE:
  80. print u'端口状态错误'
  81. elif portStatus[ii] == 2 and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_FAULT:
  82. print u'端口状态错误'
  83. # 分别启动每一路端口,检查端口是否正常
  84. print u'分别启动每一路端口,检查端口是否正常'
  85. orderNos = []
  86. for ii in range(10):
  87. devInfo = box.start_device({'time':3,'unit':u'分钟','coins':1},'aaaaaa',{'chargeIndex':str(ii + 1)})
  88. orderNos.append(devInfo['consumeOrderNo'])
  89. time.sleep(120)
  90. result = box.get_port_status_from_dev()
  91. for ii in range(10):
  92. if portStatus[ii] == 0 and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_IDLE:
  93. print u'端口状态错误'
  94. elif portStatus[ii] == 1 and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_WORKING:
  95. print u'端口状态错误'
  96. elif portStatus[ii] == 2 and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_FAULT:
  97. print u'端口状态错误'
  98. # 等待充电结束后,获取端口状态,检查端口是否正常
  99. print u'等待充电结束后,获取端口状态,检查端口是否正常'
  100. time.sleep(180)
  101. result = box.get_port_status_from_dev()
  102. for ii in range(10):
  103. if portStatus[ii] in [0,1] and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_IDLE:
  104. print u'端口状态错误'
  105. elif portStatus[ii] == 2 and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_FAULT:
  106. print u'端口状态错误'
  107. print u'检查订单的事件是否收齐了'
  108. for orderNo in orderNos:
  109. result = listoner.check_order(orderNo, 32)
  110. if not result:
  111. print u'没有收到创建成功的事件!,orderNo=%s' % orderNo
  112. result = listoner.check_order(orderNo, 34)
  113. if not result:
  114. print u'没有收到结束的事件!,orderNo=%s' % orderNo
  115. # 禁止端口,检查端口状态
  116. print u'禁止端口,检查端口状态'
  117. for ii in range(10):
  118. box.lock_unlock_port(ii+1)
  119. time.sleep(5)
  120. result = box.get_port_status_from_dev()
  121. for ii in range(10):
  122. if result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_FORBIDDEN:
  123. print u'端口状态错误'
  124. # 解禁端口,检查端口状态
  125. print u'解禁端口,检查端口状态'
  126. for ii in range(10):
  127. box.lock_unlock_port(ii+1,False)
  128. time.sleep(5)
  129. result = box.get_port_status_from_dev()
  130. for ii in range(10):
  131. if portStatus[ii] in [0,1] and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_IDLE:
  132. print u'端口状态错误'
  133. elif portStatus[ii] == 2 and result.get(str(ii+1))['status'] != Const.DEV_WORK_STATUS_FAULT:
  134. print u'端口状态错误'
  135. print u'------------------------查询端口详细信息'
  136. print u'关闭所有端口,检查端口信息'
  137. for ii in range(10):
  138. box.stop_charging_port(ii+1)
  139. time.sleep(5)
  140. for ii in range(10):
  141. result = box.get_port_info(ii+1)
  142. if portStatus[ii] in [0,1]:
  143. if result['status'] != Const.DEV_WORK_STATUS_IDLE:
  144. print u'端口信息错误'
  145. if result['power'] != 0:
  146. print u'端口功率信息错误'
  147. elif portStatus[ii] == 2:
  148. if result['status'] != Const.DEV_WORK_STATUS_FAULT:
  149. print u'端口信息错误'
  150. if result['power'] != 0:
  151. print u'端口功率信息错误'
  152. #分别启动每一路端口,检查端口是否正常
  153. print u'分别启动每一路端口,检查端口是否正常'
  154. orderNoList = []
  155. for ii in range(10):
  156. devInfo = box.start_device({'time':5,'unit':u'分钟','coins':1},'aaaaaa',{'chargeIndex':str(ii + 1)})
  157. orderNoList.append(devInfo['consumeOrderNo'])
  158. time.sleep(1)
  159. for ii in range(10):
  160. result = box.get_port_info(ii+1)
  161. if portStatus[ii] in [1]:
  162. if result['status'] != Const.DEV_WORK_STATUS_WORKING or result['power'] <= 0 :
  163. print u'端口信息错误'
  164. #等待充电结束后,获取端口信息,检查端口是否正常
  165. print u'等待充电结束后,获取端口信息,检查端口是否正常'
  166. time.sleep(280)
  167. for ii in range(10):
  168. result = box.get_port_info(ii+1)
  169. if portStatus[ii] in [0,1]:
  170. if result['status'] != Const.DEV_WORK_STATUS_IDLE or result['power'] > 0:
  171. print u'端口信息错误'
  172. else:
  173. if result['status'] != Const.DEV_WORK_STATUS_FAULT or result['power'] > 0:
  174. print u'端口信息错误'
  175. #禁止端口,检查端口信息
  176. print u'禁止端口,检查端口信息'
  177. for ii in range(10):
  178. box.lock_unlock_port(ii+1)
  179. time.sleep(120)
  180. for ii in range(10):
  181. result = box.get_port_info(ii+1)
  182. if portStatus[ii] in [0,1]:
  183. if result['status'] != Const.DEV_WORK_STATUS_FORBIDDEN or result['power'] > 0:
  184. print u'端口信息错误'
  185. else:
  186. if result['status'] != Const.DEV_WORK_STATUS_FORBIDDEN or result['power'] > 0:
  187. print u'端口信息错误'
  188. for ii in range(10):
  189. box.lock_unlock_port(ii+1,False)
  190. print u'------------------------远程停止充电'
  191. print u'先启动端口,并每个端口付款多次,然后远程停止,再检查检查端口状态'
  192. orderNos = []
  193. for ii in range(10):
  194. for jj in range(19):
  195. try:
  196. devInfo = box.start_device({'time':3,'unit':u'分钟','coins':1},'aaaaaa',{'chargeIndex':str(ii + 1)})
  197. except Exception,e:
  198. continue
  199. orderNos.append(devInfo['consumeOrderNo'])
  200. for ii in range(10):
  201. box.stop_charging_port(ii+1)
  202. time.sleep(30)
  203. print u'检查订单的事件是否收齐了'
  204. for orderNo in orderNos:
  205. result = listoner.check_order(orderNo, 32)
  206. if not result:
  207. print u'没有收到创建成功的事件!,orderNo=%s' % orderNo
  208. result = listoner.check_order(orderNo, 34)
  209. if not result:
  210. print u'没有收到结束的事件!,orderNo=%s' % orderNo
  211. for ii in range(10):
  212. result = box.get_port_info(ii+1)
  213. if portStatus[ii] in [0,1]:
  214. if result['status'] != Const.DEV_WORK_STATUS_IDLE:
  215. print u'端口信息错误'
  216. elif portStatus[ii] == 2:
  217. if result['status'] != Const.DEV_WORK_STATUS_FAULT:
  218. print u'端口信息错误'
  219. print u'------------------------清除投币总数'
  220. print u'将投币统计清零,然后检查统计数据是否为0'
  221. box.clear_dev_feecount()
  222. result = box.get_dev_consume_count()
  223. if result['coinFee'] != 0:
  224. print u'清零统计数据不对'
  225. print u'每个端口注入多个订单,检查每个订单是否都逐步执行完毕'
  226. time.sleep(180)
  227. orderNos = []
  228. for ii in range(10):
  229. for jj in range(3):
  230. devInfo = box.start_device({'time':1,'unit':u'分钟','coins':1},'aaaaaa',{'chargeIndex':str(ii + 1)})
  231. orderNos.append(devInfo['consumeOrderNo'])
  232. time.sleep(240)
  233. print u'检查每个端口下排队的订单的事件是否收齐了'
  234. for orderNo in orderNos:
  235. result = listoner.check_order(orderNo, 32)
  236. if not result:
  237. print u'没有收到创建成功的事件!,orderNo=%s' % orderNo
  238. result = listoner.check_order(orderNo, 34)
  239. if not result:
  240. print u'没有收到结束的事件!,orderNo=%s' % orderNo
  241. while True:
  242. try:
  243. test_main()
  244. except Exception,e:
  245. print(u'错误 错误 错误exception =%s' % e)
  246. continue
  247. print 'finished'