第一种 **********************************
 
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
    host = 'http://10.1.1.36:25419'
    task_set =  HangOutTaskSet
    min_wait =  1
    max_wait =  5
 
class PlayGameTaskLoucst(HttpLocust):
    weight = 90
    host = 'http://10.1.1.36;25419'
    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):
    host="http://10.1.1.36:25419"
    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):
    host = 'http://10.1.1.36:25419'
    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 -H https://debugtalk.com -f demo.py 
多进程 :主: locust -H https://debugtalk.com -f demo.py --master --port=8088
              从:locust -H https://debugtalk.com -f demo.py --slave
如果主从不在一台机器上: locust -H https://debugtalk.com -f demo.py --slave --master-host=<locust_machine_ip>
 
相当棒的一篇关于locust的文章:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

locust 的几种写法及部分内容说明的更多相关文章

  1. oracle if/else功能的实现的3种写法

    转载:oracle中if/else功能的实现的3种写法 以下是内容留存: 1.标准sql规范 一.单个IF . if a=... then ......... end if; . if a=... t ...

  2. Angularjs中controller的三种写法

    在Angular中,Directive.Service.Filter.Controller都是以工厂方法的方式给出,而工厂方法的参数名对应着该工厂方法依赖的Service.angularjs中cont ...

  3. 输出内容(document.write)四种写法

    第一种:输出内容用""括起,直接输出""号内的内容 <script type="text/javascript"> docume ...

  4. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

  5. [JS] 面向对象的5种写法和拓展JS对象的写法

    面向对象的JAVA  最开始当然是对象的定义了 收集了以下的五种写法 //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; C ...

  6. Android开发系列之按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  7. OWIN katana注册中间件的几种写法

    首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...

  8. Android开发系列之button事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...

  9. display 的 32 种写法

    从大的分类来讲, display的 32种写法可以分为 6个大类,再加上 1个全局类,一共是 7大类: 外部值 内部值 列表值 属性值 显示值 混合值 全局值 外部值 所谓外部值,就是说这些值只会直接 ...

随机推荐

  1. dispatchEvent 自定义触发事件,常用于自定义鼠标事件或点击事件

    自定义事件的触发又是不可避免的,由于浏览器兼容性问题,我们要分开说了,针对标准浏览器和IE6/7等考古浏览器. 1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEve ...

  2. Mybatis 中 refid是什么意思

    1.首先定义一个sql标签,一定要定义唯一id 例:<sql  id="Base_Column_List" > name,age </sql> 2.然后通过 ...

  3. QT:QSS字体设置

    css,qss font-family常用的黑体宋体等字体中英文对照 当qss使用中文设置字体时,无法生效.因为qss不支持中文设置字体,所以下面给出一些常用的黑体宋体字体中英文对照. 微软雅黑: M ...

  4. Java类路径的问题

    下面是eclipse中的文件组织形式. 下面是硬盘中文件的组织形式: src:中就是自己编写的没有编译的代码. target中是编译的Java中的class文件和一些不用编译的文件.这样也就明白了为什 ...

  5. 【杂题】[AGC034D] Manhattan Max Matching【费用流】

    Description 有一个无限大的平面,有2N个位置上面有若干个球(可能重复),其中N个位置是红球,N个位置是蓝球,红球与蓝球的总数均为S. 给出2N个位置和上面的球数,现要将红球与蓝球完美匹配, ...

  6. websocket协议解决消息发送问题 Could not decode a text frame as UTF-8.

    在使用websocket 时出现了Could not decode a text frame as UTF-8 首次连接成功当发送消息时,出现了编码作错误 第一请求页面时,连接成功 当发送消息时,不加 ...

  7. java 开发工具包 jdk 64位 jdk-8u221-windows-x64.exe 迅雷下载

    迅雷下载链接(迅雷新建任务,复制链接进去): https://download.oracle.com/otn/java/jdk/8u221-b11/230deb18db3e4014bb8e3e8324 ...

  8. 创建新文件(包括上级文件夹),获取外置SD卡的根目录

    public String hebGetExternalRootDir(String externalAndriodSubDirPath){ if ( externalAndriodSubDirPat ...

  9. 云服务器搭建anaconda pytorch torchvision

    (因为在普通用户上安装有些权限问题安装出错,所以我在root用户下相对容易安装,但是anaconda官网说可以直接在普通用户下安装,不过,在root下安装,其他用户也是能用的. 访问Anaconda官 ...

  10. 1.7 本机单步调试(Intellij IDEA)

    先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指 ...