Locust性能测试--接口加密参数关联

前言登陆接口: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(),登陆一次之后,更新token3、查报告及登录接口中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-----
               MIICXwIBAAKBgQDxYdFgdsPG2vG8V2RyFjWErp8vRlF3hjAJgXSju786gvujmi5R
               kS9aE1vWqval9oaEufeJ44Bq/FtlXCI/WpuiMdhvre2TEgUwQiRvBTHitt/nn93Q
               /mgm1P8Rh1xTl/Fqbz+QPzv5m8Q+/cbEYJHU5DSRUcYj7cGWWMbKaPWnEQIDAQAB
               AoGBAJuzfz18HnkNDdVxgeddkBQQF7qE31P8CMx45uYe2xFBIFS9xZbz0dmGlzz3
               drZDOS4wTw5w44sfUU0miyjWp4BNa/QFbefVf3urQUiChPi+dbg/g4484Gymjk30
               cPDQeNGzkGNeejmU06YUCUe3YBsC3pglIMHagaH3gUhpuhyBAkEA/OnAnfLkFm4P
               O/Vk9PWhaGoQNMBS2/WA5OPPHqkQt8Hkspa+pBcmZJpgPmed/5+hd7XhReM3xcwc
               t/3nThLT6QJBAPRUCTMdcqjAh/Fh8fmT9WtkTL8um5MtZdBbRwsMihIJ5BtuXPrB
               Ex8N5jXKEkgklQxkjp7XaSBqo3deONLniOkCQQCCMLH+nLHc+frNmpzFnEviO/br
               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 = "/cpcs-server/api/v1/login"
        login_data = [{"account": "15611111111", "client": "android", "credential": "e10adc3949ba59abbe56e057f20f883e","identityType": "passwd", "isFirstPart": "1"}]
        print("登录前请求头是", headers)
        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 = "/cpcs-server/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

  

执行性能测试

 

原文地址:https://www.cnblogs.com/luckyjing073/p/12170761.html

时间: 2024-08-01 20:11:00

Locust性能测试--接口加密参数关联的相关文章

python接口自动化-参数关联和JSESSIONID(上个接口返回数据作为下个接口请求参数)

参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了.最常见的案例就是网站的登录案例,很多网站的登录并不仅仅只传username和psw两个参数,往往有其它的动态参数.有时候还需要带上cookies参数,如JSESSIONID 登录参数 首先分析下目标网站[学信网:https://account.chsi.com.cn/passport/login]的登录接口请求参数.先随便输入账号和密码,使用fiddler工

locust性能测试4-参数关联

前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:https://account.chsi.com.cn/passport/login]的登录接口请求参数 请求参数 需要先发个get请求,从返回的html页面中解析出需要的数据 lt : LT-277623-5ldGTLqQhP4foKihHUlgfKPeGGyWVI execution: e1s1 备注

如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)

原文:http://www.cnblogs.com/codeon/p/6123863.html#3580351 1.完全开放的接口 有没有这样的接口,谁都可以调用,谁都可以访问,不受时间空间限制,只要能连上互联网就能调用,毫无安全可言. 实话说,这样的接口我们天天都在接触,你查快递,你查天气预报,你查飞机,火车班次等,这些都是有公共的接口. 我把这称之为裸奔时代.代码如下: /// <summary> /// 接口对外公开 /// </summary> /// <return

Js生成接口请求参数签名加密

js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再做MD5加密生成sign,方法如下: function getSign(params, kAppKey, kAppSecret) { if (typeof params == "string") { return paramsStrSort(params); } else if (type

python接口自动化(十六)--参数关联接口后传(详解)

简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操作,不用说就需 要用参数关联了,发随笔之后会有一个随笔的 id,获取到这个 id,继续操作传这个随笔 id 就可以了(博客园的登录机制已经变了,不能用账号和密码登录了,这里用 cookie 登录) 大致流程步骤:web界面操作登录抓包查看cookie—>代码模拟cookie登录—>web界面操作新

httprunner学习3-extract提取token值参数关联(上个接口返回的token,传给下个接口请求参数)

前言 如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了. 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了.那么接下来就是解决两个问题: 如何取出token值? 如何参数关联? 场景案例 我现在有一个登陆接口A,登陆成功后返回一个token值.有一个获取绑定卡号的接口B,但是接口B必须要先登录后传登录的token才能访问 A接口登录接口文档基本信息 访问地址:http://127.0.0.1:8000/api/v

hrunrunner实现接口参数关联和参数化

解决参数关联有2种方式:extract提取参数,debugtalk辅助函数获取. 先看第一种,extract提取参数: 登录成功后直接用extract提取返回content里面的token参数: 然后在下一个请求里面直接用$token去引用 第二种:debugtalk辅助函数获取 先建立一个debugtalk.py结尾的文件,然后在写一个登录获取token的函数,内容如下: import requests url = 'http://49.235.92.12:9000/api/v1/login'

Python Locust性能测试框架实践

Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装python2.6以上版本,而且有pip工具.之后打开命令行,分别安装locustio和pyzmq(命令如下): pip install locustio pip install pyzmq 之后我们就可以写性能测试脚本了. Locust脚本编写 接下来我们拿两个接口做一下测试,编写脚本如下(每一步都有注释).我来解释一下,首先我们要i

python locust 性能测试:HttpSession

官网解释:用于在请求之间执行Web请求和保留(会话)cookie的类(以便能够登录和退出网站):记录每个请求,以便locust可以显示统计信息: from locust import TaskSet, task, HttpLocust, Locust from locust.clients import HttpSession import subprocess import random from common.sec_encrypt import AESEncrypt, md5_time f