软件测试进阶之自动化测试——locust性能测试实例

扼要:

1、了解locust进行性能测试的实例;

2、独立编写locust性能测试代码;


本课程主要讲述用python的locust库进行性能测试。

Locust是一个python代码编写的开源负载测试工具。其支持模拟成千上万的用户,可分布式;报告、运行情况可支持网页观看。

Locust环境搭建

1、安装python,下载地址:https://www.python.org/downloads/

2、安装读取excel的库xlrd,安装命令:pip install xlrd

3、安装locust,安装命令:pip install locust==1.3.1(因为本教程用的locust版本为1.3.1)

简单语法说明

1、简单代码示例

# 基本都需要导入HttpUser, between, task

from locust import HttpUser, between, task

class WebsiteUser(HttpUser):

# 思考时间区间在5-15秒

wait_time = between(5, 15)

# 进行初始化的工作,每个Locust用户开始做的第一件事

def on_start(self):

self.client.get("/home")

# 通过@task()装饰的方法为一个事务,参数用于指定该行为的执行权重,参数越大每次被虚拟用户执行的概率越高,默认为1

@task

def index(self):

# self.client属性使用Python request库的所有方法,调用和使用方法和requests完全一致;

self.client.get("/user")

self.client.get("/details")

格式如下:

 软件测试进阶之自动化测试——locust性能测试实例

简单实例

2、运行脚本:

终端中--->进入到代码目录: locust -f ***.py --host=***.com

3、在浏览器输入:localhost:8089,即可访问locust的设置页面,如下图:

软件测试进阶之自动化测试——locust性能测试实例 

web操作

4、更多资料可参考官方文档:https://www.locust.io/

实例说明

本次采用locust读取Excel表格中的接口进行每个接口压测。

1、Excel表格的内容格式

1.1、接口格式如下:

 软件测试进阶之自动化测试——locust性能测试实例

接口参数表格格式

1.2、用户参数格式如下:

 软件测试进阶之自动化测试——locust性能测试实例

用户参数表格格式

1、Locust代码解说:

1.1、登录函数

def login(self,name,pwd):

'''登录返回 token'''

self.name=name

self.pwd=pwd

payload ={"name":self.name,"password":self.pwd}

header = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",

"Content-Type": "application/json;charset=utf-8",

"pl":"h5"

}

# 登录

res=self.client.post("/login",name="登录",data=json.dumps(payload),headers=header).text

resJson=json.loads(res)

message = resJson['message']

if message == "登录成功":

pass

else:

print("No pass,登录不成功")

token=resJson['data']['auth']['token']

# 返回当前用户token

return token

1.2、读取两个Excel表格的参数

try:

# 接口参数文件

self.work = xlrd.open_workbook(parentdir + 'pythonProject/interfaceData.xlsx')

# 用户名登录参数文件

self.loginExcel=xlrd.open_workbook(parentdir + 'pythonProject/login.xlsx')

except:

print('无没有存在参数文件!')

exit('退出程序,请添加参数文件!')

# 接口参数文件的表格

self.sheetName=self.work.sheet_by_name('test')

rowNum = self.sheetName.nrows

# 用户名登录参数文件的表格

self.loginName=self.loginExcel.sheet_by_name('namepwd')

rowNumLogin = self.loginName.nrows

1.3、处理接口和登录用户两个参数文件逻辑

# 登录用户名参数化

for h in range(1,rowNumLogin):

name = self.loginName.cell_value(h, 0)

pwd = self.loginName.cell_value(h, 1)

# 登录

print("第" + str(h) + "个用户:" + name)

restoken = self.login(name,pwd)

# 请求头

header = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",

"pl": "h5",

"Authorization": restoken

}

# 接口处理逻辑

for i in range(1,rowNum):

print(self.sheetName.cell_value(i, 0))

methodExcel=self.sheetName.cell_value(i, 1)

nameExcel = self.sheetName.cell_value(i, 2)

payload = self.sheetName.cell_value(i, 3)

# get方法

if methodExcel=='get':

meg = self.client.get(self.sheetName.cell_value(i, 0)+str(restoken[1])+"?"+payload, name=nameExcel, params=None,headers=header).text

megJson = json.loads(meg)

message = megJson['message']

if message == "ok" or message == "操作成功":

pass

else:

print("No pass")

# post方法

# 上次图片

if methodExcel=="post" and nameExcel=='upload':

meg = self.client.post(self.sheetName.cell_value(i, 0), name=nameExcel, params=payloadUp,files=files,headers=header).text

megJson = json.loads(meg)

message = megJson['message']

if message == "ok" or message == "操作成功":

pass

else:

print("No pass")

# 非传图片

if methodExcel=="post" and nameExcel!='upload':

payload = json.loads(payload)

header = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",

"pl": "h5",

"Authorization": restoken,

"Content-Type":"application/json;charset=utf-8"

}

meg = self.client.post(self.sheetName.cell_value(i, 0), name=nameExcel, params=payload,headers=header).text

megJson = json.loads(meg)

message = megJson['message']

print(megJson)

if message == "ok" or message == "操作成功" :

pass

else:

print("No pass")

# 注册用户

if methodExcel=="post" and methodExcel=="注册":

payload = json.loads(payload)

header = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",

"pl": "h5",

"Content-Type": "application/json"

}

meg = self.client.post(self.sheetName.cell_value(i, 0), name=nameExcel, params=payload,headers=header).text

megJson = json.loads(meg)

message = megJson['message']

print(megJson)

print(restoken[0])

if message == "ok" or message == "操作成功" or message == '登录成功' or message=='账号已经被使用':

pass

else:

print("No pass")

# put 方法

if methodExcel=="put":

payload = json.loads(payload)

header = {

"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",

"pl": "h5",

"Authorization": restoken,

"Content-Type":"application/json;charset=utf-8"

}

meg = self.client.put(self.sheetName.cell_value(i, 0),name=nameExcel, params=payload, headers=header).text

megJson = json.loads(meg)

state = megJson['state']

print(payload)

print(megJson)

if state == 884 or state == 0 or state==187:

pass

else:

print("No pass")

1.4、完整代码

完整代码如下:

软件测试进阶之自动化测试——locust性能测试实例 

接下图

软件测试进阶之自动化测试——locust性能测试实例 

承接上下图

软件测试进阶之自动化测试——locust性能测试实例 

承接上下图

软件测试进阶之自动化测试——locust性能测试实例 locus代码结束

 最后小编在学习过程中整理了一些学习资料,可以分享给做软件测试工程师的朋友们,相互交流学习,需要的可以加入我的学习交流群 164549428 或加微dingyu-003即可免费获取Python自动化测开及Java自动化测开学习资料(里面有功能测试、性能测试、python自动化、java自动化、测试开发、接口测试、APP测试等多个知识点的测试资料)

上一篇:less-1的详细题解


下一篇:JWT了解一下