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

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

01.项目结构

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

我的项目结构如下:

case:放置测试用例

config:放置全局配置信息

data:放置用例数据

interface:全局封装接口

log:日志信息

report:测试报告

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

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

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

02.代码实例

1. 请求数据页面代码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. 程序内调用from config.config import url

from interface.login import login_skyds

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

url引用自config包,如下:

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

login_skyds引用自interfa包,如下:

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

4. 程序运行

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

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