这两天要对RESTful接口做测试,老大让我用SoapUI试试,折腾了两三天,测试项目基本成型了,在这里记录一下经验。

版本:SoapUI 5.0.0

1、添加测试用例

点击File->New Rest Project,填入要测试的URI,确定进入编辑界面;
调整请求方式,添加请求参数,设置参数风格,这里要说一下:
style有五种,
QUERY是默认常用;
TEMPLATE是在路径中传参,形如:/api/test/{userId};
HEADER是添加在请求头中;
MATRIX和PLAIN我目前还没用到,等用到再跟新吧。
另外,如果是POST请求,会看到MediaType的选项,默认application/json,若要在请求体中添加json格式字符串,直接写在下面的文本栏中即可;若只是正常POST传参,需要勾选右边唯一的复选按钮(Post QueryStr...),其提示为:Controls if Query-Parameters should bu put in message body.
(如果请求参数要添加在请求体中就勾选)。
点击绿色小三角箭头,执行请求,会在右边显示响应结果,有XML,JSON,HTML三种展示类型,RAW可以查看响应头信息。

2、添加某个请求到TestCase

仅仅添加一个测试用例还算不上集成测试,添加成功后,点击绿色小三角右边的+按钮,将这个测试用例添加到一个现有的TestCase中(如果没有会创建一个)。
配置好各个域的名字后,可以看到TestSuite->TestCase->TestSteps->Test-Request。
我的需求是模拟用户登录,获取token和用户id,并用于后续的多个接口测试中。虽然需求比较简单,但基本可以涵盖SoapUI 各个测试案例间各种参数的共享与传递。这个也是我在初学SoapUI过程中的重点部分。
在TestSteps下,右键某一个TestRequest,选中InsertStep,可以看到一列选项,我选我用到的几个说明一下:
GrovyScript:用途不限于操作该TestCase中的Custom Properties(左键TestCase,在下方会看到)、操作某个自定义哥Properties、添加assert、输出log...
示例代码:

//获取当前TestCase
def testCase = messageExchange.modelItem.testStep.testCase;
//设置TestCase中的Custom Properties
testCase.setPropertyValue("key_testCase",  “value_testCase”);
//打印这个key的value
log.info(" key_testCase  --  " + testCase.getPropertyValue("key_testCase"));

//获取名称为Properties_1的Properties实例
def pro = testCase.getTestStepByName("Properties_1");
//设置这个实例中的key/value
pro.setPropertyValue("key_properties_1", “value_properties_1”);
//打印这个key的value
log.info(" key_properties_1  --  " + pro.getPropertyValue("key_properties_1"));

Properties:可以理解为当前TestStep范围内的局部变量集,在其中可以手动配置一些参数,也可以通过某个TestRequest中的Groovy脚本(对,groovy脚本也可以添加在任意一个TestRequest中) 来获取到这个Properties,然后通过编码来配置参数(见上述代码)。
Property Transfer : 当然是起“传输”的作用了,将某个源中的键值对传输到目标请求中。双击打开,添加一个,配置Source和Target。
添加、配置好多个测试案例后,双击TestSteps,点击绿色小三角,测试跑起来!

3、Script Assertion 验证响应结果

前面提到过,每一个TestRequest中都可以添加,其实就是写GroovyScript啦,在这里可以拿到响应的各种内容,写个assert来验证是否是期望的结果。
示例代码:

//比如测试用户正常登录后,要拿到token,作一个简单的验证(本响应体中内容是json格式)
//获取根节点
def root = net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);
def access_token = root.get("access_token");
log.info((access_token != null && access_token != ""?"success!":"failure!") +"    ---  msg : user loginning...");
assert access_token != null && access_token != " ";

我的工作目前基本就用到这些,这个流程在SoapUI中也可以有别的方法来实现,仅仅是SoapUI集成测试中的冰山一脚~


guodage
206 声望9 粉丝

永远不要害怕失败。


引用和评论

0 条评论