Locust性能测试3--参数化、数据依赖
场景链路压测的时候通常都是按照用户实际使用流程进行压测,同接口自动化一样,一定会涉及到数据依赖的问题
1.举例
Django
后台通常需要csrf
验证,而一般csrftoken
需要通过get接口获得
from locust import HttpUser, task, between
from lxml import etree
USER_CREDENTIALS = [
("login1", "pwd1"),
("login2", "pwd2"),
("login3", "pwd3"),
] # 登录账户
csrf_token = []
class LoginDemo(HttpUser):
wait_time = between(2, 5) # 模拟用户等待2到5s然后执行
@task(1)
def on_start(self): # 任务开始时准备
header = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/83.0.4103.61 Safari/537.36 "
} # 请求头
# 获取csrf
r_get = self.client.get("user/login/")
# 从返回的html页面中,解析出 csrfmiddlewaretoken
dom = etree.HTML(r_get.content.decode("utf-8"))
try:
csrf_token['csrfmiddlewaretoken'] = dom.xpath('//input[@name="csrfmiddlewaretoken"]')[0].get("value")
print(csrf_token)
except:
print('参数csrfmiddlewaretoken获取失败!')
if len(USER_CREDENTIALS) > 0:
user, pwd = USER_CREDENTIALS.pop() # 取出账户名密码
r_post = self.client.post("user/login/", {
"token": 'TOKEN', # TOKEN
"username": user, # 用户名
"password": pwd, # 密码
"next": ""
}, header=header
)
assert r_post.status_code == 200 # 断言请求返回200
print(r_post.status_code, r_post.text[:1000]) # 打印状态码及返回text
@task(2)
def view_index(self):
print('访问首页')
r = self.client.get("/index/")
print(r.status_code)
@task(6)
def view_tag(self):
print('访问标签页')
r = self.client.get("/tag/")
print(r.status_code)
if __name__ == "__main__":
import os
os.system("locust -f demo.py --host=URL") # 需要测试的地址
- 这里我们使用了
etree
来获取get
接口返回的数据
2.更新请求头
self.client.headers.update(header)
3. 数据依赖
- 转化接口返回数据,然后获得
import json
@task(2)
def view_index(self):
r = self.client.get("/index/")
response = json.loads(r.text)
demo = response['取值'] # 假如取demo
print("===>", response['取值'], type(response)) # 取值
self.client.get('index/url/{}/'.format(demo))
4. 小结
- 可以先看一下request库 ,涉及到数据依赖的问题更好学习
https://yiluotalk.com/2019/12/19/Python%20requests%E5%BA%93(%E4%B8%80)/
Locust性能测试3--参数化、数据依赖的更多相关文章
- Python Locust性能测试框架实践
[本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...
- Locust性能测试
https://www.cnblogs.com/yoyoketang/p/9638151.html https://www.cnblogs.com/yoyoketang/p/9642242.html ...
- python locust 性能测试:locust安装和一些参数介绍
安装参考 https://www.cnblogs.com/fnng/p/6081798.html <虫师大大的,很详细> ps:python3.7暂不支持locust:python3安装建 ...
- Locust性能测试4-参数关联
前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:htt ...
- Locust性能测试6-命令行参数详解
前言 当我们在linux上使用locust工具压测的时候,会使用no-web模式,然后需要收集运行的日志,方便查找问题. 命令行参数 输入locust --help 查看所有的命令行参数 > l ...
- Locust性能测试_参数关联
前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:htt ...
- Locust性能测试_先登录场景案例
前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的loc ...
- Locust性能测试_百度案例
一.安装: 1.Locust在PyPI上可用,可以通过pip或easy_install安装:pip install locustio 2.查看Locust可用选项:loc ...
- locust性能测试脚本模板
locust性能测试脚本模板 #!/usr/bin/env python # -*- coding: utf-8 -*- import time from locust import HttpLocu ...
- Locust性能测试工具核心技术@task和@events
Tasks和Events是Locust性能测试工具的核心技术,有了它们,Locust才能称得上是一个性能工具. Tasks 从上篇文章知道,locustfile里面必须要有一个类,继承User类,当性 ...
随机推荐
- Day13_Thymeleaf简介
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 1.Th ...
- matpltlib 示例
matplotlib https://matplotlib.org/index.html
- 读取 csv , xlsx 表格并添加总分列
import pandas as pd import numpy as np data = pd.read_excel('学生成绩表.csv',columns = ['学号','姓名','高数','英 ...
- PHP array_unshift() 函数
实例 插入元素 "blue" 到数组中: <?php$a=array("a"=>"red","b"=> ...
- PHP timezone_offset_get() 函数
------------恢复内容开始------------ 实例 返回相对于 GMT 的时区偏移: <?php$tz=timezone_open("Asia/Taipei" ...
- Virtuoso 中 display.drf、techfile.tf、tech.db 之间的关系,以及 Packet 在它们之间的作用
https://www.cnblogs.com/yeungchie/ 一般工艺库下的"技术文件"有 tech.db 和 techfile.tf , Packet 是 display ...
- luogu P5892 [IOI2014]holiday 假期 决策单调性优化dp 主席树
LINK:holiday 考虑第一个subtask. 容易想到n^2暴力枚举之后再暴力计算答案. 第二个subtask 暴力枚举终点可以利用主席树快速统计答案. 第三个subtask 暴力枚举两端利用 ...
- Struts2中Get请求转码问题
Tomcat默认编码为ISO859-1 Post提交时,struts2会对其转码为iso8859-1,因此不需要另外转码,而 Get提交表单,则需要单独转码,转码过程如下图:
- ASP.NET MVC+LayUI视频上传
前言: 前段时间在使用APS.NET MVC+LayUI做视频上传功能的时,发现当上传一些内存比较大的视频就会提示上传失败,后来通过查阅相关资料发现.NET MVC框架为考虑安全问题,在运行时对请求的 ...
- 【FZYZOJ】「Paladin」瀑布 题解(期望+递推)
题目描述 CX在Minecraft里建造了一个刷怪塔来杀僵尸.刷怪塔的是一个极高极高的空中浮塔,边缘是瀑布.如果僵尸被冲入瀑布中,就会掉下浮塔摔死.浮塔每天只能工作 $t$秒,刷怪笼只能生成 $N$ ...