-
CsRedis:从始至终偶尔/经常性都报异常,异常原因,初步判断是流程问题, 测试String 字符串插入
2020-12-31 02:12:42Newlife.Redis 与 CsRedis:从始至终 均在初始阶段报异常. Newlife.Redis : 我看了是一个dynamic 一个属性问题.问题不大. 后面运行均稳定不报错的执行任务! CsRedis:从始至终都报异常,异常原因,初步判断是流程问题... -
Qt下的OpenGL 编程(12)阶段学习总结
2012-08-28 15:52:50学习OpenGL也有半个多月了,收获了很多,对3D的东西也有了初步的了解。 选用的平台是Ubuntu+Qt,因为为它非常的简单。 学到后面,其实更觉得学习的东西和平台是没有多大关系的,不管你是在windows下还是Linux...学习OpenGL也有半个多月了,收获了很多,对3D的东西也有了初步的了解。
选用的平台是Ubuntu+Qt,因为为它非常的简单。
学到后面,其实更觉得学习的东西和平台是没有多大关系的,不管你是在windows下还是Linux下,用VS还是QtCreater,重要的是实现你想要的东西,没必要找一个多么庞大的框架来实现只要几条语句就能实现的效果。
在学习之处,这个系列的文章感觉最起码可以写到20篇的,要知道,NeHe的教程可是有将近50篇!但眼下只能写到这里了。原因,还是个人的时间 吧,这个月一直在学校学日语,上午是一天课,下午和晚上基本待在学校编程,晚上
回去还要学日语(-_-!).
在学习前面一些基础的主题的时候,还是听轻松的,但到了后面的高级主题,我就得画上两三天也能理解其中的内容,并写出相应的代码,还是有挺多东西想去学习一下,比如碰撞,物理模拟,粒子等等。
关于学习的方法
我学习的资料主要是:红宝书,nehe的教程,还有CSDN的博客。
nehe的教程最简单,只要稍微修改一下代码,程序就能跑起来,但理解起来有点吃力,这个时候就要去搜索了,csdn和opengl的文档都会有一些函数的解释,说明了函数的用法还有接口,但如果要深入理解其中的原理的话,红宝书是必不可少的。
接下来可能会将重心转移到Android了,有时间的话我会继续学习OpenGL es,那个相信会更有意思。
-
使用locust对设备ID的生成逻辑的并发测试初步实践
2018-04-24 11:59:30项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的...项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的生成逻辑至关重要,主要和A、B、C 三大因素有关,大概如下:
1、同A,不管后面的B,C是否不一致
首先根据传入消息的A ,到ES中查询 如果存在相同的则用原A的设备ID(DeviceID)
2、不同A
1)B一样,C不一样,则用原B的设备ID(DeviceID)
2)C一样,B不一样,则用原C的设备ID(DeviceID)
3)B不一样,C不一样,则生成新设备ID(DeviceID),生成新的设备ID的逻是原来的最大的设备ID号,加1最为新的设备ID,例如:原数据中最大设备ID是D000000009,则新的设备ID是D000000010.设备ID的生成在数据量大并发的情况下是非常有可能是同一时间过来的,所以,当开启脚本后,即使是A、B、C因子都不一样的时候,因为生成时间是相同的(精确到毫秒级),所以生成的设备ID还是相同的(实际情况下是不可能生成相同设备的),此问题的解决方案有很多,可以搜索,分布式ID的生成,我们开发采取的方案是使用redis的原子性,ID生成器解决的。主要的locust脚本如下:
#!/user/bin/env python
#coding=utf-8
author = 'zengweifang'#风控系统的压测脚本
#第一步:模拟设备指纹的100万数据的生成from locust import HttpLocust,TaskSet,task
import queue
import json
import requests
from random import Random
import random
import time
import string
import socket
import structRockMQ = "http://192.168.46.154:8765/topic/sendTopicMessage.do"
def AutoGeneratedString(number):
'''随机生成字符串方法,主要用于输入框不能超过多少字符串的场景,此一次性产生的最大的字符串是62个'''
return ''.join(random.sample(string.ascii_letters + string.digits, number))def getRandomBool():
'''随机获取是否是代理'''
isProxy = ["true","false"]
return random.sample(isProxy, 1)[0]def get_random_ip():
'''随机生成合法的IP'''
RANDOM_IP_POOL=['192.168.10.222/0']
str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]
str_ip_addr = str_ip.split('/')[0]
str_ip_mask = str_ip.split('/')[1]
ip_addr = struct.unpack('>I',socket.inet_aton(str_ip_addr))[0]
mask = 0x0
for i in range(31, 31 - int(str_ip_mask), -1):
mask = mask | ( 1 << i)
ip_addr_min = ip_addr & (mask & 0xffffffff)
ip_addr_max = ip_addr | (~mask & 0xffffffff)
return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))def getUnixTime():
'''获得13位的unix时间戳:1519800472673'''
return int(round(time.time() * 1000))def getPCUserAgent():
'''获取PC端的UserAgent'''
pc_user_agent = [
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
'Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)']
list(set(pc_user_agent))
return random.sample(pc_user_agent, 1)[0]def messageDict(fingerId, sessionId):
topic = {"topic": "meta-fingerprint"} tag = {"tag": ""} key = {"key": ""} appId = {"appId": 'A10007'} clientType = {"clientType": "1"} fingerId = {"fingerId": fingerId} ip = {"ip": get_random_ip()} proxyFlag = {"proxyFlag": getRandomBool()} sessionId = {"sessionId": sessionId} systemId = {"systemId": '7b6a99f3bce14915863cde5104bdf2c3'} timestamp = {"timestamp": str(getUnixTime())} user_agent = '{\"key\":\"user_agent\",\"value\":\"%s\"}' % getPCUserAgent() language = '{\"key\":\"language\",\"value\":\"zh-cn\"}' color_depth = '{\"key\":\"color_depth\",\"value\":32}' device_memory = '{\"key\":\"device_memory\",\"value\":-1}' pixel_ratio = '{\"key\":\"pixel_ratio\",\"value\":\"\"}' hardware_concurrency = '{\"key\":\"hardware_concurrency\",\"value\":\"unknown\"}' resolution = '{\"key\":\"resolution\",\"value\":[1920,1080]}' available_resolution = '{\"key\":\"available_resolution\",\"value\":[1920,1040]}' timezone_offset = '{\"key\":\"timezone_offset\",\"value\":-480}' session_storage = '{\"key\":\"session_storage\",\"value\":1}' local_storage = '{\"key\":\"local_storage\",\"value\":1}' add_behavior = '{\"key\":\"add_behavior\",\"value\":1}' cpu_class = '{\"key\":\"cpu_class\",\"value\":\"x86\"}' navigator_platform = '{\"key\":\"navigator_platform\",\"value\":\"Win32\"}' do_not_track = '{\"key\":\"do_not_track\",\"value\":\"unknown\"}' ie_plugins = '{\"key\":\"ie_plugins\",\"value\":[\"AcroPDF.PDF\",null,null,null,\"MacromediaFlashPaper.MacromediaFlashPaper\",\"Msxml2.DOMDocument\",\"Msxml2.XMLHTTP\",null,null,null,null,null,null,\"Scripting.Dictionary\",null,\"Shell.UIHelper\",\"ShockwaveFlash.ShockwaveFlash\",null,\"TDCCtl.TDCCtl\",\"WMPlayer.OCX\",null,null]}' adblock = '{\"key\":\"adblock\",\"value\":false}' has_lied_languages = '{\"key\":\"has_lied_languages\",\"value\":false}' has_lied_resolution = '{\"key\":\"has_lied_resolution\",\"value\":false}' has_lied_os = '{\"key\":\"has_lied_os\",\"value\":false}' has_lied_browser = '{\"key\":\"has_lied_browser\",\"value\":false}' touch_support = '{\"key\":\"touch_support\",\"value\":[0,false,false]}' js_fonts = '{\"key\":\"js_fonts\",\"value\":[\"Arial\",\"Arial Black\",\"Calibri\",\"Cambria\",\"Cambria Math\",\"Comic Sans MS\",\"Consolas\",\"Courier\",\"Courier New\",\"Georgia\",\"Helvetica\",\"Impact\",\"Lucida Console\",\"Lucida Sans Unicode\",\"Microsoft Sans Serif\",\"MS Gothic\",\"MS PGothic\",\"MS Sans Serif\",\"MS Serif\",\"Palatino Linotype\",\"Segoe Print\",\"Segoe Script\",\"Segoe UI\",\"Segoe UI Light\",\"Segoe UI Semibold\",\"Segoe UI Symbol\",\"Tahoma\",\"Times\",\"Times New Roman\",\"Trebuchet MS\",\"Verdana\",\"Wingdings\"]}' fingerParametersList = [user_agent, language, color_depth, device_memory, pixel_ratio, hardware_concurrency, resolution, available_resolution, timezone_offset, session_storage, local_storage, add_behavior, cpu_class, navigator_platform, do_not_track, ie_plugins, adblock, has_lied_languages, has_lied_resolution, has_lied_os, has_lied_browser, touch_support, js_fonts] fingerParameters = {"fingerParameters": str(fingerParametersList)}
{"messageBody":fingerParameters}
messageBodyDict = fingerParameters.copy()
messageBodyDict.update(clientType)
messageBodyDict.update(fingerId)
messageBodyDict.update(ip)
messageBodyDict.update(proxyFlag)
messageBodyDict.update(sessionId)
messageBodyDict.update(systemId)
messageBodyDict.update(timestamp)
messageBodyDict.update(appId)messageBody = {"messageBody": str(messageBodyDict)} # print(messageBody) NewmessageBody = messageBody.copy() NewmessageBody.update(topic) NewmessageBody.update(tag) NewmessageBody.update(key) return NewmessageBody
def toJson(message):
return json.dumps(message, ensure_ascii=False)def send(url, jsonbody, header):
print('发送的消息体为:%s' % jsonbody)
re = requests.post(url=url, data=jsonbody, headers=header).json()
return redef getHeader():
'''获取请求头'''
header = {"Content-Type": "application/json"}
return headerclass rcpTaskSet(TaskSet):
@task(1) def fingerprint(self): '''生产设备指纹''' try: sessionId_data = self.locust.sessionId_queue.get() print(sessionId_data) except queue.Empty: print('sessionId data run out, test ended.') exit(0) try: fingerId_data = self.locust.fingerId_queue.get() print(fingerId_data) except queue.Empty: print('fingerId data run out, test ended.') exit(0) #self.messageDict(fingerId_data,sessionId_data) json1 = toJson(messageDict(fingerId_data,sessionId_data)) send(RockMQ, json1, getHeader()) #保证并发测试数据唯一性,循环取数据 self.locust.sessionId_queue.put_nowait(sessionId_data) self.locust.fingerId_queue.put_nowait(fingerId_data) # payload = FG.messageDict( sessionId) # json1 = FG.toJson(payload) # self.send(self.RockMQ, json1, self.getHeader()) # @task # def sendMQ(self): # '''发送消息''' # pass
class rcpLocust(HttpLocust):
task_set = rcpTaskSet sessionId_queue = queue.Queue() for a in range(1000000): sessionId = AutoGeneratedString(32) sessionId_queue.put_nowait(sessionId) fingerId_queue = queue.Queue() for b in range(1000000): fingerId = AutoGeneratedString(32) fingerId_queue.put_nowait(fingerId) min_wait = 1000 max_wait = 3000
找到locust脚本,启动方式如下:
locust -H http://192.168.46.154:8765/topic/sendTopicMessage.do -f rcpLocust.py最后在web上设置用户数和每秒加载的用户,done
转载于:https://blog.51cto.com/11565901/2107163
-
python locust 时间戳过期_使用locust对设备ID的生成逻辑的并发测试初步实践
2020-12-24 11:45:15项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的...项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的生成逻辑至关重要,主要和A、B、C 三大因素有关,大概如下:
1、同A,不管后面的B,C是否不一致
首先根据传入消息的A ,到ES中查询 如果存在相同的则用原A的设备ID(DeviceID)
2、不同A
1)B一样,C不一样,则用原B的设备ID(DeviceID)
2)C一样,B不一样,则用原C的设备ID(DeviceID)
3)B不一样,C不一样,则生成新设备ID(DeviceID),生成新的设备ID的逻是原来的最大的设备ID号,加1最为新的设备ID,例如:原数据中最大设备ID是D000000009,则新的设备ID是D000000010.
设备ID的生成在数据量大并发的情况下是非常有可能是同一时间过来的,所以,当开启脚本后,即使是A、B、C因子都不一样的时候,因为生成时间是相同的(精确到毫秒级),所以生成的设备ID还是相同的(实际情况下是不可能生成相同设备的),此问题的解决方案有很多,可以搜索,分布式ID的生成,我们开发采取的方案是使用redis的原子性,ID生成器解决的。主要的locust脚本如下:
#!/user/bin/env python
#coding=utf-8
author = ‘zengweifang‘
#风控系统的压测脚本
#第一步:模拟设备指纹的100万数据的生成
from locust import HttpLocust,TaskSet,task
import queue
import json
import requests
from random import Random
import random
import time
import string
import socket
import struct
def AutoGeneratedString(number):
‘‘‘随机生成字符串方法,主要用于输入框不能超过多少字符串的场景,此一次性产生的最大的字符串是62个‘‘‘
return ‘‘.join(random.sample(string.ascii_letters + string.digits, number))
def getRandomBool():
‘‘‘随机获取是否是代理‘‘‘
isProxy = ["true","false"]
return random.sample(isProxy, 1)[0]
def get_random_ip():
‘‘‘随机生成合法的IP‘‘‘
RANDOM_IP_POOL=[‘192.168.10.222/0‘]
str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)]
str_ip_addr = str_ip.split(‘/‘)[0]
str_ip_mask = str_ip.split(‘/‘)[1]
ip_addr = struct.unpack(‘>I‘,socket.inet_aton(str_ip_addr))[0]
mask = 0x0
for i in range(31, 31 - int(str_ip_mask), -1):
mask = mask | ( 1 << i)
ip_addr_min = ip_addr & (mask & 0xffffffff)
ip_addr_max = ip_addr | (~mask & 0xffffffff)
return socket.inet_ntoa(struct.pack(‘>I‘, random.randint(ip_addr_min, ip_addr_max)))
def getUnixTime():
‘‘‘获得13位的unix时间戳:1519800472673‘‘‘
return int(round(time.time() * 1000))
def getPCUserAgent():
‘‘‘获取PC端的UserAgent‘‘‘
pc_user_agent = [
‘Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50‘,
‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50‘,
‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0‘,
‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0‘,
‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1‘,
‘Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)‘,
‘Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko‘,
‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1‘,
‘Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1‘,
‘Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11‘,
‘Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11‘,
‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)‘,
‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)‘]
list(set(pc_user_agent))
return random.sample(pc_user_agent, 1)[0]
def messageDict(fingerId, sessionId):
topic = {"topic": "meta-fingerprint"}
tag = {"tag": ""}
key = {"key": ""}
appId = {"appId": ‘A10007‘}
clientType = {"clientType": "1"}
fingerId = {"fingerId": fingerId}
ip = {"ip": get_random_ip()}
proxyFlag = {"proxyFlag": getRandomBool()}
sessionId = {"sessionId": sessionId}
systemId = {"systemId": ‘7b6a99f3bce14915863cde5104bdf2c3‘}
timestamp = {"timestamp": str(getUnixTime())}
user_agent = ‘{\"key\":\"user_agent\",\"value\":\"%s\"}‘ % getPCUserAgent()
language = ‘{\"key\":\"language\",\"value\":\"zh-cn\"}‘
color_depth = ‘{\"key\":\"color_depth\",\"value\":32}‘
device_memory = ‘{\"key\":\"device_memory\",\"value\":-1}‘
pixel_ratio = ‘{\"key\":\"pixel_ratio\",\"value\":\"\"}‘
hardware_concurrency = ‘{\"key\":\"hardware_concurrency\",\"value\":\"unknown\"}‘
resolution = ‘{\"key\":\"resolution\",\"value\":[1920,1080]}‘
available_resolution = ‘{\"key\":\"available_resolution\",\"value\":[1920,1040]}‘
timezone_offset = ‘{\"key\":\"timezone_offset\",\"value\":-480}‘
session_storage = ‘{\"key\":\"session_storage\",\"value\":1}‘
local_storage = ‘{\"key\":\"local_storage\",\"value\":1}‘
add_behavior = ‘{\"key\":\"add_behavior\",\"value\":1}‘
cpu_class = ‘{\"key\":\"cpu_class\",\"value\":\"x86\"}‘
navigator_platform = ‘{\"key\":\"navigator_platform\",\"value\":\"Win32\"}‘
do_not_track = ‘{\"key\":\"do_not_track\",\"value\":\"unknown\"}‘
ie_plugins = ‘{\"key\":\"ie_plugins\",\"value\":[\"AcroPDF.PDF\",null,null,null,\"MacromediaFlashPaper.MacromediaFlashPaper\",\"Msxml2.DOMDocument\",\"Msxml2.XMLHTTP\",null,null,null,null,null,null,\"Scripting.Dictionary\",null,\"Shell.UIHelper\",\"ShockwaveFlash.ShockwaveFlash\",null,\"TDCCtl.TDCCtl\",\"WMPlayer.OCX\",null,null]}‘
adblock = ‘{\"key\":\"adblock\",\"value\":false}‘
has_lied_languages = ‘{\"key\":\"has_lied_languages\",\"value\":false}‘
has_lied_resolution = ‘{\"key\":\"has_lied_resolution\",\"value\":false}‘
has_lied_os = ‘{\"key\":\"has_lied_os\",\"value\":false}‘
has_lied_browser = ‘{\"key\":\"has_lied_browser\",\"value\":false}‘
touch_support = ‘{\"key\":\"touch_support\",\"value\":[0,false,false]}‘
js_fonts = ‘{\"key\":\"js_fonts\",\"value\":[\"Arial\",\"Arial Black\",\"Calibri\",\"Cambria\",\"Cambria Math\",\"Comic Sans MS\",\"Consolas\",\"Courier\",\"Courier New\",\"Georgia\",\"Helvetica\",\"Impact\",\"Lucida Console\",\"Lucida Sans Unicode\",\"Microsoft Sans Serif\",\"MS Gothic\",\"MS PGothic\",\"MS Sans Serif\",\"MS Serif\",\"Palatino Linotype\",\"Segoe Print\",\"Segoe Script\",\"Segoe UI\",\"Segoe UI Light\",\"Segoe UI Semibold\",\"Segoe UI Symbol\",\"Tahoma\",\"Times\",\"Times New Roman\",\"Trebuchet MS\",\"Verdana\",\"Wingdings\"]}‘
fingerParametersList = [user_agent, language, color_depth, device_memory, pixel_ratio, hardware_concurrency,
resolution, available_resolution, timezone_offset,
session_storage, local_storage, add_behavior, cpu_class, navigator_platform,
do_not_track, ie_plugins, adblock, has_lied_languages,
has_lied_resolution, has_lied_os, has_lied_browser, touch_support, js_fonts]
fingerParameters = {"fingerParameters": str(fingerParametersList)}
{"messageBody":fingerParameters}
messageBodyDict = fingerParameters.copy()
messageBodyDict.update(clientType)
messageBodyDict.update(fingerId)
messageBodyDict.update(ip)
messageBodyDict.update(proxyFlag)
messageBodyDict.update(sessionId)
messageBodyDict.update(systemId)
messageBodyDict.update(timestamp)
messageBodyDict.update(appId)
messageBody = {"messageBody": str(messageBodyDict)}
# print(messageBody)
NewmessageBody = messageBody.copy()
NewmessageBody.update(topic)
NewmessageBody.update(tag)
NewmessageBody.update(key)
return NewmessageBody
def toJson(message):
return json.dumps(message, ensure_ascii=False)
def send(url, jsonbody, header):
print(‘发送的消息体为:%s‘ % jsonbody)
re = requests.post(url=url, data=jsonbody, headers=header).json()
return re
def getHeader():
‘‘‘获取请求头‘‘‘
header = {"Content-Type": "application/json"}
return header
class rcpTaskSet(TaskSet):
@task(1)
def fingerprint(self):
‘‘‘生产设备指纹‘‘‘
try:
sessionId_data = self.locust.sessionId_queue.get()
print(sessionId_data)
except queue.Empty:
print(‘sessionId data run out, test ended.‘)
exit(0)
try:
fingerId_data = self.locust.fingerId_queue.get()
print(fingerId_data)
except queue.Empty:
print(‘fingerId data run out, test ended.‘)
exit(0)
#self.messageDict(fingerId_data,sessionId_data)
json1 = toJson(messageDict(fingerId_data,sessionId_data))
send(RockMQ, json1, getHeader())
#保证并发测试数据唯一性,循环取数据
self.locust.sessionId_queue.put_nowait(sessionId_data)
self.locust.fingerId_queue.put_nowait(fingerId_data)
# payload = FG.messageDict( sessionId)
# json1 = FG.toJson(payload)
# self.send(self.RockMQ, json1, self.getHeader())
# @task
# def sendMQ(self):
# ‘‘‘发送消息‘‘‘
# pass
class rcpLocust(HttpLocust):
task_set = rcpTaskSet
sessionId_queue = queue.Queue()
for a in range(1000000):
sessionId = AutoGeneratedString(32)
sessionId_queue.put_nowait(sessionId)
fingerId_queue = queue.Queue()
for b in range(1000000):
fingerId = AutoGeneratedString(32)
fingerId_queue.put_nowait(fingerId)
min_wait = 1000
max_wait = 3000
-
stm32自学阶段性总结0(GPIO使用)
2019-11-19 18:38:29博主现在是一名大二的学生,最近正在自学stm32单片机(正点原子 战舰版本),搞了大约三天了,对stm32有了初步的认识和了解,对GPIO的输入输出也有了自己的了解与看法,特此整理。 首先学习了GPIO的输入与输出后,...博主现在是一名大二的学生,最近正在自学stm32单片机(正点原子 战舰版本),搞了大约三天了,对stm32有了初步的认识和了解,对GPIO的输入输出也有了自己的了解与看法,特此整理。
首先学习了GPIO的输入与输出后,本人对C语言中的头文件(。h)和源文件(.c)有了进一步的认识,总结一下:头文件就是用来定义的,包括定义函数名,定义变量,一般格式为:当然 后面可以用到的,我感觉都可以提前在头文件中定义,对于源文件,它实现的就是头文件中所定义的函数写完整,因此,我们在写源文件时必须把其头文件包含进去
1,关于GPIO的输出,博主用的是正点原子的战舰版,对于战舰版,它为我们提供了诸多已经定义好的函数,首先在,对于一般外设,我们都会先建立一个文件夹,在文件夹下建立其对应的头文件和源文件,同时将头文件添加到文件夹下,将路径也添加到对应文件夹下,头文件为了防止重复定义采用: #ifndef…#endif,中间进行变量或函数的定义声明,例如(拿按LED举例:)
注::一般在头文件我们都会包含 sys.h,这一文件。之后我们再去源文件,将我们定义的函数功能写完整,以为要使用stm32的I/o口,首先我们应当先打开对应的时钟,即:(时钟调用函数)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
这里要说明对于stm32 I/O口的初始化,其I/O口包含3个属性:1端口设置(配置为那个端口),2模式设置(输入还是输出),3 I/O口速度设置,stm32 为我们提供了初始化I/O口的函数:GPIO-Init(GPIOx,&GPIO_InitStructure),因此我们数显需要去建立一个结构体GPIO_InitStructure,其下包含以上三个属性,属性值可以查阅stm32f10x.h文件来复制粘贴即可,设置完成将I/O口初始化:
当以上工作都完成之后我们便可以在main()函数中将其包含其头文件并调用函数完成I/O口的输出了。相比于I/O口的输入其流程跟输出基本类似,只要将初始化I/o口的模式更改一下即可,同时,在main()函数写下代码就可以输入了。
备注:初学stm32,文中可能表述不是很规范,如若有错,欢迎大佬提出,不喜勿喷。
-
python locust并发量大的时候时间戳过期_使用locust对设备ID的生成逻辑的并发测试初步实践...
2020-12-24 11:45:34项目背景:现阶段我们项目主要有两大场景,一是交易风控,二是账户风控,两大的场景的很多规则都和设备ID有关,比如设备黑名单,设备A在黑名单库并且相关规则开启,设备A请求交易时就会有预警事件发生,所以设备ID的... -
OpenGL游戏制作之路[第二篇 游戏控件之按钮(2)]---2D游戏---(注:此版本作者处于探索阶段,希望能得到读者的...
2019-02-11 00:08:08经过上次的思考,我决定先进行一个初步的类设计,这样能为后面的开发带来不少方便,就好比有了图纸,设计的时候要小心,尽量避免漏洞,尤其是重大设计漏洞。 正题 下面的图就是我目前设计的类图,展示了目前用到的... -
dbeaver 视图有一个x_初一数学几何图形,几何图形类专题,视图和展开图是重难点...
2021-01-11 06:05:07同时重点讲解了视图和展开图等知识点,而后面学习的线,角等知识点,则更多地为初中阶段以后的学习打下基础,作为几何图形初步,立体图形的三视图和展开图相关类型的题型还是非常重要的,也是这部分的难点之一。... -
学而思pythonlevel3_【学而思网校语言学习】学而思网校【2019-寒】AE英语直播班 Level 3上【报价 价格 评测...
2020-12-24 19:27:52商品简介三年级是小学阶段很重要的转折期,对孩子的后面的学习有很大的影响。三年级是从被动的学习主体向主动的学习主体转变的时期,三年级后的考试不是仅仅考课内的知识了,这就要求孩子在课外要大量地汲取知识,... -
软件开发需求分析的要点
2009-03-22 23:34:00闲来没事,总结了几点需求分析即设计的初步阶段的要点:1.初步模型图 对即将展开需求分析的实际建立个大概的模型,这阶段的可以不求详实,也可以不正确,在后面的几个阶段逐渐作增补。“不打无准备之仗”。 -
python---对象、继承和类方法学习
2018-07-31 21:41:37如国这一阶段没有打好基础,后面去无论是做题还是进行实战都会感觉很吃力。 所以从今天开始,我们python学习开始由简入深,初步进入深入阶段。所以,我们进入正题。 1.对象和类认识和基础应用 计算机语言分为 ... -
工作小记(四)
2018-03-25 21:07:34比较忙碌的一周,之前在视频里找人脸 区分表情,截取表情片段可以初步的实现。win+python+dlib 环境配置方面 一句话总结:坎坎坷坷全是坑。。。。后面准备改进算法思想,逐渐提高表情片段的准确性 连续性。在人脸... -
项目管理知识体系指南之项目范围管理(IT项目)
2019-10-01 01:31:10项目立项前就已经进行了初步的项目范围规划。项目范围的管理直接决定项目日后的实施,决定项目能否成功。 项目范围管理包括了范围规划、范围定义、工作结构分解、范围控制。这基本是顺序进行的,但后面的工作又可能... -
mysql insert 压力大_MySQL因大事务导致的Insert慢实例分析
2021-02-01 16:35:22【问题】INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程...log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采集,定... -
mysql日志分析大事务_MySQL因大事务导致的Insert慢实例分析
2021-01-27 10:40:23【问题】INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程...log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采集,定... -
mysql大事务导致系统变慢_MySQL因大事务导致的Insert慢实例分析
2021-01-21 14:49:59【问题】INSERT语句是最常见的SQL语句之一,最近有台MySQL服务器不定时的会出现并发线程...log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采集,定... -
MySQL大事务导致的Insert慢的案例分析
2019-09-24 20:48:54【问题】 有台MySQL服务器不定时...从等待资源来看,大部分时间消耗在了innodb_log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题 后面开启线程上升时pstack的自动采集,定位MySQ... -
mysql事务insert_MySQL大事务导致的Insert慢的案例分析
2021-02-08 01:40:00有台 MySQL 服务器不定时的会出现并发线程的告警,从记录信息来看,有大量insert的慢查询,执行几十秒,等待flushing log,状态query end 【初步分析】从等待资源来看,大部分时间消耗在了innodb_log_file阶段,... -
mysql insert 压力大_MySQL大事务导致的Insert慢的案例分析-阿里云开发者社区
2021-01-27 15:39:08原文:MySQL大事务导致的Insert慢的案例分析【问题】有台MySQL服务器...大部分时间消耗在了innodb_log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题后面开启线程上升时pstack的自动采... -
mysql 排队等待_MySQL大事务导致的Insert慢的案例分析
2021-01-19 05:47:11有台MySQL服务器不定时的会出现并发线程的告警,从记录信息来看,有大量insert的慢查询,执行几十秒,等待flushing log,状态query end【初步分析】从等待资源来看,大部分时间消耗在了innodb_log_file阶段,... -
MySQL因大事务导致的Insert慢实例分析
2020-12-16 02:54:04从等待资源来看,大部分时间消耗在了innodb_log_file阶段,怀疑可能是磁盘问题导致,经过排查没有发现服务器本身存在硬件问题 后面开启线程上升时pstack的自动采集,定位MySQL线程等待的位置。 【分析过程】 部署了... -
android SDK manager 提取慢或者下载慢解决方法
2012-10-14 19:03:02今天第一次初步尝试安卓环境搭建,然后下了一个android的SDK manager,按照官网上的教程进行环境包下载,可是一直卡了xml的fetching阶段,偶尔几次通过了下载速度才只有几KB,更是无奈。 后面解决方法如下: 在C:\... -
Android应用开发基础课程--15天做一个合格的Android程序员(第二天)界面开发(二)
2019-04-03 14:20:05上一章,我们已经将大部分的布局和控件,以及控件的属性都在xml中操作了,对布局和控件已经有了初步的了解,后面就是在学习和项目中去加深和完善了,使用多了自然就会熟练的。 下面进入界面开发的下一阶段。 前面... -
墨竹:山雨欲来风满楼,黄金再难维持强势?
2020-06-15 11:13:45快乐分享错了就成了显摆,难过...而后的空头转换中,给出的位置均是比较精髓的,像27、40以及45,在初次试探时均面临了一定的下跌修正,给出的拐点有效,无效的是后面阶段的下跌中,未能按照初步预期进行走低,更多的是 -
学习卷积神经网络后的一些心得
2019-07-23 13:52:29通过后面这几个月对于卷积神经网络有一些心得,由于是初步了解,可能说的有些不全面或者不完善的地方,望谅解。 1.卷积网络入门其实没有想象的那么难,但是越往高处走越来越需要我们去细心琢磨。 2.在卷积神经网络中... -
美食网站项目策划书.pdf
2019-12-06 10:46:58美食网站设计需求分析是介于系统分析和软件设计阶段之间的桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整;另一方面,需求规格说明又是软件设计、实现...