性能测试工具locust —— Python脚本参数化!

1.1.登录用户参数化  

在测试过程中,经常会涉及到需要用不同的用户登录操作,可以采用队列的方式,对登录的用户进行参数化。如果数据要保证不重复,则取完不再放回;如可以重复,则取出后再返回队列。

def login(self):              try:                  user = self.user.userqueue.get_nowait()         # 取不到数据时直接崩溃,走异常处理流程              except queue.Empty:                  print("没有数据了")                  exit(0)              url = '*****'              headers = {                  'Content-Type': 'application/x-www-form-urlencoded'              }              body = {                  'username': user['username'],                  'password': '******'              }              with self.client.post(url, data=body, headers=headers, name='登录', catch_response=True,) as response:                  self.user.userqueue.put_nowait(user)     #数据放回队列                  try:                      res = json.loads(response.text)                      if response.status_code == 200 and str(res) == user['userid']:                          response.success()                          return user['userid']                      else:                          response.failure("登录失败")                  except Exception as e:                      response.failure(e)         class WebUser(HttpUser):              tasks = [MyTask]              wait_time = between(0.1, 0.3)              host = 'http://*******'              userdata = xlrd.open_workbook(r'F:\pycharmproject\locusttest\i8.xls')              table = userdata.sheet_by_name('Sheet2')  # 表格中不同table页的名称              # 获取表格总行数              nrows = table.nrows              # 实例化队列,依次从表格中按行取出数据,放进队列              userqueue = queue.Queue()              for n in range(1, nrows):                  row_data = table.row_values(n)                  data = {                      'username': '%s' % row_data[0],                      'userid': '%s' % row_data[1]                  }                  userqueue.put_nowait(data)        

1.2.使用登录后返回的数据最为后续task的参数  

由于on_start 只执行一次,不会去执行函数里面的返回;因此将登录定义为一个函数,再通过on_start调用,保证只执行一次,同时能够获取到登录后返回的数据。

def on_start(self):              self.userid = self.login()                   def login(self):              """              登录接口              :return: 登录成功后返回userid,用于其他任务的参数              """              try:                  user = self.user.userqueue.get_nowait()         # 取不到数据时直接崩溃,走异常处理流程              except queue.Empty:                  print("没有数据了")                  exit(0)              url = '******'              headers = {                  'Content-Type': 'application/x-www-form-urlencoded'              }              body = {                  'username': user['username'],                  'password': '*****'              }              with self.client.post(url, data=body, headers=headers, name='登录', catch_response=True,) as response:                  self.user.userqueue.put_nowait(user)                  try:                      res = json.loads(response.text)                      if response.status_code == 200 and str(res) == user['userid']:                          response.success()                          return user['userid']                      else:                          response.failure("登录失败")                  except Exception as e:                      response.failure(e)                    @task(3)          def addbyi8(self):              url = '*********'              body = {                         'userid': self.userid              }              headers = {                  'Content-Type': 'application/x-www-form-urlencoded'              }              with self.client.post(url, data=body, headers=headers, catch_response=True,) as res:                  try:                      resjson = json.loads(res.text)                      if res.status_code == 200 and resjson == 1:                          res.success()                      else:                          res.failure('添加接口出错%s' % resjson)                  except Exception as e:                      res.failure(e) 

1.3.Post参数的value含有json和随机数  

采用random生成随机数,拼接到参数value中;json可以先定义json,然后再转换为字符串的形式,传入post参数。 

task(1)          def changeallbyi8(self):              random_number = random.randint(1, 1000)              url = '********'              contents = {                          "******": "locust发送的" + str(random_number),                  "******": "locust图纸的分析" + str(random_number)              }              body = {                       'contents': json.dumps(contents)                  }              with self.client.post(url, data=body,  catch_response=True) as res:                  try:                      resjson = json.loads(res.text)                      if res.status_code == 200 and resjson == 1:                          res.success()                      else:                          res.failure('保存接口出错')                  except Exception as e:                      res.failure(e)

1.4.Post参数中含有键值对随机取值配对  

Typedict字典中创建预设的键值对,使用random.choice从字典的键列表中随机选择一个键,然后使用这个键从字典中取得对应的值,并将其作为请求参数发送。

@task(3)          def addbyi8(self):              typedict = {                  'key1': 'value1',                  'key2': 'value2'    }              type = random.choice(list(typedict.keys()))              url = '****'              body = {                  'type': type,                  'operate': typedict[type]              }              headers = {                  'Content-Type': 'application/x-www-form-urlencoded'    }              with self.client.post(url, data=body, headers=headers,  catch_response=True,) as res:                  try:                      resjson = json.loads(res.text)                      if res.status_code == 200 and resjson == 1:                          res.success()                      else:                          res.failure('添加接口出错')                  except Exception as e:                      res.failure(e)

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

std::future::then的概念和使用方法

std::future::then是 C 中用于异步操作的一种机制,它允许在一个异步任务完成后,接着执行另一个操作(即延续操作)。以下是关于 std::future::then 的概念和使用方法: 1. 概念: std::future::then 的主要目…

Chrome清除nslookup解析记录 - 强制http访问 - 如何禁止chrome 强制跳转https

步骤: 地址栏输入 chrome://net-internals/#hsts在Delete domain 栏的输入框中输入要http访问的域名,然后点击“delete”按钮最后在Query domain 栏中搜索刚才输入的域名,点击“query”按钮后如果提示“Not found”即可! 办法来自…

Java | Leetcode Java题解之第459题重复的子字符串

