自动化测试、压力测试、持续集成

2023-09-17 14:34:51

因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家,希望对需要的人有所帮助。

SoapUI 是什么?

SoapUI 是一个开源测试工具,通过 soap/http 来检查、调用、实现 Web Service 的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到 Eclipse,maven2.X,Netbeans 和 intellij 中使用。

SoapUI 的安装

下载地址,最好下载最新版本安装包,因为 SoapUI 是基于 java 开发的测试工具,3.0 以前版本的安装包没有集成 JRE,这样就得自己安装和配置 java 运行环境了。

SoapUI 的使用

1. 在主界面 File 菜单,点击“New REST Project”,填写你想要测试的url,根据我们的项目 Teacher Site 中的 url 举例:https://teacher-test.grapecitydev.com:

 

参照下图需要在 Resource 输入框输入 /Login/Login 路由,并在 Params 中输入登录时需要的查询参数 accountName 和 password。

2. 点击绿色按钮,SoapUI 发送登录请求,可以在右侧框中看到登录请求返回的结果。

根据 Teacher site 项目的业务需求,发送 Login 请求完成后还得发送 SchoolItemChange 接口才会返回用户登录成功后认证的 Token,如下图中 Set-Cookie 的值将会在下一个 GetOverview 接口的请求头中 Cookie 属性使用:

3. 接下来的第三个请求 GetOverview 如下图,在 Header 框中添加 Cookie 属性,值就是上一个请求 SchoolItemChange 返回的 Set-Cookie 值:

自动化测试

其实以上三个接口的调用,只是简单的测试接口是否调用正常,如果想要对三个接口的调用进行自动化测试,请看下面的分解:

1. 右键每一个接口下的 Request 请求,如图所示,选择”Add TestCase”项,依次为以上三个接口设置 Test Case,在 TestSteps 下分别有 Login,SchoolItemChange,GetOverview 三个 TestCases。

2. 大家有没有发现,在 Test Steps 下多了个 Set Cookie 项,这是干什么的呢?

这是通过 Groovy Script 语法,获取上一个请求的返回值(此处是获取 SchoolItemChange 接口的返回值”Set-Cookie”),并将”Set-Cookie”属性值赋予下一个请求 GetOverview 的请求头 Cookie 中,是不是和第2,3条很应景啊?!这样就很好的解决了接口自动化测试,不用复制粘贴请求之间依赖的返回值。

3. 接下来,就要为测试的接口添加 Assertion 断言,点击左下角的,弹出 Add Assertion 对话框,根据断言注解,选择需要的测试点,例如 Response SLA 表示请求发送后期望的响应时间:

 

Contains Assertion 则表示请求返回的字符串中包含指定的字符串。此断言适用对比的内容不超过65535个字符,因为 Soapui 基于 java 语言编写,这是 jvm 支持的最大字符个数:

4. 为解决上述不能超过65535个字符的问题,则需要为接口添加 Script Assertion,如下代码,表示将本地文件 GetOverview 01.txt 中的内容与请求返回中 HtmlOfPartialView 属性的值进行对比,判断两者内容是否相等:

5. 双击 Test Case,出现如下图,点击按钮,或者选中 Login 右键选择”Run from here”,则依次执行 Test Steps 步骤,如图所示,出现红色背景 Failed 字样,查看右下角 TestCase Log 框,可以看出是由于 Step 4 GetOverview 接口请求的响应时间 1272ms 大于断言中设置的时间 500ms:

发送邮件功能

当你希望某个接口请求的结果以邮件方式通知给你时,如下图所示,右键 Test Steps -> Add Step -> Groovy Script,添加 Send Email 脚本,其中 Username 和 Password 分别是公司邮件服务器的账户和密码,Internet Address 即为接收的邮箱地址。

