zoukankan      html  css  js  c++  java
  • 性能测试-Locust脚本加强篇(关联、检查点、集合点)

    1、关联:通常在业务流程中有很多一系列的接口调用,从后面的接口依赖前边接口的结果数据

    from lxml import etree
    from locust import TaskSet, task, HttpUser
    class UserBehavior(TaskSet):
        @staticmethod
        def get_session(html):
            tree = etree.HTML(html)
            return tree.xpath("//div[@class='btnbox']/input[@name='session']/@value")[0] 
        @task(10)
        def test_login(self):
            html = self.client.get('/login').text
            username = 'user@compay.com'
            password = '123456'
            session = self.get_session(html)
            payload = { 'username': username, 'password': password, 'session': session }
            self.client.post('/login', data=payload)
    
    class WebsiteUser(HttpUser):
        host = 'http://debugtalk.com'
        # task_set = UserBehavior
        tasks = [UserBehavior ]
        min_wait = 1000
        max_wait = 3000
    

    2、检查点:用来判断返回值是否符合要求

    from lxml import etree
    from locust import TaskSet, task, HttpUser
    class UserBehavior(TaskSet):
        @staticmethod
        def get_session(html):
            tree = etree.HTML(html)
            return tree.xpath("//div[@class='btnbox']/input[@name='session']/@value")[0] 
        @task(10)
        def test_login(self):
            html = self.client.get('/login').text
            assert "200" in html
            username = 'user@compay.com'
            password = '123456'
            session = self.get_session(html)
            payload = { 'username': username, 'password': password, 'session': session }
            self.client.post('/login', data=payload)
    
    class WebsiteUser(HttpUser):
        host = 'http://debugtalk.com'
        # task_set = UserBehavior
        tasks = [UserBehavior ]
        min_wait = 1000
        max_wait = 3000
    

    3、集合点:提高某个接口的并发度,当所有用户运行到指定位置后集合等待,同时向下执行

    from gevent._semaphore import Semaphore
    from locust import TaskSet, events
    from lxml import etree
    
    all_locusts_spawned = Semaphore()
    all_locusts_spawned.acquire()
    def on_hatch_complete(**kwargs):
        all_locusts_spawned.release() # 创建钩子方法
    
    events.hatch_complete += on_hatch_complete # 挂载到locust钩子函数(所有的Locust实例产生完成时触发)
    
    class TestTask(TaskSet):
        def on_start(self):
            """ on_start is called when a Locust start before any task is scheduled """
            all_locusts_spawned.wait() # 限制在所有用户准备完成前处于等待状态
            self.login()
    
        @staticmethod
        def get_session(html):
            tree = etree.HTML(html)
            return tree.xpath("//div[@class='btnbox']/input[@name='session']/@value")[0] 
    
        def login(self):
            html = self.client.get('/login').text
            username = 'user@compay.com'
            password = '123456'
            session = self.get_session(html)
            payload = {'username': username, 'password': password, 'session': session}
            self.client.post('/login', data=payload)
    

    个人博客 蜗牛

  • 相关阅读:
    遍历MapControl中的图层方法总结
    ArcEngine加载SDE图层
    C#+ArcEngine 新建点元素
    sql日期查询问题
    MSSQL 将截断字符串或二进制数据
    gridview的Rowcommand命令中获取行索引的方法总结
    利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用
    ArcGIS Server开发示例诠释
    将ASP.NET MVC 2.0 部署在IIS6
    [OpenCV+C#]开发环境的搭建
  • 原文地址:https://www.cnblogs.com/codeobj/p/13714290.html
Copyright © 2011-2022 走看看