题目: 题解: class Solution {public boolean repeatedSubstringPattern(String s) {return kmp(s s, s);}public boolean kmp(String query, String pattern) {int n query.length();int m pattern.length();int[] fail new int[m];Arrays.fill(fa…

Hunuan-DiT代码阅读

一 整体架构 该模型是以SD为基础的文生图模型,具体扩散模型原理参考https://zhouyifan.net/2023/07/07/20230330-diffusion-model/,代码地址https://github.com/Tencent/HunyuanDiT,这里介绍 Full-parameter Training 二 输入数据处理 这里…

E系列I/O模块在锂电装备制造系统的应用

为了满足电池生产线对稳定性和生产效率的严苛要求,ZLG致远电子推出高速I/O应用方案,它不仅稳定可靠,而且速度快,能够迅速响应生产需求。 锂电池的生产工艺较为复杂,大致分为三个主要阶段:极片制作、电芯制作…

单点登录Apereo CAS 7.1客户端集成教程

从上一篇部署并成功运行CAS服务端后,我们已经能通过默认的账号密码进行登录。 上篇地址:单点登录Apereo CAS 7.1安装配置教程-CSDN博客 本篇我们将开始对客户端进行集成。 CAS中的客户端,就是指我们实际开发的各个需要登录认证的应用。现在,跟着笔者的步伐,一起探索如何…

springmvc直接访问 上下文路径 302 后路径更改并跳转源码解析

【问题现状】 application.yml 配置如下属性: server:servlet:context-path: /learning直接访问:http://localhost:8888/learning 路径时,会返回302的响应状态;并跳转路径:http://localhost:8888/learning/ (原路径后…

Docker Overlay2 空间优化

目录 分析优化数据路径规划日志大小限制overlay2 大小限制清理冗余数据 总结 分析 overlay2 目录占用磁盘空间较大的原因通常与 Docker 容器和镜像的存储机制以及它们的长期累积相关,其实我之前在 Docker 原理那里已经提到过了。 通常时以下几种原因导致&#xff…

☕️从小工到专家的 Java 进阶之旅:全新的HttpClient,现代高效的网络通信利器

你好,我是看山。 本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏。日拱一卒,功不唐捐。 在 Java 开发领域,网络通信一直是至关重要的部分。从早期的网络编程方式到如今,Java 在 HTTP 客户端方面经历了不断的演进。 其中&…

【C语言】函数栈帧的创建和销毁

文章目录 前言函数栈帧相关寄存器相关汇编指令内存函数栈帧的创建销毁过程 前言 为了更好的了解函数里面变量是如何创建,为什么创建的变量是随机值和函数怎么传参和顺序是怎样的、以及实参和形参的关系,还要函数之间的调用、返回和销毁的过程。我们今天…

Comfyui 学习笔记5

1.图像处理小工具,沿某个轴反转Image Flip 2. reactor换脸 3. 通过某人的多张照片进行训练 训练的模型会保存在 models/reactor/face/下面,使用时直接load就好 4. 为一个mask 更加模糊 羽化 5. 指定位置替换,个人感觉这种方式进行换脸的融…

Pura 70系列和Pocket 2已支持升级尝鲜鸿蒙NEXT,报名教程在这里

相信不少关注鸿蒙 NEXT 的人都知道,10月8日起,华为开启了鸿蒙 NEXT 系统的公测,但有不少人不知道的是,除了公测的 Mate 60 和 Mate X5 两个系列的机型,还有两个系列的手机其实也可以提前升级体验鸿蒙 NEXT 系统。 Pur…

从数据管理到功能优化:Vue+TS 项目实用技巧分享

引言 在项目开发过程中,优化用户界面和完善数据处理逻辑是提升用户体验的重要环节。本篇文章将带你一步步实现从修改项目图标、添加数据、优化日期显示,到新增自定义字段、调整按钮样式以及自定义按钮跳转等功能。这些操作不仅提升了项目的可视化效果&am…

统一流程引擎如何具体实现对多系统业务流程的整合?

在信息化时代,企业和组织通常会使用多个业务系统来满足不同的业务需求。然而,这些分散的业务系统往往会导致业务流程的碎片化,降低工作效率。统一流程引擎的出现为解决这一问题提供了有效的途径。它能够整合多系统的业务流程,实现…

LeetCode 3310. 移除可疑的方法

LeetCode 3310. 移除可疑的方法 你正在维护一个项目,该项目有 n 个方法,编号从 0 到 n - 1。 给你两个整数 n 和 k,以及一个二维整数数组 invocations,其中 invocations[i] [ai, bi] 表示方法 ai 调用了方法 bi。 已知如果方法 k…

云栖实录 | MaxCompute 迈向下一代的智能云数仓

本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人: 张治国 | 阿里云智能集团研究员、阿里云 MaxCompute 负责人 谢德军|阿里云智能集团资深技术专家 于得水|阿里云智能集团资深技术专家 谌鹏飞&#xff5c…

List子接口

1.特点:有序,有下标,元素可以重复 2.方法:包含Collection中的所有方法,还包括自己的独有的方法(API中查找) 还有ListIterator(迭代器),功能更强大。 包含更多…

Basic Pentesting_ 2靶机渗透

项目地址 plain https://download.vulnhub.com/basicpentesting/basic_pentesting_2.tar.gz 修改静态ip 开机按e 输入rw signie init/bin/bash ctrlx 进入编辑这个文件 vi /etc/network/interfaces修改网卡为ens33 保存退出 实验过程 开启靶机虚拟机 ![](https://img-bl…

C++ -内存管理

博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ C -内存管理 C/C -内存管理的深入探讨1. 数据存储分类1.1 局部数据1.2 静态数据1.3 常量数据1.4 动态申请的数据 2. 内存区域划分2.1 栈区2.2 堆区2.3 静态区/数据段2.4 常量区…

HTML5--裸体回顾

免责声明:本文仅做分享~ 详情请参考以下: HTML 系列教程 (w3school.com.cn) 菜鸟教程 - 学的不仅是技术,更是梦想! --本文是光秃秃的空壳. 标题标签 段落标签 换行和水平线 文本格式化标签 (一般用左边的&#xff…