前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python性能测试locust(二)

Python性能测试locust(二)

作者头像
周萝卜
发布2019-07-17 15:16:11
1K0
发布2019-07-17 15:16:11
举报
文章被收录于专栏:萝卜大杂烩

Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。它的主要思想就是模拟一群用户访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为

本文我们来具体完成一个项目。

01.项目结构

既然是自动化的测试项目,那么就要有一个项目的结构,存储代码,存储日志,报告等信息。

我的项目结构如下:

case:放置测试用例

config:放置全局配置信息

data:放置用例数据

interface:全局封装接口

log:日志信息

report:测试报告

test:编程过程中用于测试的代码

run_locust.bat:Windows上运行测试的bat脚本

run_test.py:基于selenium webdriver的自动终止脚本

02.代码实例

1. 请求数据页面代码

代码语言:javascript
复制
from locust import HttpLocust, TaskSet, task
import sys
sys.path.append("C:\\Work\\code\\Python\\locust")
from config.config import url
from interface.login import login_skyds
from interface.display_time import display_time


class UserBehavior(TaskSet):
    session = login_skyds()
    headers = {
        'Cookie': "session=" + session,  # 一定要用Cookie啊,用Cookies不行!!
        'Content-Type': "application/json",
        'cache-control': "no-cache",
        'User-Agent': "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 70.0.3538.77 Safari / 537.36"
    }

    @task
    def call_uri1(self):
        uri1 = '/v2/auth/user'
        display_time(uri1)
        with self.client.get(url + uri1, headers=self.headers, catch_response=True) as response:
            if response.status_code != 200:
                response.failure('create project failed! reason is: %s' % response.text)
            else:
                response.success()

    @task
    def call_uri2(self):
        uri2 = '/v2/task/skyflow_data_service/?name=&page=1&page_size=10&show_all=true'
        display_time(uri2)
        with self.client.get(url + uri2, headers=self.headers, catch_response=True) as response:
            if response.status_code != 200:
                response.failure('create project failed! reason is: %s' % response.text)
            else:
                response.success()

    @task(2)
    def call_uri3(self):
        uri3 = '/v2/dataset/?name=&page=1&page_size=10&share_kind=-1&data_size=-1&order=desc&order_by=created_at&data_format=-1'
        display_time("/v2/dataset/")
        with self.client.get(url + uri3, headers=self.headers, catch_response=True) as response:
            if response.status_code != 200:
                response.failure('create project failed! reason is: %s' % response.text)
            else:
                response.success()


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 3000
    max_wait = 6000
    host = url

2. 页面涉及调用的接口

/v2/auth/user

/v2/task/skyflow_data_service/?name=&page=1&page_size=10&show_all=true

/v2/dataset/?name=&page=1&page_size=10&share_kind=-1&data_size=-1&order=desc&order_by=created_at&data_format=-1

由于第三个接口在请求页面时调用了两次,所以这里权重为task(2),每次测试执行时,都会比其他两个接口多调用。

3. 程序内调用

代码语言:javascript
复制
from config.config import url
from interface.login import login_skyds

程序中涉及了两处程序内调用

url引用自config包,如下:

用来存储需要调用的系统地址

login_skyds引用自interfa包,如下:

用于登陆并且返回session供后面调用接口使用。

4. 程序运行

这样简单的测试用例就完成了,可以运行试试喽

locust -f ../locust_files/上面的文件名.py

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

本文分享自 萝卜大杂烩 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档