Skip to content

目录

PetClinic 宠物主人搜索接口

请求方式:GET(HTTPS)

请求地址: https://spring-petclinic-rest.k8s.hogwarts.ceshiren.com/petclinic/api/owners?lastName=LASTNAME

请求参数说明

参数 必须 说明
lastName 输入宠物主人 Last name,长度不超过 1~80 个字母

权限说明

暂不进行权限控制

返回结果

[
    {
        "address": "110 W. Liberty St.",
        "city": "Madison",
        "firstName": "George",
        "id": 1,
        "lastName": "Franklin",
        "pets": [
            {
                "birthDate": "2022-10-31",
                "id": 1,
                "name": "Leo",
                "ownerId": 1,
                "type": {
                    "id": 1,
                    "name": "cat"
                },
                "visits": [
                    {
                        "date": "2022-10-31",
                        "description": "rabies shot",
                        "id": 1,
                        "petId": 1
                    }
                ]
            }
        ],
        "telephone": "6085551023"
    }
]

返回参数说明

参数 说明
address 宠物主人的地址
city 宠物主人的城市
firstName 宠物主人的名字
id 宠物主人的id
lastName 宠物主人的姓氏
pets 宠物的信息
pets.birthDate 宠物的生日
pets.id 宠物的id
pets.name 宠物的名字
pets.ownerId 宠物主人的id
pets.type 宠物的类型
pets.type.id 宠物的类型的id
pets.type.name 宠物的类型的名称
pets.visits 宠物访问记录
pets.visits.date 宠物访问记录的日期
pets.visits.description 宠物访问记录的描述信息
pets.visits.id 宠物访问记录的id
pets.visits.petId 宠物访问记录访问的宠物id
telephone 宠物主人的手机号码
## 应用场景说明

接口测试是一项收益很高的测试方向,相较于 UI 测试,它有着更便捷,应用场景更多,制造数据方便的优点。并且针对不同的语言,接口测试也有很多工具和框架可以使用。

接口测试常用的场景有以下三个:

  • 被测业务由多个 API 协作调用完成:很多情况下,前端的一个操作涉及到的都不单只是一个接口,其中可能包含后端的多个接口逻辑,为了测试前端的稳定性,或者进行性能测试,就必须从模拟后端调用 API 的情况。例如:根据前一个接口的返回情况,判断调用的下个接口,以及将上一个接口的返回值信息传递到下个接口中等。
  • 异常场景的校验:在有接口详细信息的前提下,就可以根据接口本身来制造异常场景,例如字段的是否必填,字段长度,以及空值和特殊值的校验。
  • 异步 API 的测试:异步 API 是指,该接口调用后立即返回,但实际任务没有执行,需要后续调用查询或其他的接口才能获取成功调用的结果。异步 API 的测试重点在测试异步调用是否成功,以及异步调用的业务逻辑是够正确。

环境准备

接口调试工具

接口的手工测试经常用到的一个工具是 Postman,这是一款在业界很受欢迎的工具。起初只是一个插件,后来独立出来作为一个专注于调试接口的软件。界面友好、功能丰富是 Postman 最大的优点,里边集成了几乎做接口测试会用到的全部功能,并且对于跨语言的需求也满足。Postman 是开发人员日常调试接口,测试人员完成接口测试都很方便的一款工具。

下载方式也很简单,进入 Postman 的官网,选择对应的系统版本下载安装即可。

官网地址:https://www.postman.com/downloads/

代理工具

如果要测试的接口没有提供详细的接口文档,这时候需要借助代理工具抓包来获取接口信息。

Web 抓包可以借助 chrome 的开发者工具,在 Network 面板即能看到详细的接口信息

其他产品需要借助于代理工具,比较常用的有 Charles 和 Fiddler。其中 Charles 是一款跨平台的代理工具,MacOS、Windows 和 Linux 系统下都可以使用。Charles 支持 HTTP、HTTPS 的代理抓包,并且还提供了修改请求,重发请求、模拟弱网、设置断点,解密 HTTPS 的功能。

使用时进入官网下载即可:

下载 Charles :

官网地址: https://www.charlesproxy.com/

接口测试需求理解

根据业务逻辑整理出流程所包含的接口,查看接口文档提供的信息,请求类型为 GET 请求,请求参数为 lastName,有长度限制。

根据用例设计的思路,需要验证字段是否必填,长度限制,内容限制,等正向以及异常的测试场景。

接口功能测试用例设计

接口测试用例仍然采用和功能测试一样的表格形式来设计,针对搜索功能接口来设计用例。主要包含了冒烟、空值、特殊字符、长度限定。

表头设计如下:

  • 用例编号
  • 模块
  • 测试点
  • 前置条件
  • 接口地址(URL)
  • 请求方法
  • 请求参数
  • 预期结果
  • 实际结果

分别验证接口的正向功能,以及无参,模糊搜索,超长字段,特殊字符字段等校验,测试用例如下所示:

用例编号 模块 测试点 前置条件 URL 请求方法 请求参数 预期结果 实际结果
c_001 获取宠物主人接口验证 【冒烟】存在的姓氏可以正确获取宠物主人信息 http://k8s03.hogwarts.ceshiren.com:39966/petclinic/api/owners get lastName=++++ 接口功能正常,正确获取到宠物主人的信息
[
{
"firstName": "+++",
"lastName": "Green",
"address": "110 W. Liberty St.",
"city": "Madison",
"telephone": "6085551023",
"id": 155,
"pets": []
}
]

具体的测试用例信息请参考:

点击下载测试用例

接口测试用例创建

在 Postman 中,创建测试集,填写接口信息,通过调参和编写断言结果来测试搜索接口。

测试集创建

接口测试用例创建

根据接口测试用例 - 选择请求方法为 GET 请求 - URL 为:https://spring-petclinic-rest.k8s.hogwarts.ceshiren.com/petclinic/api/owners - 添加请求参数:lastName=Green

添加断言:

在 Postman 中编写断言信息,发送请求,得到断言结果:

// 验证响应状态码
pm.test("响应状态码为 200", function () {
    pm.response.to.have.status(200);
});
// 验证响应信息是否包含某字段
pm.test("响应体中包含预期的字符串", function () {
    pm.expect(pm.response.text()).to.include("Green");
});
// 验证响应头信息中的 Content-Type 是否存在
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

点击 Send 按钮运行接口,查看结果

保存接口到测试集

选择新创建好的测试集,点击 SAVE 按钮

运行测试集

把请求参数定义为测试集变量

接口中的请求参数替换为变量

准备 json 格式测试数据

[
    {
        "lastName": "Green",
        "expect": "Green"
    },
    {
        "lastName": "",
        "expect": ""
    },
    {
        "lastName": "a",
        "expect": "a"
    },
    {
        "lastName": "b",
        "expect": "b"
    },
    {
        "lastName": "A",
        "expect": "A"
    },
    {
        "lastName": "hogwarts",
        "expect": "hogwarts"
    },
    {
        "lastName": "hogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwarts",
        "expect": "hogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwartshogwarts"
    },
    {
        "lastName": "涨",
        "expect": "涨"
    },
    {
        "lastName": "123",
        "expect": "123"
    },
    {
        "lastName": "###",
        "expect": "###"
    }
]

接口中的断言替换为测试数据中的值

// 验证响应信息是否包含某字段
pm.test("响应体中包含预期的字符串", function () {
    pm.expect(pm.response.text()).to.include(data.expect);
});

进入测试集运行页面

选择测试数据文件,延迟时间,保存响应

接口测试报告

点击 Run 按钮运行测试集,查看测试结果

点击 View Summary 按钮,查看测试报告