一 断言

测试指定的restful api是否正常,判断它的响应值是否符合预期标准,需要用到断言知识。在soapUI里断言使用的Groovy语言。在项目中测试起来非常简单,测试过程如下。

1,准备测试数据

以下是准备的测试数据,它是一个JSON格式的数据列表。在resources节点中,它包含3个用户消息子节点。

{
"total": ,
"resources": [
{
"username": "test03-SD",
"created": "",
"uuid": "8f6cae8a24ab4d0887dd5907430075e7",
"contractNumber": ""
},
{
"username": "test02",
"created": "",
"name": "8bbf9fded675472aa852cf1940bc8234",
"contractNumber": ""
},
{
"username": "test01",
"created": "",
"name": "156b396f9b354467b5d1d1a1014b2d10"
}
],
"time": "2017年06月13日 10时25分07秒",
"pageNum":
}

2 添加断言

在HTTP Request里添加断言,如下图所示。

然后在弹出的Add Assertion窗口,选择Script项。

3 判断total属性的值

使用Script Assertion 测试JSON 格式的列表,在Script Assertion 窗口中写入如下代码:

def booksRoot = net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);
def total = booksRoot.get("total"); assert total ==

返回结果如下:

可以看到断言中total对应的值与测试值是一样的,如果故意写错,会怎么样呢?错误的断言如下:

def booksRoot = net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);
def total = booksRoot.get("total"); assert total ==

返回结果如下:

可以看到soapUI提示断言中total的判断是错误的,应该为3。

4 判断resources节点的长度

使用的断言脚本如下:

def root = net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);
def resources = root.get("resources"); assert resources.size() ==

5 判断resource第一个节点的username属性为 test03-SD

def root = net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);
def resources = root.get("resources"); assert resources[].get('username') == 'test03-SD'

二 例子

1,测试带参数的restful api

请求地址:

http://127.0.0.1:8083/auth/api/v2/user/userList?param={"user_userType":"1","startpage":"1","pagesize":"10","morgId":"e1339799-628e-11e6-9e1b-e0db55cd9154"}

请求方法: get

返回json格式数据:

[
{
"uuid": "053c951668a04144addc3336fc3967ad",
"created": ,
"username": "吉林域管理员",
"password": null,
"firstname": "吉林",
"lastname": null,
"email": "123@qq.com",
"state": "enabled",
"apiKey": null,
"secretKey": null,
"salt": "c271b448fe2bf0dacadc7680a85116bc",
"userType": "",
"tenantId": null,
"sex": "",
"location": null,
"contractNumber": null,
"qq": null,
"photoPath": null,
"incorrectLoginAttempts": ,
"roleList": null,
"tenantName": null,
"morgId": "9ea8e621-628e-11e6-9e1b-e0db55cd9154",
"morgName": "吉林分公司",
"userMorgUuid": null,
"uorgName": null,
"uorgPath": null,
"projectName": null,
"morgPath": "//吉林分公司",
"roleUuid": null,
"userIds": null
},
{
"uuid": "088d6cf6a9c345b2b7191fe9a8366fcb",
"created": ,
"username": "湖北域管理员2345",
"password": null,
"firstname": "",
"lastname": null,
"email": "1@1.cn",
"state": "enabled",
"apiKey": null,
"secretKey": null,
"salt": "a41cd19102835984efba2f03af18b619",
"userType": "",
"tenantId": null,
"sex": "",
"location": null,
"contractNumber": null,
"qq": null,
"photoPath": null,
"incorrectLoginAttempts": ,
"roleList": null,
"tenantName": null,
"morgId": "9ebbe3c1-628e-11e6-9e1b-e0db55cd9154",
"morgName": "湖北分公司",
"userMorgUuid": null,
"uorgName": null,
"uorgPath": null,
"projectName": null,
"morgPath": "//湖北分公司",
"roleUuid": null,
"userIds": null
}
]

soapUI中Http Requst配置,添加请求参数。

测试断言:

def root = net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);  
log.info( root.size() )
assert root.size() ==

2,测试带参数的restful api

请求地址:

http://127.0.0.1:8083/auth/api/v2/role/general/morg

请求方法: post

请求数据:

{
"uuid": "f38d750764104239a395b882e2818b6d4",
"created": ,
"removed": null,
"roleName": "soapui111",
"description": "测试岗位",
"sourceId": null,
"roleType": "",
"adminType": null
}

注意: 这个JSON请求数据中的uuid值必须保证每次发送请求都是唯一的,因为这个uuid代表插入数据数据的主键,必须保证是唯一的。

soapUI HttpRequest设置

断言脚本:

