性能测试工具 Locust Http 请求任务脚本创建

FisherMan · 2020年06月03日 · 最后由 放肆的小鸡 回复于 2020年06月04日 · 1641 次阅读

目前流行的微服务化,使 Http 类型的接口从底层 RPC 到中台 manage 再到前端 APi 都可以进行覆盖,适用的范围和人群也更为广泛。测试人员可以轻松通过 swagger 文档或者抓包工具来进行各个端 API 接口自动化以及性能测试,本章主要总结下 http 接口的压测任务的创建。
如下例子:

from locust import HttpLocust, TaskSet, task, between
import queue


# 多个用户登录脚本

class MySetTest(TaskSet):
    user_auth_token = None

    @task(1)
    def user_login(self):
        s = self.locust.queue_data1.get()
        api = '/user/login'
        body = {
            'username': s,
            'password': "1111"
        }
        headers = {
            'Content-Type': 'application/json'
        }
        querystring = {"type": "1"}
        with self.client.post(url=api, json=body, params=querystring, headers=headers, catch_response=True,
                              name="login_api") as res:
            if res.status_code != 200:
                res.failure("Failed")  #如果该条用例的状态不是200,将该条用例标记为失败


class UserTestLocust(HttpLocust):
    task_set = MySetTest
    queue_data1 = queue.Queue()
    import random
    for each in range(0, 10):
        queue_data1.put_nowait("1300000" + str(random.randint(1000, 9999)))
    wait_time = between(1, 5)
    host = 'http://127.0.0.1:8800'

由例子可以看出(传递 http 请求就像使用 requests 发送 post 或者 get 一样):

  • 1.我们看下请求的发送:在 locust 脚本的 User 类中我们继承了 HttpLocust,HttpLocust 本身又继承了 Locust 类 (所以我们可以像继承 Locust 类一样,直接写 taskset,wait_time 等)。除此之外在 HttpLocust 类中self.client重新进行了赋值,等于HttpSession(base_url=self.host)HttpSession继承了类requests.Session,在HttpSessionrequest()函数跟requests.request()几乎一模一样(还是有些细微的差别比如参数:catch_response,name,是 HttpSession 独有的)。
  • 2.我们再来看下响应:在 HttpSession 的 request() 方法中,response = self._send_request_safe_mode(method, url, **kwargs),方法返回了三种:1、正常返回:requests.response;2、参数错误,抛出异常;3、response 异常,返回 status_code=0 ,content 为 None; 所以接口的响应
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞
FisherMan Locust 任务脚本初探 中提及了此贴 06月03日 19:53
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册