python 性能测试_Python性能测试locust(二)
“Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。它的主要思想就是模拟一群用户访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为”本文我们来具体完成一个项目。01.项目结构既然是自动化的测试项目,那么就要有一个项目的结构,存储代码,存储日志,报告等信息。我的项目结构如下:ca
“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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)