httpResponseHeader = messageExchange.responseHeaders
contentType = httpResponseHeader["Content-Type"]
log.info("Content-Type: => " + contentType)
assert contentType.get() == "application/json","Content Type is not an image"
log.info(  httpResponseHeader["#status#"] )  

使用场景:

适用于简单的restful请求,如果多个restful请求有关联关系,比如第一个restful请求测试添加一条数据记录,返回值有uuid,第二个restful测试删除依赖这个uuid,做删除数据测试。在这种复杂场景下,就不适用于soapUI 了。

参考资料:

https://www.soapui.org/functional-testing/validating-messages/using-script-assertions.html

https://wenku.baidu.com/view/40b3598e680203d8ce2f245e.html

http://blog.csdn.net/liuchangxin1982/article/details/50561104

SoapUI 学习总结-02 断言的更多相关文章

  1. soapUI学习文档(转载)

    soapUI 学习文档不是前言的前言记得一个搞开发的同事突然跑来叫能不能做个WebService 性能测试,当时我就凌乱了,不淡定啊,因为我是做测试的,以前连WebService 是什么不知道,毕竟咱 ...

  2. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  3. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  4. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  5. [eShopOnContainers 学习系列] - 02 - vs 2017 开发环境配置

    [eShopOnContainers 学习系列] - 02 - vs 2017 开发环境配置 https://github.com/dotnet-architecture/eShopOnContain ...

  6. SaToken学习笔记-02

    SaToken学习笔记-02 如果排版有问题,请点击:传送门 常用的登录有关的方法 - StpUtil.logout() 作用为:当前会话注销登录 调用此方法,其实做了哪些操作呢,我们来一起看一下源码 ...

  7. 一起学习PHP中断言函数的使用

    原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数.也就是说,我们在代码中进行简单的测试的时候是 ...

  8. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  9. soapUI学习笔记---断言的小使用

    转自:http://www.cnblogs.com/duimianyoushan/p/4274791.html 以下示例在soapUI 4.5中进行.刚开始学soapUI的使用,记录下以免忘记 1.创 ...

随机推荐

  1. Linux基础知识第一讲,基本目录结构与基本命令

    目录 一丶Window 与 Linux的目录结构 1.Windows 与 Linux目录简介 2.Linux目录主要作用 3.任务栏与菜单栏,与关闭按钮 二丶Linux终端与常见命令学习 1.终端中的 ...

  2. css加载会造成阻塞吗

    本文由云+社区发表 作者:嘿嘿嘿 可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我就来对css加载对DOM树的解析和渲染的影响做一个测试. 为 ...

  3. 用StyleCop规范团队代码

    前言 编码风格,每个人都是有不同的特点,风格各异,而且一个人在不同的时期,编码风格的差异也可能是非常大的,好比学生时代,刚工作的时候,工作一段时间后等. 在一个团队中,或一个项目中,如果出现了N种风格 ...

  4. 嵌入式系统及应用课程设计——基于STM32的温湿度监测系统

    大三上学期期末总结,嗯,没错上学期,写在新学期开始,hhh. 上学期学了一门嵌入式系统及应用的课程,期末的课程设计题目是基于STM32的温湿度监测系统. 记得刚开始做课程设计的时候,听说先设计画出原理 ...

  5. Docker中安装WordPress

    前言 虚拟化技术风靡一时,还不层在生产环境中实践.只能是闭门造车,自己玩一玩了,接触了一下docker最简单的命令,这才自己搭建一个wordpress玩一玩. 安装wordpress之前先把本机的do ...

  6. .NET CORE 使用Session报错:Session has not been configured for this application or request

    报错信息:Session has not been configured for this application or request 解决方案:在Startup.cs文件中的Configure方法 ...

  7. SD详解-销售过程

    http://www.sapzh.com/html/Financial/SD/3113.html 7  销售过程 7.1销售执行 目的 作用与目的描述           步骤 操作过程/步骤描述 备 ...

  8. java程序员学C#

    因为工作需要,我要学习C#,其实我觉得不错,我喜欢了解更多的语言,因为这对我今后的发展很有帮助,毕竟技多不压身,下面是我今天学习后总结C#的基本语法: 我曾经学过C,而且又是java程序员,所以对我来 ...

  9. 你真的了解PeopleSoft中的function和method方法嘛

    谈下function和method在内嵌与外部传参的区别 1.内嵌函数(Internal Functions) 看下现在输出&x的话会返回什么值? 2.内嵌函数(Internal Functi ...

  10. openlayers3 实现点选的几种方式

    WebGIS开发中,点击查询是最常用的一种查询方式,在ArcGIS api 中,这种查询叫IdentifyTask,主要作用是前台提交参数,交ArcServer查询分析返回.本文从开源框架的角度,从前 ...