【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使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi