python_locust压测

可以在命令行启动,cmd命令框,进入此文件的目录输入:
locust -f .\dash.py --host="https://litemall.hogwarts.ceshiren.com"
-f: 指定性能测试脚本文件的绝对路径。
–host: 指定被测试应用的URL的地址,就是测试项目的host地址。

Number of users:设置模拟用户数。(并发)
Spawn rate :每秒产生(启动)的虚拟用户数。(递增数)
Host:host地址。//可在WebsiteUser类下直接写host = "www.*.com",启动命令不加host参数,这里就不会显示,则默认走代码写死的host地址。
点击 “Start swarming” 按钮,立即开始运行性能测试。

改进前,账密未参数化:

import random
from locust import HttpUser, task, between, SequentialTaskSet, tag


class MyTaskCase(SequentialTaskSet):
    # 初始化方法,相当于 setup
    def on_start(self):
        pass

    # @task python中的装饰器,告诉下面的方法是一个任务,
    # 这个装饰器和下面的方法被复制多次,改动一下,就能写出多个接口
    # 装饰器后面带上(数字)代表在所有任务中,执行比例
    # 要用这个装饰器,需要头部引入 从locust中,引入 task


    @task(1)  # 装饰器,说明下面是一个任务
    def login_(self):
        self.username = "hogwarts"
        self.pwd = 'test12345'
        self.headers = {"Content-Type": "application/json"}
        url = '/admin/auth/login'  # 接口请求的URL地址
        data = {"username": self.username, "password": self.pwd, "code": ""}
        with self.client.post(url,
                              json=data,
                              headers=self.headers,
                              catch_response=True) as rsp:
            # 提取响应json 中的信息,定义为 类变量
            self.token = rsp.json()['data']['token']
            if rsp.status_code == 200 and rsp.json()['errno'] == 0:
                rsp.success()
            else:
                rsp.failure('login_failure')

    @task(2)  # 装饰器,说明下面是一个任务
    def getlist_(self):
        url = '/admin/region/list'  # 接口请求的URL地址
        # 引用上一个任务的 类变量值   实现参数关联
        headers = {"X-Litemall-Admin-Token": self.token}
        # 使用self.client发起请求,请求的方法 选择 get
        with self.client.get(url,
                             headers=headers,
                             catch_response=True) as rsp:
            if rsp.status_code == 200 and rsp.json()['errno'] == 0:
                rsp.success()
            else:
                rsp.failure('getlist_failure')

    # 结束方法, 相当于teardown
    def on_stop(self):
        pass


# 定义一个运行类 继承HttpUser类, 所以要从locust中引入 HttpUser类
class UserRun(HttpUser):
    tasks = [MyTaskCase]
    # 设置运行过程中间隔时间 需要从locust中 引入 between
    # wait_time = between(0.1, 3)

改进后,账密读取csv文件参数化:

import random
from locust import HttpUser, task, between, SequentialTaskSet, tag


class MyTaskCase(SequentialTaskSet):
    # 初始化方法,相当于 setup
    def on_start(self):
        pass

    # @task python中的装饰器,告诉下面的方法是一个任务,
    # 这个装饰器和下面的方法被复制多次,改动一下,就能写出多个接口
    # 装饰器后面带上(数字)代表在所有任务中,执行比例
    # 要用这个装饰器,需要头部引入 从locust中,引入 task

    @task(1)  # 装饰器,说明下面是一个任务
    def login_(self):
        with open('user-pwd.csv', 'r', ) as ud:
            for line in ud:
                temp = line.strip().split(",")
                self.username = temp[0]
                self.pwd = temp[1]

                self.headers = {"Content-Type": "application/json"}
                url = '/admin/auth/login'  # 接口请求的URL地址
                data = {"username": self.username, "password": self.pwd, "code": ""}
                with self.client.post(url,
                                      json=data,
                                      headers=self.headers,
                                      catch_response=True) as rsp:
                    if rsp.status_code == 200 and rsp.json()['errno'] == 0:
                        rsp.success()
                        # 提取响应json 中的信息,定义为 类变量
                        self.token = rsp.json()['data']['token']

                        print("sucess", self.pwd, self.username)
                    else:
                        rsp.failure('login_failure')

                        print("fail", self.pwd, self.username)

    @task(2)  # 装饰器,说明下面是一个任务
    def getlist_(self):
        url = '/admin/region/list'  # 接口请求的URL地址
        # 引用上一个任务的 类变量值   实现参数关联
        headers = {"X-Litemall-Admin-Token": self.token}
        # 使用self.client发起请求,请求的方法 选择 get
        with self.client.get(url,
                             headers=headers,
                             catch_response=True) as rsp:
            if rsp.status_code == 200 and rsp.json()['errno'] == 0:
                rsp.success()
            else:
                rsp.failure('getlist_failure')

    # 结束方法, 相当于teardown
    def on_stop(self):
        pass


# 定义一个运行类 继承HttpUser类, 所以要从locust中引入 HttpUser类
class UserRun(HttpUser):
    tasks = [MyTaskCase]
    # 设置运行过程中间隔时间 需要从locust中 引入 between
    # wait_time = between(0.1, 3)

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值