SoapUI 总结
在公司开了4节课教导测试小伙伴们学习和使用soapui,以下是本人的一些关于soapui的课程总结
课程:
- 第1课: SoapUI 入门
- 第2课: git操作和问题回顾
- 第3课: 设计接口测试用例的一些方法
- 第4课: Soapui in Jenkins
SoapUI 入门
从gitlab中导入项目
- 以windows为例,到C盘目录下,克隆项目
- 在soapui中切换工作空间,File -> Switch Workspace,选择
workspace.xml
- 双击打叉的项目,填入项目在硬盘中的绝对地址:
C:\soapui\soapui-project
,确认后即成功读取整个Project
- 点击项目,左下角属性里面有一项
Composite Project
:true
,即以文件夹形式保存项目,方便多人协作,如果为false
,即以单文件形式保存项目,不方便多人协作。
新建接口测试工作空间和项目
- 新建工作空间,File -> New Workspace,填写 工作空间名(如果已建,忽略该步骤)
- 新建项目,File -> New Project,填写项目名称,如 项目名
- 在左下角项目属性里面,将 Composite Project : false 改为 true ,以以文件夹形式保存项目,方便多人协作
添加项目全局变量 Properties :
- Name :
apiv
- Value :
v5_3_0
- 引用该变量用: ${#Project#apiv} ,用于适应接口版本变更
- Name :
添加一个 API URL
A.使用录制的方式(接口已在 swagger-ui 文档中)
- 选中项目右键,Discover REST APIs;
- 到 swagger-ui 中把完整的 Request URL 复制,黏贴进去,按一下回车;
- 等待请求响应后,点击 Done;
- 转跳请求 url 记录,点击 Generate services 生成 Services,确认;
- 在主界面左侧就能看到生成的 API URL
- 以上是从接口文档中得到的请求参数,由于接口文档不一定准确,还需要用 Charles 从 app 抓包检查接口参数,还可以从代码中走读检查是否有缺失参数:如何找到接口路径以及完整参数
B.使用手动的方式
- 选中项目右键,New REST Service from URI,输入完整URL
调整 Service 配置:选中 Service,左下角中的属性设置:
- name : host
- Base Path : /${#Project#apiv}/api/xxx
- 如果已有 Service,选中 Service 右键,New Resource,输入 Path:
/xxx.php?xx=xx1&xx=xx2
在生成的
Request 1
中,手动调整参数:- Style : QUERY
- Level : RESOURCE
C.使用 swagger-ui json 导入
- swagger2.0 版本的 json 比较好,1.2 兼容性不行
- 新建项目时,选中
Create project from Swagger Definition(REST)
- 如果已有项目,右键项目,选择 Import Swagger
已录入的接口还能导出 Swagger json ,但是没有示例参数,没有归类 tag,并不算好用
如何找到接口路径以及完整参数
- 从 swagger-ui 中找
- 从 kibana 中找
- 从 Charles 中找
- 从代码中找
- 判断接口是否已不使用
从 kibana 线上数据中找到接口是否被调用的记录
筛选条件形如:
{
"query": {
"match": {
"uripath": {
"query": "/api/xx.php",
"type": "phrase"
}
}
}
}
新建测试套件和测试用例
- 新建测试套件和测试用例,选择 Request 右键,Add to TestCase
- 生成的测试套件和测试用例如下,
- 处理 token 问题,可以自己写接口计算 token 值再传参到真正的请求,或者用 groovy 脚本记录cookies,本人用 php 写了计算 token 接口并结合 nginx rewrite 规则来使用
数据驱动
- 添加测试步骤:
DataSource
,DataSource Loop
,用于数据驱动
- 数据源的设置,类型选择
Grid
:
- 数据循环的设置:
- 执行测试步骤对数据源的引用方式如下,可以从输入框右边的柱状按钮点击选择:
初期,可以一个testcase只有一个执行测试步骤,先不加入数据驱动
用例关联
- Add Step -> Run TestCase 引用其他用例作为测试步骤
- 过程中需要传参,如该登陆接口需要传递 uid 到关注接口,
登陆 Test Case
添加 Propertiesuid
登陆 Test Case
在 Property Transfer 中配置uid
参数传递,$.data.uid
这个Xpath可以从GET - Request 1
步骤的返回 json 中获取
- 引入的手机账号登陆 Test Case 设置参数传递,点击扳手图标,将参数勾选上
- 测试步骤中,引用其他测试步骤传递过来的参数:
添加断言
- 在测试步骤中,底部点击 Assertion 展开,添加;或者在返回 Json 中选中数据,右键
Add Assertion
git操作和问题回顾
- 导入项目
git 回滚操作
- 本地未提交,拉取报冲突
- 本地已提交,拉取报冲突
- git reset 3种模式(重置提交) 和 git revert (提交回滚)的区别
- git stash (贮藏)的用法
- 挑选文件提交、重置文件
- 清除初始url中的参数数值
- 整体执行用例调试
设计接口测试用例的一些方法
测试用例设计
单一接口 (优先)
- 覆盖正常情况(优先)
- 前置条件和收尾工作最好通过写入固定数据库数据来做
- 不仅要校验返回值,还要校验数据变更是否符合预期
组合接口 (业务场景)
- 模拟常用的业务场景,在接口层面进行检查
断言方法:
- for Content
- for Count
- for Existence
- for Content matching RegEX 正则参考
- Valid HTTP Status Codes
- Contains 中文需unicode转码
- Not Contents
- XPath Match 可以模糊匹配
- 一般用准确断言和存在断言来对返回数据进行判断,在不能进行数据库数据写入后还原的情况下,更多地使用存在断言或模糊匹配
- 可以用groovy脚本来进行更复杂的断言,需要较高学习成本
数据驱动
- 目的:重复导入字段数据,检测接口异常
- 添加步骤 DataSource 和 DataSource Loop ,进行数据循环录入,设置好 DataSource Loop 的 DataSource Step 和 Target Step
- 在 request 参数中 填入 ${DataSource#变量名} 来引用数据源
业务场景
参数传递
- 在 testcase 的 Properties 中添加变量,并添加 PropertyTransfer 步骤将 response 拿到的参数传递给变量
- 关联用例 testcase 添加后,在 request 参数中 填入 ${用例名#变量名} 来引用
- 不同的账号以不同的登录 testcase 来给其他用例组成测试场景,避免以数据驱动的方式来实现,不然要面对复杂的断言
SoapUI in Jenkins
普通命令行方式运行:
- 在 jenkins 所在的 linux 服务器上安装Soapui开源版
~/SoapUI-x64-5.2.1.sh
安装 jenkins 插件并配置
- Git plugin
- Email Extension Plugin
- 在系统设置 - Extended E-mail Notification 配置好 SMTP
将邮件模板 *.jelly 放入 $JENKINS_HOME/email-templates
配置 jenkins 项目
- 源码管理: Git 填写 soapui 仓库地址,Additional Behavioursa 添加 Clean before checkout
- Build periodically: H 9 * ,每天定时早上9点构建一次
- 构建:Execute shell:
cd ${WORKSPACE} mkdir report cd /data/SoapUI-5.2.1/bin ./testrunner.sh -Dfile.encoding=UTF-8 -I -r -j -f${WORKSPACE}/report ${WORKSPACE}/soapui-project.xml
- 构建后操作: Publish JUnit test result report, 测试报告(XML) : report/*.xml
- 构建后操作: Editable Email Notification, Default Content : ${JELLY_SCRIPT,template="testReport_fail"}
以 docker 方式运行
- 在jenkins所在 linux 服务器(如 ubuntu )上安装 docker:
curl -sSL https://get.docker.com/ubuntu/ | sudo sh
,参考:Install Docker Engine - 拉取镜像,
docker pull jmcn/soapui-docker
,参考: https://github.com/JMcn/soapui-docker - jenkins 项目设置中的构建步骤改为:
Execute shell:
mkdir ${WORKSPACE}/report
sudo docker run --rm --add-host="host:ip" -v ${WORKSPACE}:/var/home jmcn/soapui-docker -l -c "testrunner.sh -Dfile.encoding=UTF-8 -I -r -j -f/var/home/report/ /var/home/soapui-project.xml"
项目构建触发条件:
定时运行,在项目中设置
- Build periodically:相当于 linux 的 crontab,定时执行构建任务
- Poll SCM:定时检查源码变更,有更新则 checkout 最新代码,然后执行构建
设置上游项目
- 场景:接口代码更新构建后,执行一次自动化接口测试
- 在接口的构建项目设置中添加 构建后操作, Build other projects ,选择要构建的项目以及触发条件
命令行参数:
- ssh 到服务器运行安装目录下的 ./bin/testrunner.sh 即可查看参数具体说明,特别注意只能指定 soapui-project-file 的 xml 文件来运行,不能指定项目文件夹
- 在Soapui图形界面中,右键 TestSuite 测试套件,Lauch 后查看 log 能找到 soapui 命令行的带参以及运行情况
测试报告
- pro 版可以生成 pdf 以及 html 的测试报告,但开源版只能对每个 TestSuite 生成 xml 文件,错误的请求详情以 txt 文件记录,所以,需要配合 jenkins 的 Publish JUnit test result report 步骤来展示报告,或邮件模板来展示
- 添加 -a 参数无论错误还是正确的 testcase 都会生成 txt 文件记录请求详情
- 添加 -I 参数:Do not stop if error occurs, ignore them
- xml 文件中文名称不显示问题,需要在系统安装中文语言包并设置语言为 zh_CN.UTF-8
沙发