前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >locust入门 -4 实战脚本开发

locust入门 -4 实战脚本开发

作者头像
孟船长
发布2022-04-12 14:37:18
3020
发布2022-04-12 14:37:18
举报

我们已经把基础知识都了解了,现在就可以进入实战脚本开发,看一下效果了。我们还是用微信公众号提供的接口,有兴趣的可以复制下面代码,可以直接在本地执行了。

我们先分析一下需求,我们的目标是压测创建标签接口,这个接口有一个条件,就是首先要登录,就是获取access_token。所以我们在写创建标签以前要先获取access_token,可是如果每次执行都先登录,那就成了压测登录+创建标签两个接口了,这样很难看到单个接口的真实数据。所以我们得这样写:

  • 先执行获取access_token接口,获取access_token
  • 把access_token传到创建标签接口,实现创建标签
  • 创建标签名不能重复,所以要把标签名设置成变化的。
  • 最后可以查询一下标签,看是否创建成功

这里还有一点要注意,就是我们模拟多用户的时候,这些用户都是并行的,模拟了多少个用户,on_starton_stop就会执行多少次。

代码:

代码语言:javascript
复制
# coding: utf-8

import random
from locust import HttpUser, task, between, TaskSet


class TokenTask(TaskSet):

    token = None

    def on_start(self):
        data = {'appid': 'wx4d8f7de320aca501',
                'secret': 'd096e22047235cad799d917a517c6246',
                'grant_type': 'client_credential'}
        with self.client.request('POST',
                                 '/cgi-bin/token',
                                 params=data,
                                 verify=False,
                                 name='获取access_token') as res:
            access_token = res.json()['access_token']
            print(access_token)
            self.token = access_token

    @task
    def create_tags(self):
        print("执行create_tags方法")
        s = random.randint(1, 100)
        data = {"tag": {"name": f"Beijing{s}"}}
        with self.client.request('POST',
                                 '/cgi-bin/tags/create?access_token=' + self.token,
                                 json=data, name='新建标签') as r:
            print(r.text)

    def on_stop(self):
        with self.client.request('POST',
                                 '/cgi-bin/tags/get?access_token=' + self.token,
                                 name='查询标签') as r:
            print(r.text)


class QuickstartUser(HttpUser):
    tasks = [TokenTask]
    host = "https://api.weixin.qq.com"
    wait_time = between(1, 2)

执行文件:locust -f testindex.py可以看到

locust结果

locust图表

Pycharm执行返回

代码分析:我们定义了两个类TokenTask继承TaskSetQuickstartUser继承HttpUser

QuickstartUser类中定义了任务类host地址、wait_time等待/思考时间。

TokenTask这是我们的任务类。为了方便调用,先定义了一个空的token

然后已知登录只需要在开始时执行一次,所以我获取access_token接口定义在了on_start里面,然后把接口需要的参数通过self.client.request进行传递,直接self.client.get/post也可以,只是这样写我觉得更清晰,而且locust也更支持。

request中增加了一个name参数,这样你在web端看的时候就不显示具体的接口地址而是显示这个name名了。

在创建标签create_tags中定义了一个变量s,它是1-100之间的随机数,然后在data数据中进行了调用。f"文字{变量}"这种写法就可以直接引用变量,这是Python的基础语法,不需要多解释,最后发送一下请求。

on_stop方法中又增加了一个查询的接口请求,以便确认创建标签成功了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自动化测试实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档