• Locust 脚本练习


    1、循环取数据,数据可重复使用

      e.g. 模拟5个用户并发请求网页,总共有6个URL地址,每个虚拟用户都会依次循环加载这6个URL地址;

    from locust import TaskSet, task, HttpLocust
    class UserBehavior(TaskSet):
        def on_start(self):
            self.index = 0
        @task
        def test_visit(self):
            url = self.locust.share_data[self.index]
            print('visiting -- url: %s' % url)
            self.index = (self.index + 1) % len(self.locust.share_data)
            self.client.get(url,verify=False)
    class WebsiteUser(HttpLocust):
        task_set = UserBehavior
        min_wait = 1000
        max_wait = 3000
        share_data = ['url1', 'url2', 'url3', 'url4', 'url5','url6']
        host = 'https://172.1.1.1/'

    2、保证并发测试数据唯一性,不循环取数据

      e.g. 模拟5用户并发注册账号,总共有个100账号,要求注册账号不重复,注册完毕后结束测试;

    from locust import TaskSet, task, HttpLocust
    from Queue import Queue
    class UserBehavior(TaskSet):
        @task
        def on_start(self):
            try:
                data = self.locust.user_data_queue.get()
            except Queue.Empty():
                print('account data run out, test ended.')
                exit(0)
            print('register with user: {}, pwd: {}'.format(data['account'], data['password']))
            payload = {
                'account': data['account'],
                'password': data['password']
            }
            self.client.post('/register', data=payload,verify = False)
    class WebsiteUser(HttpLocust):
        task_set = UserBehavior
        user_data_queue = Queue()
        for index in range(100):
            data = {
                "account": "test%04d" % index,
                "password": "pwd%04d" % index,
            }
            user_data_queue.put_nowait(data)
        min_wait = 1000
        max_wait = 3000

    3、保证并发测试数据唯一性,循环取数据

      e.g 模拟5用户并发登录账号,总共有100个账号,要求并发登录账号不相同,但数据可循环使用。

    from locust import TaskSet, task, HttpLocust
    from
    Queue import Queue class UserBehavior(TaskSet): @task def on_start(self): try: data = self.locust.user_data_queue.get() except Queue.Empty(): print('account data run out, test ended.') exit(0) print('register with user: {}, pwd: {}'.format(data['account'], data['password'])) payload = { 'account': data['account'], 'password': data['password'] } self.client.post('/register', data=payload,verify = False) self.locust.user_data_queue.put_nowait(data) class WebsiteUser(HttpLocust): task_set = UserBehavior user_data_queue = Queue() for index in range(100): data = { "account": "test%04d" % index, "password": "pwd%04d" % index, } user_data_queue.put_nowait(data) min_wait = 1000 max_wait = 3000

    该种场景的实现方式与上一种场景基本相同,唯一的差异在于,每次使用完数据后,需要再将数据放入队列中。

  • 相关阅读:
    JavaScript基础数组的字面声名法(010)
    @Scheduled(cron="") spring定时任务时间设置
    servlet示例
    javaweb jsp页面上传excel文件
    js闭包详解
    eclipse 使用mvn模块化开发
    linux 安装mysqlServer
    linux安装jdk
    深入学习微框架Spring-boot
    mvn打包发布
  • 原文地址:https://www.cnblogs.com/xiatian09/p/9767157.html
Copyright © 2020-2023  润新知