AutoUpgradeTestCase.py 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. import requests,json,os,sys,threading,time
  4. import logging
  5. import logging.handlers
  6. import re
  7. #打印公司logo
  8. f = open('logo.txt', 'r')
  9. file_contents = f.read()
  10. print (file_contents)
  11. f.close()
  12. #日志文件
  13. LOG_FILE = 'autotest.log'
  14. handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5) # 实例化handler
  15. fmt = '%(asctime)s -- %(name)s - %(message)s' # log格式formatter
  16. formatter = logging.Formatter(fmt) # 实例化formatter
  17. handler.setFormatter(formatter) # 为handler添加formatter
  18. logger = logging.getLogger('autotest') # 获取名为tst的logger
  19. logger.addHandler(handler) # 为logger添加handler
  20. logger.setLevel(logging.DEBUG) # 为设置logger等级
  21. #被测油罐车ID
  22. g_oilTankID="83e2e01d8edf74443acd1b7ef5a11f2f"
  23. #测试库 版本信息 合规版本1 合规版本2 非合规版本
  24. controller_id=["2acbaf521456186f2ada879f1fcb88fa","ce71527072e1ff8b953b0ade6c9631a3","28350b002504be7c1e9ad0f62c49162c"]
  25. controller_version=["2.1.3.9.1.1.0.20220225","2.1.2.9.1.1.0.20220225","2.1.3.9.1.1.0.20220220"]
  26. collector_id=["ab9e4bc574b07bce07bccae1dc572f39","9f85cb17fd98a00c751f56d9035c28b6","114e402040d06a06dc1b21bdfe9f5254"]
  27. collector_version=["2.0.0.6.1.0.0.20220226","2.0.0.6.1.0.0.20220225","2.1.3.9.1.1.0.20220221"]
  28. #controller_old_v=''
  29. #collector_old_v=''
  30. #controller_current_v=''
  31. #collector_current_v=''
  32. def get_controller():
  33. #判断设备是否在线
  34. trynum=0
  35. get_error = 1
  36. while True:
  37. trynum=trynum+1
  38. if trynum > 5:
  39. break
  40. url="http://dev.jlwlwkj.com:6002/alarm-app/sendInstructions/readControllerVersion?carId=%s"%g_oilTankID
  41. headers = {"Authorization":"bearer "+ token}
  42. res = requests.post(url=url,headers=headers)
  43. if 200 != res.status_code:
  44. logger.error('get controller error')
  45. time.sleep(5)
  46. get_error = 1
  47. continue
  48. res_json = json.loads(res.text)
  49. if 0 == res_json['code']:
  50. print("oilTank offline try to connect")
  51. logger.error('oiltank offline')
  52. time.sleep(5)
  53. continue
  54. else:
  55. get_error = 0
  56. time.sleep(10)
  57. return get_error
  58. def get_collector():
  59. #判断设备是否在线
  60. trynum=0
  61. get_error = 1
  62. while True:
  63. trynum=trynum+1
  64. if trynum > 5:
  65. break
  66. url="http://dev.jlwlwkj.com:6002/alarm-app/sendInstructions/readCollectorVersion?carId=%s"%g_oilTankID
  67. headers = {"Authorization":"bearer "+ token}
  68. res = requests.post(url=url,headers=headers)
  69. if 200 != res.status_code:
  70. logger.error('get collector error')
  71. time.sleep(5)
  72. get_error = 1
  73. continue
  74. res_json = json.loads(res.text)
  75. if 0 == res_json['code']:
  76. print("oilTank offline try to connect")
  77. logger.error('oiltank offline')
  78. time.sleep(5)
  79. continue
  80. else:
  81. get_error = 0
  82. time.sleep(10)
  83. return get_error
  84. def get_version():
  85. #读取 系统库中 controller和collector的版本号
  86. url="http://dev.jlwlwkj.com:6002/base-info-app/carInfo/readVersion?carId=%s"%g_oilTankID
  87. headers = {"Authorization":"bearer "+ token}
  88. res = requests.get(url=url,headers=headers)
  89. res_json = json.loads(res.text)
  90. controller_v="version_error"
  91. collector_v="version_error"
  92. for version in res_json['data']:
  93. if "COLLECTOR_VERSION" == version['name']:
  94. collector_v = version['value']
  95. else:
  96. controller_v = version['value']
  97. return controller_v,collector_v
  98. #查看当前升级进度
  99. upgrade_finished = 0
  100. def get_process():
  101. url="http://dev.jlwlwkj.com:6002/base-info-app/upgradePack/upgradeProgress?carId=%s"%g_oilTankID
  102. headers = {"Authorization":"bearer "+ token}
  103. res = requests.get(url=url,headers=headers)
  104. res_json = json.loads(res.text)
  105. done_process = "100.00%"
  106. global upgrade_finished
  107. upgrade_finished = 1
  108. #判断升级是否取消
  109. name=res_json['data']
  110. print name
  111. if name.find(u"取消") != -1:
  112. print "upgrade cancel restart again!"
  113. upgrade_finished = 1
  114. logger.error('upgrade cancel')
  115. return
  116. if done_process in res_json['data']:
  117. print "upgrade finished!"
  118. upgrade_finished = 1
  119. else:
  120. print "upgrade processing"
  121. print res_json['data']
  122. upgrade_finished = 0
  123. #定时获取token线程,每隔半小时获取一次token,防止token值发生变化
  124. token=''
  125. def get_token_timer():
  126. url="http://dev.jlwlwkj.com:6002/authority-app/logIn"
  127. headers={'Content-Type':'application/json;charset=UTF-8'}
  128. request_param={
  129. "account": "sys",
  130. "password": "123456",
  131. "type": 0
  132. }
  133. response=requests.post(url,data=json.dumps(request_param), headers=headers)
  134. global token
  135. token = response.json()["data"]["access_token"]
  136. print("...Getting token...")
  137. print token
  138. global timer
  139. timer = threading.Timer(1800, get_token_timer)
  140. timer.start()
  141. #发送升级指令
  142. def send_upgrade_command(oilTankID, upgradePackId):
  143. url="http://dev.jlwlwkj.com:6002/base-info-app/upgradePack/upgrade"
  144. headers={'Content-Type':'application/json;charset=UTF-8','Authorization':'bearer '+ token}
  145. request_param = {
  146. "carIds":[oilTankID],
  147. "upgradePackId":upgradePackId
  148. }
  149. response=requests.post(url,data=json.dumps(request_param), headers=headers)
  150. send_result = 0
  151. global upgrade_finished
  152. if 200 == response.status_code:
  153. print "发送升级指令成功,开始升级"
  154. send_result = 0
  155. upgrade_finished = 0
  156. else:
  157. print "发送升级指令失败,等待下一次发送升级"
  158. logger.error('send upgrade command error')
  159. upgrade_finished = 1
  160. send_result = 1
  161. return send_result
  162. def main():
  163. #启用定时获取token线程
  164. get_token_timer()
  165. time.sleep(5)
  166. controller_old_v=''
  167. collector_old_v=''
  168. controller_current_v=''
  169. collector_current_v=''
  170. global upgrade_finished
  171. #case1 控制板不同版本升级测试
  172. print("\033[0;32;40mRunning Test_case_1 ------------------- different legal controller version upgrade\033[0m")
  173. controller_upgrade_times = 0
  174. while True:
  175. controller_upgrade_times = controller_upgrade_times+1
  176. if controller_upgrade_times > 50:
  177. break;
  178. #获取当前控制板版本号
  179. if 0 == get_controller():
  180. controller_old_v, collector_old_v = get_version()
  181. #版本比对,选择一个不同的合规版本进行升级 目前库中存在两个合规版本
  182. if controller_old_v != controller_version[0]:
  183. t_controllerID=controller_id[0]
  184. else:
  185. t_controllerID=controller_id[1]
  186. #发送升级指令成功开始升级,记录当前升级前版本和升级后版本
  187. if 0 != send_upgrade_command(g_oilTankID,t_controllerID):
  188. logger.error('send upgrade command error')
  189. #查看升级进度
  190. while 0 == upgrade_finished:
  191. time.sleep(20)
  192. get_process()
  193. time.sleep(20)
  194. #获取升级后的版本号
  195. if 0 == get_controller():
  196. controller_current_v, collector_current_v = get_version()
  197. #记录日志做下一轮升级
  198. logger.info('controller upgrade before: %s'%controller_old_v)
  199. logger.info('controller upgrade after: %s'%controller_current_v)
  200. time.sleep(5)
  201. #case2 采集板不同版本升级测试
  202. print("\033[0;32;40mRunning Test_case_2 ------------------- different legal collector version upgrade\033[0m")
  203. collector_upgrade_times = 0
  204. upgrade_finished = 1
  205. while True:
  206. collector_upgrade_times = collector_upgrade_times+1
  207. if collector_upgrade_times > 50:
  208. break;
  209. #获取当前采集板版本号
  210. if 0 == get_collector():
  211. controller_old_v, collector_old_v = get_version()
  212. #版本比对,选择一个不同的合规版本进行升级 目前库中存在两个合规版本
  213. if collector_old_v != collector_version[0]:
  214. t_collectorID=collector_id[0]
  215. else:
  216. t_collectorID=collector_id[1]
  217. #发送升级指令成功开始升级,记录当前升级前版本和升级后版本
  218. if 0 != send_upgrade_command(g_oilTankID,t_collectorID):
  219. logger.error('send collector upgrade command error')
  220. #查看升级进度
  221. while 0 == upgrade_finished:
  222. time.sleep(20)
  223. get_process()
  224. time.sleep(20)
  225. #获取升级后的版本号
  226. if 0 != get_collector():
  227. controller_current_v, collector_current_v = get_version()
  228. #记录日志做下一轮升级
  229. logger.info('collector upgrade before: %s'%collector_old_v)
  230. logger.info('collector upgrade after: %s'%collector_current_v)
  231. time.sleep(5)
  232. #测试结束取消定时获取token任务
  233. timer.cancel()
  234. if __name__ == '__main__':
  235. main()
  236. sys.exit(0)