第一种 **********************************
from locust import HttpLocust, TaskSet, task
import json
class HangOutTaskSet(TaskSet):
header = {'charset': 'utf-8', 'content-type': 'application/json'}
@task
def hang_out(self):
request_url ="/v2.0/account/findByAccountId"
request_params={
"accountId":156324326702300100
}
header = {'charset': 'utf-8', 'content-type': 'application/json'}
request_result = self.client.get(url=request_url, params=(request_params), headers=header )
class PlayGameTaskSet(TaskSet):
@task
def getVasl(self):
request_url ='/v2.0/account/getAccountByAccountNo'
reqiest_params={
'accountNo':'xl0021720001563243267fbk02300110'
}
header = {'charset': 'utf-8', 'content-type': 'application/json'}
request_result = self.client.get(url=request_url, params=(reqiest_params), headers=header)
class HangOutTaskLoucst(HttpLocust):
weight = 10
task_set = HangOutTaskSet
min_wait = 1
max_wait = 5
class PlayGameTaskLoucst(HttpLocust):
weight = 90
task_set = PlayGameTaskSet
min_wait = 1
max_wait = 5
第二种*****************************************
from locust import HttpLocust, TaskSet, task
import uuid
import random
import json
def add_news(l):
# 参数进行初始化
order_no =random.randint(1000000,99999999)
order_no2 = random.randint(2000000,99999999)
post_data = {
"details": [
{
"accountId": 156506194607800103,
"accountingSummary": "充值压力测试",
"amount": 2.26,
},
{
"accountId": 156506194607800103,
"accountingSummary": "充值压力测试",
"amount": 2.26,
}
],
"orderNo": order_no,
"remark": "充值压力测试",
"source": "lucust",
"thirdNo": order_no,
"tradeTime": 1564992540085
}
header = {'charset': 'utf-8', 'content-type': 'application/json'}
l.client.post("/record/entry", data= json.dumps(post_data), headers=header)
def publish_news(l):
pass
def login(l):
l.client.post("/login",{"username":"ellen_key","password":"education"})
class WebsiteTasks(TaskSet):
def on_start(self):
login(self)
tasks=[add_news, publish_news]
class WebSiteUser(HttpLocust):
task_set = WebsiteTasks
'''每个用户执行两个任务间隔时间的上下限(毫秒),如果不制定默认为1秒'''
min_wait=1
max_wait =5
第三种**********************************************
from locust import HttpLocust, TaskSet, task
import json
class UserBehavior(TaskSet):
header = {'charset': 'utf-8', 'content-type': 'application/json'}
@task(10)
def getTagVals(self):
request_url ="/v2.0/account/findByAccountId"
request_params={
"accountId":156324326702300100
}
header = {'charset': 'utf-8', 'content-type': 'application/json'}
request_result = self.client.get(url=request_url, params=(request_params), headers=header )
@task(15)
def getVasl(self):
request_url ='/v2.0/account/getAccountByAccountNo'
reqiest_params={
'accountNo':'xl0021720001563243267fbk02300110'
}
header = {'charset': 'utf-8', 'content-type': 'application/json'}
request_result = self.client.get(url=request_url, params=(reqiest_params), headers=header)
class MobileLocust(HttpLocust):
task_set = UserBehavior
min_wait = 1
max_wait = 5
locust 中的 task
@task(10),10 表示locust实例被挑选执行的权重,数值越高,执行频率越高
tasks 可以是一个二元组列表后者dict :task ={ 任务1:10, 任务2:5,任务3:7 } 任务名:权重值
或者 task =[ (任务名 ,权重值),(任务名,权重值) ]
min_wait, max_wait 指用户执行任务之间的等待时间下界和上界
taskset : 每个用户的任务集合,然后按照taskset里面的每个任务按照权重随机的执行
taskset可以进行嵌套
calss UserTask(TaskSet):
@task(2)
class stay(TaskSet):
@task(3)
def read(self):
pass
@task(8)
def sing(self):
pass
@task(1)
def leave(self):
pass
如果想从一个taskset的任务里跳出来,需要引用self.interrupt()
on_start()函数,是每个locust用户进入TaskSet之后做的第一件事
执行流程:
先执行WebsiteTasks中的on_start(只执行一次),作为初始化;
从WebsiteTasks中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行;
根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait或者max_wait,以TaskSet中的优先),在时间范围中随机取一个值,休眠等待;
重复2~3步骤,直至测试任务终止。
单进程、多进程的执行
相当棒的一篇关于locust的文章:
- oracle if/else功能的实现的3种写法
转载:oracle中if/else功能的实现的3种写法 以下是内容留存: 1.标准sql规范 一.单个IF . if a=... then ......... end if; . if a=... t ...
- Angularjs中controller的三种写法
在Angular中,Directive.Service.Filter.Controller都是以工厂方法的方式给出,而工厂方法的参数名对应着该工厂方法依赖的Service.angularjs中cont ...
- 输出内容(document.write)四种写法
第一种:输出内容用""括起,直接输出""号内的内容 <script type="text/javascript"> docume ...
- 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)
1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...
- [JS] 面向对象的5种写法和拓展JS对象的写法
面向对象的JAVA 最开始当然是对象的定义了 收集了以下的五种写法 //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; C ...
- Android开发系列之按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- OWIN katana注册中间件的几种写法
首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...
- Android开发系列之button事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...
- display 的 32 种写法
从大的分类来讲, display的 32种写法可以分为 6个大类,再加上 1个全局类,一共是 7大类: 外部值 内部值 列表值 属性值 显示值 混合值 全局值 外部值 所谓外部值,就是说这些值只会直接 ...
随机推荐
- Python 异常处理Ⅲ
使用except而不带任何异常类型 你可以不带任何异常类型使用except,如下实例: 以上方式try-except语句捕获所有发生的异常.但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信 ...
- python使用配置文件
通过配置文件将变量暴露给用户修改 标准库模块configparser,从而可在配置文件中使用标准格式. 必须使用[files].[colors]等标题将配置文件分成几部分(section).标题的名称 ...
- Open Cascade 转化为OpenSceneGraph中的Mesh
#include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osgGA/StateSetManipul ...
- Windows Server 快速生成免费SSL证书 (letsencrypt)
最近官网需求部署个SSL证书,一番操作后把借鉴的网站与实际过程记录下来 Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织: 有趋势有 ...
- List集合的三个实现类比较
1. ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 2. Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 3. LinkedList 底层数据结构是链 ...
- Win 7无法安装Microsoft .NET Framework 4.6.2
造冰箱的大熊猫@cnblogs 2018/9/6 在Windows 7 64位计算机上安装某个软件时,安装程序提示需先安装Microsoft .NET Framework 4.6.2.本来以为小事一桩 ...
- 51 Nod 1134 最长递增子序列(经典问题回顾)
1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元 ...
- TCP如何保证可靠传输
TCP 协议如何保证可靠传输 一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...
- 「雅礼集训 2017 Day5」远行
题目链接 问题分析 要求树上最远距离,很显然就想到了树的直径.关于树的直径,有下面几个结论: 如果一棵树的直径两个端点为\(a,b\),那么树上一个点\(v\)开始的最长路径是\(v\rightarr ...
- R_Studio(关联)对Groceries数据集进行关联分析
RGui的arules程序包里含有Groceries数据集,该数据集是某个杂货店一个月真实的交易记录,共有9835条消费记录,169个商品 #install.packages("arules ...