软件测试进阶之自动化测试——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")

格式如下:

简单实例

2、运行脚本:

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

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

web操作

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

实例说明

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

1、Excel表格的内容格式

1.1、接口格式如下:

接口参数表格格式

1.2、用户参数格式如下:

用户参数表格格式

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、完整代码

完整代码如下:

接下图

承接上下图

承接上下图

locus代码结束

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容