”${teacher-test#TestCase#Getoverview#Response}”的顺序依次为

Test Suite name # Test Case name # Test Step name # Response:

压力测试

以上是功能性测试,接下来是压力测试,右键 Load Tests 创建测试用例,

Limit:60 即为压力测试的时间 60s,Thread 表示多线程,可以同时运行5个线程,Test Delay * Radom,表示随机延迟的时间数。

min 表示最小响应时间,max 表示最大响应时间,avg 为平均响应时间,last 表示上一次请求响应时间,cnt 表示请求数,tps 表示每秒处理请求数,bps 表示吞吐率,rat 表示错误率。

右键可以为请求添加断言,Max Errors 设置最大的错误数,Step Average 设置期望的平均时间,其他的依次类推:

如下图,可以选择不同策略的负载和性能测试:

最常用的是简单策略(Simple),如果你想运行功能测试,并想在10秒内延迟5个线程,则 Threads 设置为5,延迟 1000s,随机延迟比率0.5(即将导致延误5至10秒)。

方差策略(Variance),Threads 为方差的线程数量,Interval 为间隔设置所需的值。例如设置20个线程,间隔60和方差0.8,线程的数量将在第一个15秒从20增加到36,然后又减少到20,45秒后继续减少到4个线程,最后等到60秒时返回到初始值20。在统计图中我们很容易遵循这个方差:

线性策略(Thread),从一个线程到另一个线程的数量的运行。它的主要功能是确定某些统计数据变化或事件发生时的水平,例如设置开始和结束线程值(例如1 - 10),并设置持续时间(此例中每个线程至少30秒)获得准确的测量数据:

持续集成

在UI界面进行持续集成:右键项目名称 REST Project 1 -> 选择 Launch TestRunner,出现如下图,在 Basic Tab 页选择 TestRunner 安装路径:

在 Reports Tab 页选择报告输出文件夹:

点击 Launch 按钮,自动执行测试项目。

通过执行命令进行持续集成,以管理员身份打开 Command Prompt 对话框,执行如下命令:

testrunner.bat -s'teacher-test' -cLogin -r -j -f'D:\Trivals\SoapUI\Logs' D:\Trivals\SoapUI\REST-Project-1-project.xml

该命令行的各个参数含义如下:

  • s : The TestSuite to run, used to narrow down the tests to run
  • c : The TestCase to run, used to narrow down the tests to run
  • r : Turns on printing of a small summary report (see below)
  • j : Turns on exporting of JUnit-compatible reports, see below
  • f : Specifies the root folder to which test results should be exported

【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战

更多推荐

PCIE研究-2

PCIe是一种高速串行总线,用于连接计算机内部的各种设备。在PCIe中,有四种不同的设备类型:Switch、Bridge、RootComplex和EndPoint。本篇文章将介绍这四种设备类型的基础知识。1.SwitchSwitch是PCIe中最常见的设备类型之一,它可以将一个PCIe总线分成多个子总线。Switch可

加密资产托管:迈向安全与合规的未来!

在当今数字化时代,加密货币正逐渐走进人们的视野,并成为越来越多投资者和机构的关注焦点。然而,加密领域仍存在一个主要问题:如果丢失了密钥,就会导致无法访问资产。为了解决这一问题,加密货币行业正在向资产托管的方向发展。传统金融体系中,资产托管是非常重要的环节,它涉及到金融机构或第三方专业机构为投资者保管和管理其资产。在加密

网安周报|CISA发布增强开源安全性的计划

1、CISA发布增强开源安全性的计划美国一家领先的安全机构发布了一项期待已久的计划,详细说明了它将如何增强联邦政府和整个生态系统的开源安全性。美国网络安全和基础设施安全局(CISA)开源软件安全路线图在安全开源峰会上发布。据估计,解决开源软件中的网络风险是拜登政府的一个关键优先事项,因为96%的代码库包含开源代码。CI

干净优雅的做iOS应用内全局交互屏蔽

本文字数:4930字预计阅读时间:28分钟01交互屏蔽的需求很多应用开发者都会遇到这样一个需求,当程序需要处理某个敏感的核心任务,或者执行某些动画时,需要杜绝一切外部干扰,优先保证任务的完成,之后再去处理其它任务。否则如果在处理过程中受到外部事件的干扰,可能会引入严重的问题,而规避这些问题需要额外编写过多的逻辑。例如,

不好意思,Mybatis Plus 该换了

使用fluentmybatis可以不用写具体的xml文件,通过javaapi可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操作,在xml或mapper中再组装参数。那对比原生Mybatis,MybatisPlus或者其他框架,FluentMybatis提供了哪些便利

R300升级款无人车开发平台,助力开发者快速上手、高效验证算法

R300升级款是一款科研无人车开发平台,旨在为无人车开发者提供快速上手开发和高效验证算法的解决方案。该平台集成了多款无人车底盘,包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等,以满足不同形式和配置的需求,并搭载了RTK定位系统、双目相机、深度相机和激光雷达等多种传感器,以满足开发者的科研需求。此外,平台还提供了丰富的案

Linux shell编程学习笔记1:关于shell的前世今生

一、什么是Shell?Shell英文单词的原意是“外壳”,在计算机领域专指在操作系统(OperatingSystem)外层,提供用户界面(UserInterface)的程序,主要负责将用户的命令(Command)转化为操作系统可识别的指令(Instruction)。二、UnixshellUnix诞生于1969年,是最早

android px ps dp直接的转换

转换方式看这篇文章:https://blog.csdn.net/sinat_28324227/article/details/50780359下面是ppi一览2.8英寸分辨率为640×480(VGA)像素密度286PPI3.2英寸分辨率为480×320(HVGA)像素密度167PPI3.3英寸分辨率为854×480(W

Linux命令行教程:使用head和tail命令快速查看文件的开头和结尾

文章目录简介A.什么是`head`和`tail`命令B.`head`和`tail`命令的作用和用途`head`命令A.命令格式和语法B.常见选项和参数1.`-n`:指定显示的行数2.`-c`:指定显示的字节数3.`-v`:显示文件名C.示例和应用实例1.显示文件的前几行2.显示多个文件的前几行3.结合管道使用D.注意事

PROFIBUS主站转ETHERCAT协议网关

产品介绍JM-DPM-ECT是自主研发的一款PROFIBUS-DP主站功能的通讯网关。该产品主要功能是将各种PROFIBUS-DP从站接入到ETHERCAT网络中。本网关连接到PROFIBUS总线中作为主站使用,连接到ETHERCAT总线中作为从站使用。产品参数技术参数◆PROFIBUS-DP/V0协议符合GB/T20

《深入PostgreSQL的存储引擎:原理与性能》

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

热文推荐