實現公司提出的需求,寫了以下的腳本,模擬多車輛同時查詢、入場、出場一套流程
'''
@Description: In User Settings Edit
@Author: coco
@Date: 2019-09-24 10:00:03
@LastEditTime: 2019-09-27 11:33:43
@LastEditors: coco
'''
import random
import threading
import time
import requests
import logging
import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
redis_conn = redis.Redis(connection_pool=pool)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
log_path = './'
log_name = 'test4.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w', encoding='utf8')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter(
"%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
carNos = ['OO55', 'BY334', 'DD088', 'RR3456', 'TY2322',
'QQ334', 'UI334', 'PY453', 'GY778', 'RTG34',
'YU439', 'YR323', 'ER003', 'P001', 'GG01',
'GG011', 'P002', 'TTR45', 'IO887', 'YU667',
'PP667', 'RV565', 'AQT89', 'AS562', 'PH565',
'POL78', 'QE55', 'RI675', 'WW888', 'YO865',
'YUJ66', 'ZT666']
def send_query(carNo):
try:
url = 'http://xx.xx.xx.xx:xxxx/api?app_id=bd6832c144394620&server_name=Parking.NoSense.Pay&method=Parking.NoSense.Pay.ApiProxy.CarPlateSignContractQuery×tamp=20190916181649&nonce=1805027239&signature=5f8e18d9bb584203a0a5f874a3b29cae¶meters={"parking_id":"2","channel_id":"1","plate_no":"'+carNo+'","vehicle_type":"1"}'
r = requests.get(url, timeout=5)
data = r.text
response_time = r.elapsed.total_seconds()*1000
print('查詢:'+data)
logger.info({"Action": "查詢", "Response": data,
"Url": url, "ResponseTime": response_time})
except Exception as err:
print(err)
logger.error(err)
def send_enter(carNo):
try:
url = 'http://xx.xx.xx.xx:xxxx/api?app_id=bd6832c144394620&server_name=Parking.NoSense.Pay&method=Parking.NoSense.Pay.ApiProxy.CarEnterParking×tamp=20190916181649&nonce=1805027239&signature=5f8e18d9bb584203a0a5f874a3b29cae¶meters={"parking_id":"2","channel_id":"1","plate_no":"' + carNo+'","vehicle_type":"1","in_time":"20190917151355"}'
r = requests.get(url, timeout=5)
data = r.text
response_time = r.elapsed.total_seconds()*1000
print('入場:'+data)
logger.info({"Action": "入場", "Response": data,
"Url": url, "ResponseTime": response_time})
except Exception as err:
print(err)
logger.error(err)
def send_out(carNo):
try:
url = 'http://xx.xx.xx.xx:xxxx/api?app_id=bd6832c144394620&server_name=Parking.NoSense.Pay&method=Parking.NoSense.Pay.ApiProxy.CarOutParking×tamp=20190916181649&nonce=1805027239&signature=5f8e18d9bb584203a0a5f874a3b29cae¶meters={"parking_id":"2","channel_id":"1","out_trade_number":"10201909170910119","subject":"無感","total_amt":"0","plate_no":"' + \
carNo+'","vehicle_type":"1","in_time":"20190917151355","out_time":"20190917154556","asyn_url":"","must_charge":"1"}'
r = requests.get(url, timeout=5)
data = r.text
response_time = r.elapsed.total_seconds()*1000
print('出場:'+data)
logger.info({"Action": "出場", "Response": data,
"Url": url, "ResponseTime": response_time})
except Exception as err:
print(err)
logger.error(err)
def exe_query(carNo):
t1 = threading.Thread(target=send_query, args=(carNo,))
t1.start()
def exe_enter(carNo):
t2 = threading.Thread(target=send_enter, args=(carNo,))
t2.start()
def exe_out(carNo):
t3 = threading.Thread(target=send_out, args=(carNo,))
t3.start()
def test1():
i = 0
for i in range(len(carNos)):
exe_query(carNos[i])
def test2():
j = 0
for j in range(len(carNos)):
exe_enter(carNos[j])
def test3():
k = 0
for k in range(len(carNos)):
exe_out(carNos[k])
def executer():
time.sleep(5)
test1()
time.sleep(5)
test2()
time.sleep(15)
test3()
def lanch():
i = 0
counter = 10000
while i < counter:
executer()
i += 1
lanch()