常见接口测试常见面试题(JMeter)
JMeter 是 Apache 提供的开源性能测试工具,主要用于对 Web 应用、REST API、数据库、FTP 等进行性能、负载和功能测试。它支持多种协议,如 HTTP、HTTPS、JDBC、SOAP、FTP 等。
在一个线程组中,JMeter 的执行顺序通常为:配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器。
JMeter 的核心组件有哪些?
-
测试计划(Test Plan):测试的整体结构,包含所有测试元素。
-
线程组(Thread Group):模拟并发用户的集合,设置线程数、循环次数等。
-
取样器(Sampler):定义具体的请求类型,如 HTTP 请求、JDBC 请求等。
-
配置元件(Config Element):为取样器提供配置信息,如 HTTP 请求默认值、CSV 数据文件设置等。
-
前置处理器(Pre-Processor):在取样器执行前运行,用于修改请求数据。
-
后置处理器(Post-Processor):在取样器执行后运行,用于提取响应数据。
-
断言(Assertion):验证响应结果是否符合预期。
-
监听器(Listener):收集并展示测试结果,如查看结果树、聚合报告等。
1. 接口传输格式有哪些?
-
JSON:轻量级的数据交换格式,易于读写。
-
XML:可扩展标记语言,结构严谨,支持复杂数据结构。
-
Form Data:表单格式,如
application/x-www-form-urlencoded
或multipart/form-data
(用于文件上传)。 -
二进制格式:如 Protobuf、Avro,适用于高性能场景。
-
其他:如 YAML、CSV、纯文本等。
2. JMeter 环境搭建步骤
-
安装 Java:确保已安装 JDK 8+,配置
JAVA_HOME
环境变量。 -
下载 JMeter:从 Apache JMeter 官网 下载对应版本。
-
解压文件:解压到本地目录,无需安装。
-
启动 JMeter:
-
Windows:运行
bin/jmeter.bat
-
Linux/macOS:运行
bin/jmeter.sh
-
-
验证环境:打开 GUI 界面即表示成功。
3. JMeter 实现文件上传
-
步骤:
-
Name:与接口定义的字段名一致(如
file
)。 -
File Path:上传文件的绝对路径。
-
MIME Type:如
image/png
、text/plain
等。
-
添加 HTTP 请求 采样器,选择 POST 方法。
-
勾选 Use multipart/form-data。
-
在 Parameters 中添加文件参数:
-
可选:添加 HTTP 信息头管理器,设置
Content-Type
为multipart/form-data
。
-
4. JMeter加密请求参数处理
-
常用方法:
-
JSR223 PreProcessor:使用 Groovy 或 BeanShell 脚本调用加密算法(如 AES、RSA)。
-
内置函数:如
__digest
(支持 MD5、SHA 等哈希算法)。 -
外部 Jar 包:将加密工具类放入
JMETER_HOME/lib/ext
,通过 BeanShell 调用。
-
-
示例(MD5):
import org.apache.commons.codec.digest.DigestUtils
String md5 = DigestUtils.md5Hex(vars.get("明文参数"));
vars.put("encryptedParam", md5);
5. JMeter 添加 Cookies
-
自动管理:添加 HTTP Cookie 管理器,自动存储和传递 Cookies。
-
手动添加:
-
在 HTTP 请求头管理器 中添加
Cookie
头。 -
格式:
Cookie: name1=value1; name2=value2
。
-
6. JMeter 连接数据库
-
步骤:
-
Connection Pool Name:自定义名称(如
MyDB
)。 -
Database URL:
jdbc:mysql://host:port/dbname
。 -
JDBC Driver Class:
com.mysql.jdbc.Driver
。 -
输入用户名和密码。
-
添加 JDBC 驱动:将数据库驱动(如 MySQL 的
mysql-connector-java.jar
)放入JMETER_HOME/lib
。 -
添加 JDBC Connection Configuration:
-
添加 JDBC Request:选择连接池,编写 SQL 并保存结果到变量。
-
7. JMeter 处理 HTTPS 证书
-
忽略证书错误(测试环境):
-
在 HTTP 请求 的 Advanced 选项卡中,设置 Implementation 为
Java
。 -
修改
JMETER_HOME/bin/system.properties
,添加:
-
javax.net.ssl.trustStore=
javax.net.ssl.trustStorePassword=
-
导入证书(生产环境):
-
使用浏览器导出证书(.cer 或 .jks)。
-
在 HTTP 请求 中配置 SSL 管理器,指定证书路径。
-
8. JMeter 断言方法
-
常用断言类型:
-
响应断言:检查响应文本、响应码或响应头。
-
JSON 断言:使用 JSON Path 验证特定字段值。
-
XPath 断言:针对 XML 格式的响应。
-
持续时间断言:验证请求响应时间是否超时。
-
-
示例(响应文本断言):
-
Apply to:
Main sample only
-
检查字段:
Response Body
-
匹配规则:
Contains
,输入预期文本(如"success": true
)。
-
9. JMeter 参数化方法
-
参数化类型:
-
CSV 数据文件:通过 CSV Data Set Config 读取外部文件。
-
用户自定义变量:在 User Defined Variables 中定义静态值。
-
随机函数:如
__Random
、__RandomString
、__time
生成动态数据。 -
数据库查询:通过 JDBC 请求获取数据并存入变量。
-
BeanShell/JSR223:动态生成复杂参数。
-
-
示例(CSV 参数化):
-
Filename:
data.csv
-
Variable Names:
user,password
-
在请求中引用
${user}
和${password}
。
-
10. JMeter 自动发送邮件
-
方法一:SMTP Sampler
-
添加 SMTP Sampler,配置邮件服务器(如
smtp.gmail.com:587
)。 -
填写发件人、收件人、主题、正文,启用 SSL/TLS。
-
在测试计划末尾添加该 Sampler。
-
-
方法二:Jenkins 集成:
-
在 Jenkins 中配置 JMeter 任务。
-
使用 Email Notification 插件,在构建后触发邮件。
-
-
注意:需开启 SMTP 服务器的认证(用户名/密码或应用专用密码)。
11. JMeter和Postman有啥区别?
答案:
-
JMeter:
-
擅长性能测试、并发测试,适合复杂场景。
-
开源免费,脚本化强,支持多协议。
-
缺点:界面稍复杂,学习曲线高。
-
-
Postman:
-
专注接口调试,界面友好,适合快速验证。
-
有付费功能,性能测试较弱。
-
优点:上手快,团队协作方便。
-
-
总结:功能测试用Postman快速验证,性能测试用JMeter跑并发!
实战Tips:
-
面试说“两者结合”更加分:Postman调试接口,JMeter跑压力测试。
-
Postman的Collection可导入JMeter(需转换工具)。
总结
JMeter接口测试面试题不难,抓住“建用例、参数化、断言、性能测试”四大核心,回答时带点实战案例,面试官绝对给你点赞!小白从测简单GET请求练起,再试试参数化和并发,很快就能变“测试王者”!
相关文章:
常见接口测试常见面试题(JMeter)
JMeter 是 Apache 提供的开源性能测试工具,主要用于对 Web 应用、REST API、数据库、FTP 等进行性能、负载和功能测试。它支持多种协议,如 HTTP、HTTPS、JDBC、SOAP、FTP 等。 在一个线程组中,JMeter 的执行顺序通常为:配置元件…...
2026届华为海思秋暑期IC实习秋招笔试真题(2025.04.23更新)
今天给大家分享下华为海思2025.04.23号最新IC笔试真题。 华为海思IC前端中后端(COT&XPU)岗位笔试机考题 更多华为海思数字IC岗秋招实习笔试真题,可以私信小编。 数字后端培训实战项目六大典型后端实现案例 秒杀数字后端实现中clock gating使能端setup viola…...
水域陆地两相宜,便携漏电探测仪
在自然灾害如洪水、地震、台风及火灾中,建筑物和电力设施易因结构破坏、线路老化或设备浸水导致绝缘失效,引发漏电事故。漏电不仅直接威胁人员生命安全,还可能引发二次火灾或爆炸,尤其在潮湿环境下导电性增强,触电风险…...
论文笔记(七十九)STOMP: Stochastic Trajectory Optimization for Motion Planning
STOMP: Stochastic Trajectory Optimization for Motion Planning 文章概括摘要一、引言二、相关工作三、STOMP 算法A. 探索B. 轨迹更新 四、机械臂的运动规划A. 设置B. 代价函数1)障碍物代价:2)约束代价:3)扭矩代价&a…...
如何应对客户提出的不合理需求
在项目执行过程中,客户经常会提出一些看似不合理的需求,这些需求可能超出了预算、时间范围,或与项目初期的目标不符。应对这些不合理需求的最佳方法是通过清晰沟通、设定合理期望、与客户共同探索解决方案来有效管理这些需求。例如࿰…...
SEO的关键词研究与优化 第一章
关键词研究和优化是SEO的核心。通过深入了解目标受众使用的搜索词,我们可以优化网站内容,提高搜索引擎排名,并吸引更多相关流量。本章将详细探讨关键词研究的方法、和最佳实践。 关键词类型对比分析 1. 关键词研究的基础 了解不同类型的关键…...
A2A Agent 框架结构化分析报告
A2A Agent 框架结构化分析报告 第一章 绪论 1.1 引言 在全球数字化转型的浪潮中,人工智能(Artificial Intelligence, AI)技术正以前所未有的速度改变着我们的生活和工作方式。然而,随着AI系统的广泛应用,单一AI系统…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(10): つもり 计划/打算
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(10): つもり 计划/打算 1、前言(1)情况说明(2)工程师的信仰 2、知识点(1)つもり 计划/打算(2&a…...
对patch深入理解下篇:Patch+LSTM实现以及改进策略整理
我在去年11月份写了pat入理解的上篇,主要介绍patch的原理和代码实现过程。文章发布后很多朋友催更下篇,其实一直在积累素材,因为介绍完原理和实现之后,下一步肯定是要考虑如何改进。在这之前,首先,我们接着…...
线程同步与互斥(互斥)
目录 线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 互斥量的接⼝ 初始化互斥量 初始化互斥量有两种⽅法 销毁互斥量 互斥量加锁和解锁 加锁的使用 互斥量实现原理探究 互斥量的封装 Mutex.hpp Main.cc 线程互斥 进程线程间的互斥相关背景概念 临界资源&…...
基于RFID的智能家居系统设计与实现
标题:基于RFID的智能家居系统设计与实现 内容:1.摘要 随着物联网技术的飞速发展,智能家居系统成为了人们关注的焦点。本研究的目的是设计并实现一个基于RFID(射频识别)的智能家居系统,以提高家居的智能化水平和用户的生活便利性。…...
JAVA设计模式——(六)装饰模式(Decorator Pattern)
JAVA设计模式——(六)装饰模式(Decorator Pattern) 介绍理解实现被装饰类被装饰类的具体实现装饰类装饰类具体实现测试 适用场景 介绍 动态给一个对象添加一些额外的功能,动态的扩展其功能。 理解 装饰模式…...
CGAL 网格等高线计算
文章目录 一、简介二、实现代码三、实现效果一、简介 这里等高线的计算其实很简单,使用不同高度的水平面与网格进行相交,最后获取不同高度的相交线即可。 二、实现代码 #include <iostream> #include <iterator> #include <map>...
Sharding-JDBC 系列专题 - 第十篇:ShardingSphere 生态与未来趋势
Sharding-JDBC 系列专题 - 第十篇:ShardingSphere 生态与未来趋势 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第十篇,也是本系列的总结篇,将全面回顾 Apache ShardingSphere 生态,包括其核心组件、功能模块和与其他…...
ETL 数据集成都包含哪些?
一、ETL 数据集成都包含哪些? 数字化时代数据已成为企业最为宝贵的资产之一。然而,企业的数据往往分散在多个不同的系统和平台中,如关系型数据库、文件系统、API 等。为了将这些分散的数据整合起来,为企业决策提供全面、准确的支…...
windows系统自定义powshell批处理脚本
windows自定义powshell批处理脚本 前几天看到大神自定义批处理骚操作操作,觉得很有意思,本篇文章记录一下入门学习笔记。 PowerShell 是一种功能强大的脚本语言和命令行外壳,基于.NET Framework,广泛应用于 Windows 系统管理、自…...
【计算机视觉】CV实战项目 - 基于YOLOv5与DeepSORT的智能交通监控系统:原理、实战与优化
基于YOLOv5与DeepSORT的智能交通监控系统:原理、实战与优化 一、项目架构与技术解析1.1 核心算法架构1.2 学术基础 二、实战环境配置2.1 硬件要求与系统配置2.2 分步安装指南 三、核心功能实战3.1 基础车辆计数3.2 自定义检测类别3.3 多区域计数配置 四、性能优化技…...
Java基础系列-HashMap源码解析3-红黑树
文章目录 红黑树定义与AVL树对比插入节点插入节点是根节点插入节点的叔叔是红色插入节点的叔叔是黑色 构建示例删除节点只有左子树/只有右子树 只有左孩子/只有右孩子没有孩子如果双黑节点的兄弟是黑色:如果双黑节点的兄弟是红色: 总结 红黑树 定义 与…...
Linux系统的延迟任务及定时任务
延迟任务的发起 在系统中我们可以使用at命令来发起延迟任务 at命令执行是调用的是atd服务,即使系统最小化安装atd也会被安装到系统中 at 任务信息存放在系统中/var/spool/at目录中 at 任务的日志文件被存放到/var/log/cron中 at 任务执行时如果遇到系统处于关闭状态…...
【蓝桥杯】水质检测
水质检测 题目描述 小明需要在一条 2 n 2 \times n 2n 的河床上铺设水质检测器。在他铺设之前,河床上已经存在一些检测器。如果两个检测器上下或者左右相邻,那么这两个检测器就是互相连通的。连通具有传递性,即如果 A A A 和 B B B 连通…...
【晶振】晶振的工作原理及其与单片机关系
晶振(晶体振荡器)是电子设备中常见的元件,其核心功能是提供稳定的时钟信号,而单片机(MCU)依赖这一信号来同步内部操作。以下是晶振的工作原理及其与单片机关系的详细说明: 一、晶振的工作原理 压电效应与谐振 晶振的核心是石英晶体,利用其压电效应: 当在晶体两端施加电…...
配置 C/C++ 语言智能感知(IntelliSense)的 c_cpp_properties.json 文件内容
配置 C/C 语言智能感知(IntelliSense)的 c_cpp_properties.json 文件内容 {"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","/opt/ros/humble/include/**&quo…...
Postgresql源码(143)统计信息基础知识(带实例)
概念与总结 高频值(Most Common Values, MCV) 存储在 most_common_vals 中。每个高频值的频率通过 most_common_freqs 单独记录(例如 0.010966667 等)。MCV 用于优化等值查询(如 poid 33)&…...
【含文档+PPT+源码】基于SpringBoot+vue的疫苗接种系统的设计与实现
项目介绍 本课程演示的是一款 基于SpringBootvue的疫苗接种系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…...
解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案
以下是解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案: 错误原因 Dart Sass 1.x 版本中使用的旧 JavaScript API(如 sass.render() 或 sass.compile() 的旧调用方式)将在 2.0.0 版本中被移除。需迁移到新 API 以避免未来报错。…...
Concepts (C++20)
C20 Concepts Concepts 是 C20 引入的核心特性,用于显式约束模板参数,提升代码可读性和错误提示。以下通过代码示例和原理分步骤解析其用法。 1. 基本概念 目标:显式声明模板参数必须满足的条件。优势:替代复杂的 SFINAE 和 ena…...
CVE-2024-23897-Jenkins 2.441之前版本存在任意文件读取漏洞
1.漏洞介绍 Jenkins 2.441及更早版本,以及LTS 2.426.2及更早版本没有禁用其CLI命令解析器的一个功能,该功能会将参数中字符后跟的文件路径替换为该文件的内容,允许未经身份验证的攻击者读取Jenkins控制器文件系统上的任意文件。 2.poc利用 下…...
利用 SSE 实现文字吐字效果:技术与实践
利用 SSE 实现文字吐字效果:技术与实践 引言 在现代 Web 应用开发中,实时交互功能愈发重要。例如,在线聊天、实时数据监控、游戏中的实时更新等场景,都需要服务器能够及时将数据推送给客户端。传统的请求 - 响应模式在处理实时性要求较高的场景时显得力不从心,而 Server…...
离线部署kubernetes
麒麟Linux服务器 AMR架构 🧰 离线部署 Kubernetes v1.25.9(麒麟系统 Docker) 一、验证Docker部署状态 检查Docker服务运行状态 systemctl status docker 预期输出应显示 Active: active (running),表明服务已启动18。 …...
2024武汉邀请赛B.Countless Me
题目链接 #include<bits/stdc.h> using namespace std; using lllong long;int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll n; cin>>n;vector<ll>a(n1);ll res0;for(int i1;i<n;i) cin>>a[i],resa[i];ll ans0;for(int i32;i>…...
第53讲 农学科研中的AI伦理与可解释性——探索SHAP值、LIME等可解释工具与科研可信性建设之道
目录 一、为什么农学科研中需要“可解释AI”? ✅ 场景示例: 二、常见可解释AI工具介绍 1. SHAP(SHapley Additive exPlanations) 2. LIME(Local Interpretable Model-agnostic Explanations) 三、AI伦理问题在农学中的体现 🧭 公平性与偏见 🔐 数据隐私 🤖…...
《Python3网络爬虫开发实战(第二版)》配套案例 spa6
Scrape | Moviehttps://spa6.scrape.center/ 请求影片列表api时,不仅有分页参数,还多了一个token,通过重发请求发现token有时间限制,所以得逆向token的生成代码。 通过xhr断点定位到接口请求位置 刷新页面或者点翻页按钮&#x…...
面试题:Java程序CPU 100%问题排查指南
Java程序CPU 100%问题排查指南 当Java程序出现CPU使用率达到100%的情况时,通常意味着程序存在性能瓶颈或无限循环等问题。以下是系统化的排查方法和解决方案: 1. 快速定位问题线程 使用top命令初步定位 top -H -p <java_pid> # 查看Java进程的所有线程CPU占用线程…...
YOLOv12的注意力机制革新与实时检测性能分析——基于架构优化与历史版本对比
目录 一、摘要 二、引言 三、YOLO架构的技术演变 四、YOLOv12的架构设计 主干网特征提取 头部特征融合和目标检测 五、YOLOv12的架构创新 区域注意力模块 残差高效层聚合网络(R-ELAN) 其他改进和效率提升 六、YOLOv12 的基准评估 延迟与精度…...
Ollama工具调用(Tool Calls)业务应用案例
场景:电商客服自动处理退货请求 业务需求:用户通过聊天界面申请退货,模型需调用外部工具验证订单状态、触发退货流程,并返回处理结果。 1. 定义工具列表 在请求中声明模型可调用的工具(函数)及其参数格式…...
输入捕获模式测频率
前提工作: PA6、PA0通过跳线相连,PA6测试PA0的输出频率 本来只有下列函数,改变占空比 但是我们需要测试频率,需要动态改变频率。 void PWM_SetCompare1(uint16_t Compare) {TIM_SetCompare1(TIM2, Compare); //设置CCR1的值 }…...
【Vue3 实战】插槽封装与懒加载
一、为什么需要插槽?从一个面板组件说起 在电商首页开发中,经常遇到这样的场景: 「新鲜好物」「人气推荐」同样类型模块都需要相同的标题栏,但内容区布局不同 这时候,插槽(Slot)就像一个「内容…...
Matlab 复合多层结构的隔声研究
应用转移矩阵的方法,就平面声波垂直入射的情况,对具有周期结构的无限大多层板的隔声特性进行了理论分析,并对结构不同的多层板的隔声特性进行了数值模拟.理论分析和数值模拟表明:与通常隔声用的单层或双层板相比,在保持面密度不变的条件下,采用多层板结构能够在某些…...
vulkanscenegraph显示倾斜模型(6)-帧循环
前言 上一部分,通过十个章节的内容,对视景器的初始化与准备工作进行了系统性的剖析。本章将在该基础上,探讨vsg中的帧循环机制,主要包含前进到下一帧、事件处理、更新、记录与提交、呈现五个部分,同时整个过程包含了复…...
k8s 1.26版部署
环境规划: pod网段:10.244.0.0/16 service网段:10.10.0.0/16 注意: pod和service网段不可冲突,如果冲突会导致K8S集群安装失败。 容器运行时本次使用containerd。 主机规划: 一、初始化系统(所有节点) 1. 主机名定义以及解析 2. 关闭防火墙 3. 关闭selinux 4. 时间同…...
Android之AI自动化测试--Midscene
文章目录 前言一、准备工作1.安装2.准备 API Key3.安装 adb4.连接设备 二、yaml格式自动化脚本1. 脚本案例2.执行结果 三、文件结构变化android 部分 前言 字节 Web Infra团队官宣Midscene 从 v0.15 开始支持 Android 自动化测试,本篇文章介绍yaml方式的Android自动…...
Cadence 建立复合原理图封装时怎么切换页面
1.在当前页面A绘制完成,若要切换到下一页面B。怎么操作呢? 见下面: CTRLN,切换到下一部分(CTRLB,切换到前一部分)继续放线以及管脚 即:此时在原理图库的A部分 此时按 CTRLN,切换到下一B部分...
Sharding-JDBC 系列专题 - 第八篇:数据治理与高级功能
Sharding-JDBC 系列专题 - 第八篇:数据治理与高级功能 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第八篇文章,将重点探讨 数据治理(Data Governance) 和 高级功能,包括数据加密、影子表、SQL 审计以及 ShardingSp…...
今日行情明日机会——20250424
指数依然是震荡走势,接下来两天调整的概率较大 2025年4月24日涨停主要行业方向分析 一、主要方向 化工(新能源材料) • 涨停家数:8家(最强方向)。 • 代表标的: ◦ 中欣氟材(3连板…...
Kubernetes 常用运维命令整理
目录 Kubernetes 常用运维命令整理一、集群管理二、Pod 和容器管理三、Deployment 和应用管理四、Service 和网络管理五、存储管理六、ConfigMap 和 Secret 管理七、资源使用与监控八、调度和容错九、Role 和权限管理十、清理资源 总结 Kubernetes 常用运维命令整理 Kubernete…...
【Python爬虫基础篇】--4.Selenium入门详细教程
先解释:Selenium:n.硒;硒元素 目录 1.Selenium--简介 2.Selenium--原理 3.Selenium--环境搭建 4.Selenium--简单案例 5.Selenium--定位方式 6.Selenium--常用方法 6.1.控制操作 6.2.鼠标操作 6.3.键盘操作 6.4.获取断言信息 6.5.…...
基于Vulkan Specialization Constants的材质变体系统
材质变体 所谓材质变体,指的是一份材质代码文件,最终对应的是多份运行时gpu程序。比如,shader代码里面有开关或者选项,不同的组合对应不同的最终gpu program。那么,所有的这些组合对应的gpu program,可以统…...
Langchain+RAG+向量数据库
加载数据 import osimport lancedb from langchain_community.document_loaders import TextLoader from langchain_community.embeddings import BaichuanTextEmbeddings from langchain_community.vectorstores import LanceDB from langchain_core.output_parsers import St…...
Stack和Queue和deque的讲解(底层实现 手撕版)
一.底层的基本思路 我们cpp中实现的栈和队列不同于我们数据结构c语言实现的栈和队列,c语言中实现的栈和队列都是通过一个数组指针的形式来完成,每个函数都需要写大量的代码,但是我们的cpp,就是通过函数模板 适配器来完成的。 我们…...
《Pinia 从入门到精通》Vue 3 官方状态管理 -- 插件扩展篇
使用插件扩展功能 可以同时使用多个插件(插件“中间件式”机制)一、使用多个插件的方式二、插件机制简图三、插件互不冲突的关键点四、实战示例:多插件组合使用五、组合使用注意事项推荐插件组合搭配方案(实战模板) 根…...