前言登陆接口:

headers:时间戳--timestamp实时获取,clientId--android/ios/web/微信小程序固定值,sign--privatekey加密后得到

查询报告接口:

headers:时间戳--timestamp实时获取,clientId--android/ios/web/微信小程序固定值,sign--privatekey加密后得到,token--登录返回的参数

思路1、解决sign加密问题:_dispose_params()、_rsa()

2、只登陆一次,拿到token后,后续查报告接口都使用同一个token(短期内不会失效,开发设置的5天):

on_start(),登陆一次之后,更新token

3、登录、查报告接口共用一个相同的headers

示例代码

import time

import rsa

import base64

from locust import HttpLocust, TaskSet, task

# 将参数按照规则排序

def _dispose_params(dict, timestamp=None):

if not timestamp:

timestamp = int(time.time() * 1000)

string = 'timestamp={}'.format(timestamp)

if not dict:

return string

sorted_list = sorted(dict.items(), key=lambda item: item[0], reverse=False)

l = []

for i in sorted_list:

if i[1] or i[1] == 0:

l.append(i)

if not l:

return string

sorted_str = [str(x[0]) + "=" + str(x[1]) for x in l]

string = string + "&" + '&'.join(sorted_str)

return string

# 使用rsa非对称进行签名

def _rsa(message, privite_key):

privkey = rsa.PrivateKey.load_pkcs1(privite_key)

crypto_text = rsa.sign(message.encode(), privkey, 'MD5')

crypto_text = base64.b64encode(crypto_text)

return crypto_text

#获得请求头

privite_key = """-----BEGIN RSA PRIVATE KEY-----

****************************************************************

sLT2lYIsUTilR9JbRWw8omywe1pAH1e7yAsFM18jCHVWTIjBQTjnXcRb5EVBAkEA

nYuunvInJB95yTFCCY/ZmZUEU+bm1IFafH7PEZXVVgpgtztz4xEqlkStJBQXs8M7

BNG2kUAPfqKko2zzMTOxOQJBAN8tCqM0ezh1ahRI21RHgg3QdgSrlaQsDXtk4AWC

CBM8ep9GRp1vzT6EyMPSNyeySXSb7LQa0Pl3dpSNRter3Fs=

-----END RSA PRIVATE KEY-----

"""

timestamp = str(int(time.time() * 1000))

message = _dispose_params({}, timestamp)

sign = _rsa(message, privite_key)

headers = {"clientId": "8b4701753a65837e3c48d3af9b3a91bc",

"timestamp": timestamp,

"sign": sign}

print("请求头是:", headers)

class testReport(TaskSet):

# 登录

def doLogin(self):

login_url = "/api/v1/login"

login_data = [{"account": "***", "client": "android", "credential": "e10adc3949ba59abbe56e057f20f883e","identityType": "passwd", "isFirstPart": "1"}]

response = self.client.post(login_url, json=login_data[0], headers=headers, verify=False).json()

#print("登录后未更新的请求头是:", headers)

print("LOGIN RESULT:", response)

return response

# on_start() 在测试前的初始化,先登录且只登陆一次

def on_start(self):

print("--------------性能测试来咯!--------------")

response = self.doLogin()

token = response["respData"]

headers["token"] = token

#print("登录后更新的请求头是:", headers)

# 查询报告列表

@task

def test_get_report_list(self):

report_url = "/api/v1/report/info"

report_data = None

print("执行查询报告的请求头是:",headers)

response = self.client.get(report_url, headers=headers, data=report_data, verify=False).json()

print('查询结果 :', response)

#locust类中的子类HttpLocust类中封装好了http方法,继承HttpLocust可以直接使用http相关方法

class WebSite(HttpLocust):

task_set = testReport

host = "https://xxx.xxx.in"

min_wait = 1000

max_wait = 3000

执行性能测试

Hatching and swarming 1 clients at the rate 1 clients/s...

登录只执行了一次

总结

1、HttpLocust类从继承 Locust的类,并把它添加一个客户端属性,它是的一个实例 HttpSession,可用于使HTTP请求。

2、http协议是无状态的,所以登录请求和登录后的请求它是独立的,但是登录后的请求需要依赖先登录拿到cookies,才能保持登录状态,python接口自动化里面可以用session来解决:s = requests.session()

HttpLocust类从继承 Locust的类,并把它添加一个客户端属性,它是的一个实例 HttpSession,可用于使HTTP请求,这就相当于它自动使用了session机制,类似于client = requests.session()

所以后面的请求,直接拿client.get()、client.post()请求就可以了

