【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_variable any required: ‘variable_name’, type: string (环境变量使用不需要添加前缀( $ 或 % )**
重置环境变量值 env_string string required: ‘string’, type: string(可以根据需要对环境变量中的值进行组合拼接获取需要的字符变量,获取系统环境变量需要前缀$)
类型为整形的序列 number_sequence integer optional: ‘start’, type: integer, default: 1 optional: ‘increment’, type: integer, default 1
随机整数(32位) random_int integer
随机字符串 random_text string optional: ‘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中的数值 choice any required: ‘values’, type: array of anything
给定一个有序列表,顺序获取给定列表的值 fixed_sequence any required: '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_letters Python internal
ASCII 码:小写字母,不包括空格 ascii_lowercase Python internal
ASCII码:大写字母,不包括空格 ascii_uppercase Python internal
数字: 0-9 digits Python internal
十六进制数字、大小写字母的组合 hexdigits Python internal
十六进制数字, 所有小写字母 hex_lower string.digits+abcdef,
十六进制数字, 所有大写写字母 hex_upper string.digits+ABCDEF,
字母 letters Python internal, locale-dependent
小写字母 lowercase Python internal, locale-dependent
八进制数字 (0-7) octdigits Python internal
标点符合, 管道符及 !"#$%&'()*+,-./:;<=>?@[]^_`{}~ punctuation Python internal
所有可打印字符包括空格 printable Python internal, locale-dependent
大写字母 uppercase Python internal, locale-dependent
空格 whitespace Python internal, locale-dependent
URL字符(ASCII小写字母和破折号/) url.slug string.ascii_lowercase + string.digits + ‘-’
URL Safe (RFC3986中的未保留字符) url.safe string.ascii_letters + string.digits + ‘-~_.’

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OSPF排错

目录 实验拓扑图 实验要求 实验排错 故障一 故障现象 故障分析 故障解决 故障二 故障现象 故障分析 故障解决 故障三 故障现象 故障分析 故障解决 故障四 故障现象 故障分析 故障解决 故障五 故障现象 故障分析 故障解决 故障六 故障现象 故障分析 …

区块链游戏解说:什么是 SecondLive

数据源&#xff1a;SecondLive Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 SecondLive SecondLive 是元宇宙居民的中心枢纽&#xff0c;拥有超过100 万用户的蓬勃社区。它的主要使命是促进自我表达&#xff0c;释放创造力&#xff0c;构建梦想中的平行宇宙…

【HTML】自定义属性(data)

自定义属性 data: 的用法&#xff08;如何设置,如何获取) &#xff0c;有何优势&#xff1f; data-* 的值的获取和设置&#xff0c;2种方法: 传统方法 getAttribute() 获取 data- 属性值; setAttribute() 设置 data- 属性值getAttribute() 获取 data- 属性值; setAttribute()…

腾讯云SSL证书在阿里云添加域名DNS解析

场景说明 在阿里云申请并备案了域名&#xff0c;这个域名理论上可以在任何服务器上进行绑定。应用服务器部署到腾讯云&#xff0c;并在腾讯云申请了SSL证书&#xff0c;从而完成HTTPS转化。那么问题来了&#xff0c;腾讯提供的免费版SSL证书是一年有效期&#xff0c;到期后就需…

Cadence——布线部分相关教程

&#xff08;一&#xff09;PCB布线叠层与阻抗设计 PCB布线要区分有阻抗和无阻抗这个是根据频率和速率来区分&#xff0c;一般达100M以上就是有阻抗&#xff0c;单端信号一般是五十欧姆&#xff0c;差分信号一般一百欧姆 叠成是多层板由不同的介质压合而成&#xff0c;介质是&…

SD-WAN技术:网络升级的智慧选择

在移动办公、云计算技术和多元化的应用交付方式不断普及的今天&#xff0c;企业网络正变得越来越错综复杂&#xff0c;充满了不可预测性。为了跟上这一网络发展的步伐&#xff0c;IT部门需要深刻反思网络建设的方式&#xff0c;而定义软件广域网&#xff08;SD-WAN&#xff09;…

Ubuntu系统硬盘分区攻略(磁盘分区、RAID磁盘阵列、RAID阵列、固态硬盘分区、机械硬盘分区、swap分区、swap交换分区)

文章目录 分区需求分区方案分区顺序相关疑问swap分区不是应该放在最后吗&#xff1f;我安装系统分区的时候&#xff0c;上面有available devices&#xff0c;下面有create software raid(md)&#xff0c;我该用哪个&#xff1f;我available devices下面有个893G的固态&#xff…

C++数据结构与算法——链表

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

推特账号被冻结怎么办?检查IP是否正常

Twitter 拥有庞大的用户群和日常内容流&#xff0c;是沟通、网络和营销的重要平台。然而&#xff0c;处理其限制和潜在的帐户问题可能很棘手。有许多跨境社媒小伙伴反馈&#xff0c;账号无故被冻结&#xff0c;导致内容与客户尽失&#xff01;其实除了账户养号、被举报、广告信…

重磅!讯飞星火V3.5发布,携手35万生态开发者,赋能千行百业

今天的通用人工智能必将像PC和互联网的诞生一样&#xff0c;深刻改变人类生产生活方式。2023年&#xff0c;大模型的基础研究和应用风起云涌。2024年&#xff0c;国内大模型距国际顶尖技术追平了多少&#xff1f;大模型在哪些领域产生了效益&#xff1f; 1月30日&#xff0c;讯…

前端工程\模块化

前端工程\模块化&#x1f3ed; 本篇文章&#xff0c;学习记录于&#xff1a;尚硅谷&#x1f3a2;&#xff0c;紧接前文&#xff1a;邂逅Node.JS的那一夜→博客 无论是前端、后端、甚至非编程领域都有模块化的概念&#xff0c;只是不同的领域叫法不同&#xff0c;不过&#xf…

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括&#xff1a; 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

【升级openssl1.1.1t报错libssl.so.1.1: cannot open shared object file】

升级openssl报错&#xff1a; openssl vesion openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 编译安装openssl1.1.1t当执行openssl version的时候&#xff0c;报上述错误&#xff0c;将编译到的…

OCP NVME SSD规范解读-8.SMART日志要求-4

SMART-21&#xff1a;这段描述解释了一个与设备内部I/O操作非对齐相关的计数器功能。该计数器记录的是由NVMe SSD执行的、起始地址未按照设备内部间接寻址单元&#xff08;IU&#xff0c;Indirection Unit&#xff09;大小进行对齐的写入I/O操作数量。 “Alignment”指的是每次…

2014年苏州大学837复试机试C/C++

2014年苏州大学复试机试 要求 要求用C/C编程&#xff1b;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名&#xff08;中文&#xff09;&#xff1b;考试完毕后&#xff0c;将所编写的文件放在上述文件中。 第一题&#xff08;20分&…

使用ffmpeg madiamtx制作一个rtsp源

有很多人在跑rtsp解码的demo的时候, 苦于找不到一个可以拉流的源, 这里说一个简单的方法. 使用mediamtx, 加ffmpeg加mp4文件方式, 模拟一个rtsp的源. 基本架构就是这样. 在PC上, 这里说的PC可以是远程的服务器, 也可以是你的开发用的windows, 都行. 把mediamtx, 在pc上跑起来 …

如何有效避免市场恐慌性抛售?

布雷特斯坦伯格是一位备受尊敬的交易心理导师&#xff0c;曾担任华尔街多家顶级培训机构的心理导师&#xff0c;指导交易员们如何应对心理挑战。作为一名心理学教授和资深交易员&#xff0c;他对交易心理的理解远超常人。人们普遍认为&#xff0c;要想在交易领域取得成功&#…

BUUCTF-Real-[PHP]XXE

目录 1、原理 2、XXE漏洞产生的原因 3、开始复现 paylaod 复现 4、flag 1、原理 XML数据在传输过程中&#xff0c;攻击者强制XML解析器去访问攻击者指定的资源内容&#xff08;本地/远程&#xff09;&#xff0c;外部实体声明关键字SYSTEM会令XML解析器读取数据&#xf…

基于SpringBoot的高校社团管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是何时&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 -苏轼 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2…

sqlmap的使用

2024.1.31 sqlmap支持五种不同的注入模式&#xff1a; 1、布尔盲注2、时间盲注3、报错注入4、联合注入5、堆叠注入 检测注入 GET请求的基本格式 ​python sqlmap.py -u <测试网址> Ps:不知道为什么我的sqlmap使用时前面要加python&#xff0c;而大部分其他教程没提到…