【PyRestTest】高级使用

2024-02-01 22:44
文章标签 使用 高级 pyresttest

本文主要是介绍【PyRestTest】高级使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节主要涉及PyRestTest的高级特征的详细使用,主要指:generators(生成器), variable binding(变量绑定), data extraction(数据提取), content validators(文本验证)

它们是如何组合在一起的?

在这里插入图片描述

模板和上下文

  • 测试和基准测试可以使用变量来模板化动态配置。
  • 使用基础的Python string templating进行模板化
  • 模板使用包含在上下文中的变量,而且每次测试运行或基准测试迭代都会对模板进行更新。
  • 上下文要么传递到测试中,要么在测试中创建(如果没有提供)
  • 上下文在TestSet是持久的。一旦在set中设置一个变量,该变量可以在当前set中的所有测试用例中使用。
  • 可以通过下面3个方法跳调整上下文变量:
    1. 在TestSet的config或Test中使用variable_binds进行申明并赋值
    2. 在test中使用generator binds设置变量来获取generator的值
      • generator必须在TestSet config中按名称声明才能使用它们
      • generator绑定的值在每次HTTP调用时更新
        • 一个测试用例只更新一次,一个Benchmark更新多次
      • generator绑定的变量每次在Test/Benchmar中声明后会被重新更新赋值。一旦生成器生成数值,该数值能在所有子测试用例中使用(除非这个变量与其他变量绑定)
    3. 在一个test中可以使用extract_binds对HTTP响应报文进行数据提取
      • 如果请求失败,变量中是没有设定数值的
      • 不支持在benchmark进行变量提取,因为benchmark应该是相互独立的,进行数据抽取是没有必要的
Templating(模板), Generators(生成器), Binding (绑定)示例

如果你想benchmark创建/更新一组用户,但是用户必须要有唯一的ID进行登录,你会怎么做呢?

可以使用数字序列的生成器(generator),然后把生成器生成的数值绑定到一个PUT请求benchmark的ID域中。

为了演示静态变量的绑定,如下示例对first、lastname进行了绑定,示例文本内容如下:

---
- config:- testset: "Benchmark tests using test app"# Variables to use in the test set- variable_binds: {firstname: 'Gaius-Test', lastname: 'Baltar-Test'}# Generators to use in the test set- generators:  # Generator named 'id' that counts up from 10- 'id': {type: 'number_sequence', start: 10}- benchmark: # create new entities- generator_binds: {user_id: id}- name: "Create person"- url: {template: "/api/person/$user_id/"}- warmup_runs: 0- method: 'PUT'- headers: {'Content-Type': 'application/json'}- body: {template: '{"first_name": "$firstname","id": "$user_id","last_name": "$lastname","login": "test-login-$id"}'}- 'benchmark_runs': '1000'- output_format: csv- metrics:- total_time: total- total_time: mean

当前tempate只支持请求体、请求URL、请求头。

生成器概述

下表给出了所有 generator及它们的配置元素(必须、可选以及含义):

含义在YAML的名称输出类型参数
获取宿主机的环境变量的值env_variableanyrequired: ‘variable_name’, type: string (环境变量使用不需要添加前缀( $ 或 % )**
重置环境变量值env_stringstringrequired: ‘string’, type: string(可以根据需要对环境变量中的值进行组合拼接获取需要的字符变量,获取系统环境变量需要前缀$)
类型为整形的序列number_sequenceintegeroptional: ‘start’, type: integer, default: 1 optional: ‘increment’, type: integer, default 1
随机整数(32位)random_intinteger
随机字符串random_textstringoptional: ‘character set’ OR ‘characters’, type: string, default: string.ascii_letters optional: ‘min_length’, type: integer, default: 8 optional: ‘max_length’, type: integer, default: 8 optional: ‘length’, (can either have length or min/min), type integer
随机获取给定list中的数值choiceanyrequired: ‘values’, type: array of anything
给定一个有序列表,顺序获取给定列表的值fixed_sequenceanyrequired: 'values, type: array of anything
Generators简介
env_variable

该变量名是使用宿主机定义的环境变量名。例如:如果你在shell脚本中使用宿主机的host可以通过$HOST获取,但如果使用env_variable类型的生成器,只需要在variable_name值设置为‘HOST’就可以。

{type: 'env_variable', 'string': "HOST"}
env_string

可以根据业务需要把多个系统环境变量与其他元素组合成一个字符串值。例如:

在shell脚本中: echo "$USER logged into $HOSTNAME"是这样,在env_string类型的生成器变成了这样:

{type: 'env_string', 'string': "$USER logged into $HOSTNAME"}
random_text

生成随机的字符串,需要指定下列选项:

  • 合法的字符长度:
    • length:设置一个常量,指定长度
    • min_lengthmax_length:允许生成字符串的长度范围区间
  • 使用有效的字符,可以按下面两种方法定义:
    • **characters:**指定使用生成的有效字符,characters类型为字符型。示例:characters:‘abceefj’
    • character_set: 指定使用的字符集。示例如下:character_set:string.ascii_letters.支持的字符集如下表:
<
描述文本名称来源
ASCII 码:大小写字母,不包括空格ascii_lettersPython internal
ASCII 码:小写字母,不包括空格ascii_lowercasePython internal
ASCII码:大写字母,不包括空格ascii_uppercasePython internal
数字: 0-9digitsPython internal
十六进制数字、大小写字母的组合hexdigitsPython internal
十六进制数字, 所有小写字母hex_lowerstring.digits+abcdef,
十六进制数字, 所有大写写字母hex_upperstring.digits+ABCDEF,
字母lettersPython internal, locale-dependent
小写字母lowercasePython internal, locale-dependent
八进制数字 (0-7)octdigitsPython internal
标点符合, 管道符及 !"#$%&'()*+,-./:;<=>?@[]^_`{}~punctuationPython internal
所有可打印字符包括空格printablePython internal, locale-dependent
大写字母uppercasePython internal, locale-dependent
空格whitespacePython internal, locale-dependent
URL字符(ASCII小写字母和破折号/)url.slugstring.ascii_lowercase + string.digits + ‘-’
URL Safe (RFC3986中的未保留字符)url.safestring.ascii_letters + string.digits + ‘-~_.’

这篇关于【PyRestTest】高级使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668713

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学