性能测试学习-执行测试脚本,监控性能指标

1、关于使用pymatlab库实现对数据表的增加,获取指定列操作,并在另一个py文件中调用

cursor游标的使用

"""
实现数据连接,并操作数据库,生成随机的用户数据
使用游标
"""
import randomimport pymysql#数据库新增
def insert_db():#建立数据库连接connect=pymysql.connect(host='localhost',  # 主机名(或IP地址)port=3306,  # 端口号,默认为3306user='root',  # 用户名password='123456',  # 密码database="woniusalesnew",charset='utf8'  # 设置字符编码)#游标,获取整个数据集cur=connect.cursor()#循环  生成10行数据,出现在连接的数据表中for i in range(10):username=random.choice(["xiaolong","xaioming","xiaoli"])+str(random.randint(1,100))password=random.choice(["xiaolong","xaioming","xiaoli"])+str(random.randint(1,100))realname=random.choice(["xiaolong","xaioming","xiaoli"])+str(random.randint(1,100))phone=random.choice(["130","120","139"])+str(random.randint(11111111,99999999))role=random.choice(["boss","clert","admin"])#驱动数据集cur.execute(f"insert into user(username,password,realname,phone,role,createtime) values('{username}','{password}','{realname}','{phone}','{role}','2017-10-01 08:18:20')")connect.commit()#游标的关闭cur.close()#连接的关闭connect.close()#数据库查询
def query_db():connect=pymysql.connect(host='localhost',  # 主机名(或IP地址)port=3306,  # 端口号,默认为3306user='root',  # 用户名password='123456',  # 密码database="woniusalesnew",charset='utf8'  # 设置字符编码)#游标,获取整个数据集cur=connect.cursor()# 驱动数据集cur.execute("select username,password from user")#获取驱动集合tup=cur.fetchall()#打印结果#print(tup)connect.commit()#游标的关闭cur.close()#连接的关闭connect.close()#返回获得的集合,便于在多线程中调用return tupif __name__ == '__main__':#insert_db()query_db()

1、问题

浏览器在主请求加载过程中会自动发送一些加载请求,怎么获得这些请求,并用使用http协议+request请求进行性能测试

方法:

1、正则模块匹配出需要的字符,组成一个集合

2、循环该集合

(1)拼接这些匹配出来的字符,构成完整的url

(2)使用get方法,访问这个请求

import re
import requests
lochost='172.22.205.254'class DEMO:def __init__(self):self.session=requests.session()def gethomepage(self):url=f"http://{lochost}:8080/woniusales/"res = self.session.get(url=url)print(res)#获得图片,js,背景图等加载资源js_li = re.findall('type="text/javascript" src="(.+?)"',res.text)img_li = re.findall('img src="(.+?)"', res.text)backage_i = re.findall('backage-img:url\(\'(.+?)\'\)',res.text)url_i=js_li +img_li+backage_ifor uri in js_li:url_i=f"http://{lochost}:8080"+uriself.session.get(url=url_i)def main_test(self):for i in range(1):self.gethomepage()if __name__ == '__main__':re1 = DEMO()re1.main_test()

2、问题

模拟缓存,一些加载请求经常会用到,如何通过缓存获取这些资源而非服务器

方法:

将问题1中匹配获得的url,缓存到一个列表中,如果是第一次的访问请求,就使用服务器,否则就使用列表中的缓存

import re
import requests
lochost='172.22.205.254'
#用于缓存非主请求的url
url_list = []
#创建类
class DEMO:def __init__(self):self.session=requests.session()#获取首页的请求def gethomepage(self):url=f"http://{lochost}:8080/woniusales/"res = self.session.get(url=url)print(res)#获得图片,js,背景图等加载资源js_li = re.findall('type="text/javascript" src="(.+?)"',res.text)img_li = re.findall('img src="(.+?)"', res.text)backage_i = re.findall('backage-img:url\(\'(.+?)\'\)',res.text)#组合url_li = js_li + img_li + backage_ifor uri in url_li:url_i = f"http://{lochost}:8080" + uri#如果是第一次访问,通过服务器访问请求if url_i not in url_list:self.session.get(url=url_i)#将url缓存url_list.append(url_i)def main_test(self):for i in range(1):self.gethomepage()if __name__ == '__main__':re1 = DEMO()re1.main_test()

3、监控性能指标:响应时间,响应大小(字节)

import re
import requests
import time
lochost='172.22.205.254'
#用于缓存非主请求的url
url_list = []
#创建类
class DEMO:def __init__(self):self.session=requests.session()#获取首页的请求def gethomepage(self):t1=time.time()url=f"http://{lochost}:8080/woniusales/"res = self.session.get(url=url)print(res)#获得图片,js,背景图等加载资源js_li = re.findall('type="text/javascript" src="(.+?)"',res.text)img_li = re.findall('img src="(.+?)"', res.text)backage_i = re.findall('backage-img:url\(\'(.+?)\'\)',res.text)#组合url_li = js_li + img_li + backage_ifor uri in url_li:url_i = f"http://{lochost}:8080" + uri#如果是第一次访问,通过服务器访问请求if url_i not in url_list:self.session.get(url=url_i)#将url缓存url_list.append(url_i)t2=time.time()#运行一次需要的时间t=(t2-t1)*1000print(f"当前首页获取的响应时间为{t}ms")#res.headers类型为字典print(f"当前首页获取的响应大小为{ len(res.text + str(res.headers))}B")def main_test(self):
#通过两次迭代对比,没有缓存和有缓存的区别for i in range(2):self.gethomepage()if __name__ == '__main__':re1 = DEMO()re1.main_test()

4、问题:怎么查看每个功能所用的时间

方法:将每次循环获得的时间放到空的集合中去,最后打印输出

在多用户运行时,主线程会先执行,此时会打印出初始化的空集合;需要使用线程阻塞,保证子线程执行完以后, 

"""
基于http协议 通过脚本模拟多线程实现用户的登录,会员新增查看等功能1、确保单线程接口测试通过
2、再测试以下几种情况单用户单迭代单用户多迭代   调试数据重复问题多用户单迭代   多线程并发问题多用户多迭代思考时间:一个进程与另一个进程之间的时间间隔
"""
import randomimport requests
import threading
import time
from PerformanceTest.common import query_db
from PerformanceTest.config import lochost
import re
#用于缓存非主请求的url
url_list = []
#缓存响应时间
time_list=[]
#创建类
class DEMO:def __init__(self):self.session=requests.session()#获取首页的请求def gethomepage(self):t1=time.time()url=f"http://{lochost}:8080/woniusales/"res = self.session.get(url=url)print(res)#获得图片,js,背景图等加载资源js_li = re.findall('type="text/javascript" src="(.+?)"',res.text)img_li = re.findall('img src="(.+?)"', res.text)backage_i = re.findall('backage-img:url\(\'(.+?)\'\)',res.text)#组合url_li = js_li + img_li + backage_ifor uri in url_li:url_i = f"http://{lochost}:8080" + uri#如果是第一次,通过服务器访问请求if url_i not in url_list:self.session.get(url=url_i)#将url缓存url_list.append(url_i)t2=time.time()# 运行一次需要的时间t = (t2 - t1) * 1000print(f"当前首页获取的响应时间为{t}ms")time_list.append(t)print(f"当前首页获取的响应大小为{ len(res.text + str(res.headers))}B")#登录操作请求def login(self,username,password):t1 = time.time()url="http://172.22.205.254:8080/woniusales/user/login""""#直接传参body = {"username": "admin","password": "admin123","verifycode": "0000"}"""body={"username":username,"password":password,"verifycode":"0000"}#通过数据库传参的方式body = {"username": "admin","password": "admin123","verifycode": "0000"}res = self.session.post(url=url,data=body)print(res.text)t2=time.time()# 运行一次需要的时间t = (t2 - t1) * 1000print(f"当前登录获取的响应时间为{t}ms")time_list.append(t)#进入会员页面请求def login_customer(self):t1 = time.time()url="http://172.22.205.254:8080/woniusales/customer"res = self.session.get(url=url)if "蜗牛进销存-会员管理" in res.text:print("customer is ok")else:print("customer is ko!")t2=time.time()# 运行一次需要的时间t = (t2 - t1) * 1000print(f"当前进入会员页面的响应时间为{t}ms")time_list.append(t)#会员新增请求def add(self):t1 = time.time()url="http://172.22.205.254:8080/woniusales/customer/add"#随机生成用户名,电话号,更符合实际场景#random.randint(start,stop)随机生成该范围内的整数phone_num=["123","133","155","189",'190']customer_phone=random.choice(phone_num)+str(random.randint(11111111,99999999))customer_list=["小红","小兰","小黄"]customer_name=random.choice(customer_list)sex_list=["男","女"]sex=random.choice(sex_list)body={"customername": customer_name,"customerphone":customer_phone,"childsex":sex,"childdate":"2024-06-22","creditkids":"0","creditcloth":"0"}custom = self.session.post(url=url,data=body)print(custom.text)t2 = time.time()# 运行一次需要的时间t = (t2 - t1) * 1000print(f"当前会员新增的响应时间为{t}ms")time_list.append(t)#查询会员def search(self):t1 = time.time()url="http://172.22.205.254:8080/woniusales/customer/search"body={"customerphone":"15984908938","page":"1"}res = self.session.get(url=url,params=body)print(res.text)t2 = time.time()# 运行一次需要的时间t = (t2 - t1) * 1000print(f"当前查询会员的响应时间为{t}ms")time_list.append(t)#用户注销请求def logout(self):t1 = time.time()url= "http://172.22.205.254:8080/woniusales/user/logout"res = self.session.get(url=url)if "尚未登录" in res.text:print("logout is ok")else:print("logout is ko!")t2 = time.time()# 运行一次需要的时间t = (t2 - t1) * 1000print(f"当前用户注销的响应时间为{t}ms")time_list.append(t)#模拟单迭代场景,通过改变range()来实现用户多迭代#传入参数def main_test(self,username,password):# def main_test(self):# 进程 通过两次迭代对比,没有缓存和有缓存的时间复杂度区别for i in range(4):# self.gethomepage()#传入参数self.login(username,password)# self.login()self.login_customer()self.add()self.search()self.logout()if __name__ == '__main__':re1 = DEMO()#返回数据集生成的用户名和密码数据集tup=query_db()#re1.main_test()#实现多个用户同时使用,有多少个数据集,就循环多少次,取出数据集测试真实用户组for i in tup:username=i[0]password=i[1]#注意多线程的使用方法 传入参数t= threading.Thread(target= re1.main_test,args=((username,password)))t.start()#在循环外,否则子线程相互阻塞,要等一个子线程执行完,才会执行下一个;timeout=5000是结果在最后输出t.join(timeout=5000)print(time_list)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越云端:Octopus v2端侧部署实现高效能语言模型

在人工智能领域,大型语言模型虽然在云端环境中展现出卓越的性能,但它们在隐私保护、成本控制以及对网络连接的依赖性方面存在不足。这些问题限制了AI技术在移动设备和边缘计算场景中的应用潜力。为了克服这些限制,研究者们一直在探索如何在设…

机器学习补充

一、数据抽样 数据预处理阶段:对数据集进行抽样可以帮助减少数据量,加快模型训练的速度/减少计算资源的消耗,特别是当数据集非常庞大时,比如设置sample_rate0.8.平衡数据集:通过抽样平衡正负样本,提升模型…

揭秘shopee、Lazada爆单秘诀:自养号补单策略大公开

在东南亚的电商跨境领域,Shopee和Lazada无疑占据了举足轻重的地位,为印地、马来、台湾、菲律宾、新加坡、泰国和越南等地的消费者提供了丰富的在线购物选择。随着电商竞争的日益激烈,许多商家开始探索各种有效的推广策略,其中&…

没有SSL证书,会造成哪些影响?

没有SSL证书,网站及其用户将会面临多种安全隐患和负面影响,主要包括但不限于以下几点: 1、安全警告:现代浏览器如谷歌Chrome会在用户尝试访问没有SSL证书的网站时显示明显的警告信息,如“不安全”标签,这会…

F407核心板小板快速入门000

1、现在实验室用的F407核心板有两个类型。都是用反客科技的板子。 一个是STM32F407ZGT6型号的FM板卡。一个是stm32F407VET6的板子FK板卡。前者是我们做工程训练大赛用到的。后者是做其他没有那么复杂的项目比如大创、电赛、机器人大赛等使用,板卡尺寸更小。 前者的参…

C++ 结构体对齐详解

目录 前言 一、为什么要对结构体进行对齐操作? 二、基本概念 三、 对齐规则 四、示例讲解 1.简单的变量对齐 2.结构体包含有结构体的对齐 结构体成员详细解析 五、使用指令改变对齐方式 __attribute__((packed)) #pragma pack(push, n) #pragma pack(pop) …

Java中如何处理XML数据?

Java中如何处理XML数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何高效处理XML数据的技术和最佳实践。XML&…

Elasticsearch:赋能数据搜索与分析的利器

Elasticsearch:赋能数据搜索与分析的利器 在大数据的时代背景下,如何高效地搜索、分析和利用数据成为了企业和开发者面临的重要问题。Elasticsearch,作为Elastic Stack的核心组件,以其分布式、高扩展性和实时的搜索与分析能力&am…

【CentOS7】Linux安装Docker教程(保姆篇)

文章目录 查看是否已安装卸载(已安装过)docker安装友情提示 更多相关内容可查看 注:本篇为Centos7安装Docker,若为其他系统请理性参考 查看是否已安装 如果已安装,请卸载重新安装 docker --version这里显示已安装 …

人机的三级抽象

数学的三级抽象包括第一级抽象是数表示万物、第二级抽象是字母表征数、第三级抽象是运算规则的抽象(如群论),在人机交互中,类比于数学的三级抽象,可以理解为: 第一级抽象:用户界面和操作的抽象化…

力扣第210题“课程表 II”

在本篇文章中,我们将详细解读力扣第210题“课程表 II”。通过学习本篇文章,读者将掌握如何使用拓扑排序来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释,以便于理解。 问题描述 力扣第210题“…

Linux 服务管理

服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld , sshd防火墙等),因此又称为守护进程。 比如通过xshell进行连接的时候,需要输入的端口号就是通过守护…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷8(容器云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

基于Java图书馆管理系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

iptables(4)规则匹配条件(源、目、协议、接口、端口)

简介 前面我们已经介绍了iptables的基本原理,表、链,数据包处理流程。如何查询各种表的信息。还有基本的增、删、改、保存的基础操作。 经过前文介绍,我们已经能够熟练的管理规则了,但是我们只使用过一种匹配条件,就是将”源地址”作为匹配条件。那么这篇文章中,我们就来…

[职场] 教师资格面试流程 #经验分享#其他

教师资格面试流程 教师资格证面试流程如下: ①候考。在考试当日,考生按照准考证上的时间进入候考室,进行抽签分组。 ②抽题。考生按照抽签顺序分组安排从面试题库系统试题组中任选其中一道试题,确认抽题后,计算机打印出…

爱心商城管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,企业管理,用户管理,论坛管理,商品管理,公告管理,用户捐赠 企业账户功能包括:系统首页,个人中心…

机器学习(二)

机器学习 3.分类算法3.1 sklearn转换器和估计器3.1.1 转换器3.1.2 估计器(在sklearn实现机器学习算法) 3.2 K-近邻算法3.2.1 什么是K-近邻算法3.2.2 K-近邻算法API3.2.3 案例:鸢尾花种类预测3.2.4 K-近邻总结 3.3 模型选择与调优3.3.1 交叉验证(cross va…

LeetCode 70. 爬楼梯 使用c++解答

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

【STM32+FPGA】先进算力+强安全+边缘AI,64位STM32MP2聚焦工业4.0应用

工业应用数字化和智能化程度,是衡量新质生产力的重要标准。STM32最新一代64位微处理器STM32MP2凭借先进算力、丰富接口和高安全性,为高性能和高度互联的工业4.0应用赋能。 STM32MP2四大关键特性,为工业4.0应用赋能 STM32MP2系列的第一颗产品S…