SoapUI 学习总结-02 断言

时间:2023-03-09 05:44:28
SoapUI 学习总结-02 断言

一 断言

测试指定的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里添加断言,如下图所示。

SoapUI 学习总结-02 断言

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

SoapUI 学习总结-02 断言

3 判断total属性的值

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

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

返回结果如下:

SoapUI 学习总结-02 断言

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

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

返回结果如下:

SoapUI 学习总结-02 断言

可以看到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配置,添加请求参数。

SoapUI 学习总结-02 断言

测试断言:

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设置

SoapUI 学习总结-02 断言

断言脚本:

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.****.net/liuchangxin1982/article/details/50561104