第一种 **********************************
 
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. C# 跨线程访问控件(MethodInvoker)

    参考:https://www.cnblogs.com/lvdongjie/p/5428815.html .Net 通常禁止跨线程访问控件,设置Control.CheckForIllegalCrossT ...

  2. Ubuntu下搜狗输入法乱码(二)

    本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/25 搜狗输入法时不时出现候选字乱码的问题.参照网上所说的修改Fcitx配置中的简体中文和繁体中文转换配置的方法,无 ...

  3. 关于MySQL 处理重复数据

    统计重复数据 以下我们将统计表中 first_name 和 last_name的重复记录数: mysql> SELECT COUNT(*) as repetitions, last_name, ...

  4. 191024DjangoORM之单表操作

    一.ORM基础 ORM:object relation mapping 对象关系映射表 1.配置连接MySQL settings.py:将默认配置删除,加入以下配置 DATABASES = { 'de ...

  5. LeetCode 22. 括号生成(Generate Parentheses)

    题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n =3,生成结果为: [ "((()))", "(() ...

  6. java跨平台的原因

    java跨平台的原因 java有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台. 1.java代码不是直接 ...

  7. How does ASP.NET Forms Authentication really work?

    I've always wondered how exactly ASP.NET forms authentication works. Yes, I know how to configure Fo ...

  8. What is the most efficient way to deep clone an object in JavaScript?

    What is the most efficient way to deep clone an object in JavaScript? Reliable cloning using a libra ...

  9. java工程打成jar包 - 使用maven assembly插件打包及手动打包

    在java工程打包的过程中遇到过不少问题,现在总结一下.一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便:另一种是依赖了本机jar包(不能通过pom.xml ...

  10. 浏览器端-3WSchool-JavaScript:JavaScript Boolean 对象

    ylbtech-浏览器端-3WSchool-JavaScript:JavaScript Boolean 对象 1.返回顶部 1. Boolean 对象 Boolean 对象表示两个值:"tr ...