python locust post 参数拼接md5_Locust性能测试--接口加密参数关联相关推荐

  1. 小红书接口加密参数X-sign

    小红书接口加密参数X-sign 文章目录 小红书接口加密参数X-sign 前言 一.抓包获取参数 总结 前言 因为工作需要,开始对小红书动手,因为app端风险高,小程序端也能获取基本需求,所以从小程序 ...

  2. Python爬虫:逆向分析某云音乐加密参数

    文章目录 前言 1. 请求分析 2. 参数分析 3. 加密分析 4. 模拟加密 5. 获取ID 6. 代码框架 结束语 前言   免责声明:     本篇博文的初衷是分享自己学习逆向分析时的个人感悟, ...

  3. (最新)唯品会WEB端加密参数逆向分析

    最新某品会商品详情接口加密参数逆向分析 一.明确加密参数 二.加密参数的逆向分析和算法还原 2.1 authorization的逆向分析和还原 2.2 mars_sid 的逆向分析和还原 2.3 ma ...

  4. 【某OTA网站加密参数还原生成】

    文章目录 前言 一.接口加密参数怎么生成? 二.JS代码 三. 环境 前言 最近看了下某网站的接口数据,发现和以前不一样了,于是花了会时间看了下 一.接口加密参数怎么生成? 看了下接口 会发现有个te ...

  5. python locust post 参数拼接md5_HttpRunner接口自动化测试框架

    HttpRunner 简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试 ...

  6. python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法

    为locust中不同类型的事件,提供的钩子方法: from locust import TaskSet, task, events, Locust from locust.clients import ...

  7. python locust api_性能测试工具--Locust官方文档(API)解读(全)

    文章略长Locust学习笔记汇总 若有错误,请指正 内容以官网为准https://locust.io/ Locust简介 Locust是什么? Locust是一个简单易用的分布式用户负载测试工具.它用 ...

  8. Python+locust性能测试(一),进军高阶测试......

    前言 Locust是使用Python开发的支持分布式的一款开源压力测试工具,Locust在测试时,会产生大量的用户对系统进行访问,每个用户的行为是通过Python代码控制的,并且整个测试过程可以在We ...

  9. 性能测试框架——python+locust

    目录 性能测试测试点 指标体系 用户数 监控windows系统指标 使用Python监控系统资源 安装和使用 安装 代码模板 问题处理 locust启动参数 性能测试测试点 分类:负载测试.压力测试. ...

  10. python locust 性能测试:HOOKS钩子方法

    为locust中不同类型的事件,提供的钩子方法: from locust import TaskSet, task, events, Locust from locust.clients import ...

最新文章

  1. JS点击显示隐藏内容
  2. 和6岁孩子的函数式编程对话
  3. win10中的ubuntu子系统忘记root密码如何修改
  4. 大数据技术分享:hive内部常用函数都有哪些?
  5. cmd不能用的解决方法
  6. Stream学习过程中遇到的一个问题记录
  7. 时序数据库php,时序数据库InfluxDB
  8. Matlab遗传算法工具箱(gaot)下载及安装
  9. [水晶报表]水晶报表创建以及调用方法
  10. U-Net在2022年相关研究的论文推荐
  11. 搞一下CP AUTOSAR 入门 | 08 CP AUTOSAR CAN 网络管理简介
  12. 差模信号与共模信号的理解
  13. 个性化精简掉了Win10便签顶部如何恢复
  14. Linux2.6.29设备模型分析-概述
  15. 迎接“119”消防宣传日|助力企事业单位实现消防安全,前景互联在行动
  16. 约瑟夫环——递推公式详解(leetcode 1823. 找出游戏的获胜者)
  17. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E Maximum Flow
  18. 【Python爬虫】爬取2022软科全国大学排行榜
  19. java错误无法读取配置文件_解决Java Web项目无法读取配置文件问题
  20. Arduino UNO输出高电平点亮LED(三)

热门文章

  1. 【UVA11795】 Mega Man's Mission
  2. 【bzoj1668/Usaco2006 Oct】Cow Pie Treasures 馅饼里的财富——dp
  3. cmd窗口连接mongodb服务端
  4. linux下常用计算软件——matlab替代品
  5. CSS flex 布局 一些基本属性应用
  6. 小型工厂企业网站究竟该怎么做好SEO优化,从而带来更多订单?
  7. HTML5 DOM File API 转)
  8. Windows 8实用窍门系列:1.使用Xaml+C#开发第一个Metro Style应用程序
  9. Jquery.ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
  10. Flash游戏开发常用函数代