写点什么

DevOps on DevCloud|如何实现应用接口的混合驱动测试?

  • 2019-10-15
  • 本文字数:4016 字

    阅读完需:约 13 分钟

DevOps on DevCloud|如何实现应用接口的混合驱动测试?

在“DevOps 能力之屋(Capabilities House of DevOps)”中,华为云 DevCloud 提出(工程方法+最佳实践+生态)×工具平台=DevOps 能力。华为云 DevCloud 将推出“DevOps on DevCloud”系列,针对 DevOps 领域场景,阐述该场景在华为云 DevCloud 上的实施方法与实践。


目前越来越多不同行业的企业开启了数字化转型,以提升业务敏捷性与开放合作能力,为客户或合作伙伴提供更好的体验。微服务架构(Microservices Architecture)和敏捷与 DevOps 成为诸多企业在数字化转型中对于应用架构和工程方法的不二选择。随着微服务架构的广泛流程,RESTful 风格 API 也成为大势所趋。因而,对 API 进行持续测试成为 DevOps 的关注点之一。随着微服务数量规模增加、DTAP 环境配置变化、软件交付周期缩短,持续测试自动化成为更为亟需解决的问题。毫不夸张地讲,没有测试自动化,微服务架构的实施对于企业更会成为一场灾难。


一谈到测试自动化,大多数团队通常将其视为纯粹的技术挑战,例如选择测试框架、确定测试工具等等。实际上,测试自动化成功的核心原则之一是测试设计(Test Design)。团队应该从一开始在测试设计上进行足够多的投入。测试设计过程始于分析测试需求。为了提升测试覆盖率,团队可以使用“业务流(Business Flow)”方法来分析需求。团队需要在业务层级(Business Level)与交互层级(Interaction Level)上对操作(Action)或数据(Data)进行抽象。因此,业界提出了关键字驱动测试(KDT,Keyword Driven Testing)或者数据驱动测试(DDT,Data Driven Testing)等方法来进行测试设计,提升测试自动化效率。


对于 KDT 和 DDT,从其定义来讲,存在一定的区别,即什么因素对测试结果起决定性作用就是什么驱动测试。当然 KDT 与 DDT 也有联系。例如:以登录为例,首先登录由不同的 Action 组成(按钮点击、文本框输入等),其次将登录的用户名、密码作为变化的数据(参数化),可以只关注数据。因此,为提升复用性,在实际项目中,一般会采用混合驱动测试的方法,即融合关键字驱动测试与数据驱动测试。总而言之,测试设计需要对操作与数据进行抽象、分组等。


华为云 DevCloud 云测服务提供了接口测试功能,支持 HTTP 和 HTTPS 协议,并可通过参数化、自定义环境、关键字等特性支持混合驱动测试,同时将将接口测试纳入流水线进行管理,支持产品团队践行 DevOps 理念,为微服务架构的 API 保驾护航。

准备工作

1.1 示例应用接口

华为云 DevCloud 对外提供了开放 API,供第三方平台进行集成。本接口测试将以华为云 DevCloud 项目管理服务相关 API 示例。华为云 DevCloud 的 API 列表请参考,接口调用方法请参考,获取 Token 认证的方式请参考

1.2 创建项目

开发者可以访问华为云 DevCloud(https://www.huaweicloud.com/devcloud/),登录后在首页新建项目,选择“空白项目”的Scrum或者看板之一,输入项目名称(例如:Prj4ApiHDT)即可创建项目。


在访问 Prj4ApiHDT 项目,并进入“测试”-“接口测试”后,就可以开展接口测试相关工作了。

API 测试

本次 API 测试将覆盖一个业务流(Business Flow):获取授权令牌->创建项目->查询项目当前工作项列表->在项目中新建工作项->查询项目当前工作项列表->删除项目。

2.1 创建关键字 getAuthToken

调用华为云 DevCloud 的开放 API 首先需要获取授权令牌(token),详细情况请参考“获取用户token”。为了测试 API 的所有用例方便获取 token,将创建关键字 getAuthToken。


在进入“接口测试”页面后,点击“新建”,在“新建用例”页面输入名称“manageProject”等信息,并点击“确定”,用例创建成功并进入编辑用例脚本页面。


在用例“manageProject”的编辑用例脚本页面,进入“测试步骤”,新建“URL 请求”,名称设置为“getAuthToken”,并输入以下信息:


请求:如图 1 所示,请求信息的方法选为“POST”,URL 填为“iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens”;请求体选择“JSON”,并填写如下信息:


{  "auth": {    "identity": {      "methods": [        "password"      ],      "password": {        "user": {          "name": "$${userName}",          "password": "$${password}",          "domain": {            "name": "$${domainName}"          }        }      }    },    "scope": {      "domain": {        "name": "$${domainName}"      }    }  }}
复制代码


检查点:来源为“响应码”,比较符为“等于(数字)”,目标值为“201”。参见图 2。


响应提取:出参为“X-Auth-Token”,来源为“响应头”,属性为“X-Subject-Token”。参见图 3。



图 1 填写请求信息



图 2 填写检查点信息



图 3 填写响应提取信息


在 JSON 格式的请求中,大家会发现



{userName}、$${password}等 3 个参数。这些均为项目管理的环境参数,可以用于整个项目。如图 4 所示,创建了 alpha、Prod 等 2 个环境,在 Prod 环境中增加了 3 个参数,如下:


  • domainName:可以填写为账号名;

  • userNanme:可以填写 IAM 用户用户名;

  • password:可以填写为密码,并设置为敏感参数。



图 4 管理环境参数


在用例“manageProject”的编辑用例脚本页面,点击“存为关键字”图标,输入关键字名称“getAuthToken”,并选择测试步骤中的“getAuthToken”。如下图所示:



图 5 将测试步骤设置为关键字


进入“测试”-“接口测试”页面,我们将在测试用例的列表中看到刚才创建的关键字。

2.2 测试项目管理相关 API

在用例“manageProject”的编辑用例脚本页面,可以在“测试步骤”中,将 getAuthToken 步骤删除,然后在“前置步骤”中,添加关键字 getAuthToken。



图 6 使用关键字

2.2.1 “创建项目”步骤

在用例“manageProject”的编辑用例脚本页面的“测试步骤”中,新建“URL 请求”, 名称设置为“createProject”,并输入以下信息:


请求:请求信息的方法选为“POST”,URL 填为“api.devcloud.huaweicloud.com/pcedge/v1/projects”;请求头名称为“X-Auth-Token”,值为“${X-Auth-Token}”,此值为关键字getAuthToken的响应提取中的出参名称“X-Auth-Token”。请求体选择“JSON”,并填写如下信息:


{


“name”: “demo1”,


“description”: “项目描述”,


“type”: “scrum”,


“homepage”: “”


}


检查点:【1】来源为“响应码”,比较符为“等于(数字)”,目标值为“200”。【2】来源为“响应体(JSON)”,属性为“status”,比较符为“等于(字符串、区分大小写)”,目标值为“success”。


响应提取:出参为“project_uuid”,来源为“响应体(JSON)”,属性为“result.project.project_uuid”。此参数将作为后续 API 接口的输入。

2.2.2 “查询工作项列表” 步骤

在用例“manageProject”的编辑用例脚本页面的“测试步骤”中,新建“URL 请求”, 名称设置为“queryWorkItemList”,并输入以下信息:


请求:请求信息的方法选为“POST”,URL 填为“api.devcloud.huaweicloud.com/pcedge/v1/projects/{X-Auth-Token}”,此值为关键字getAuthToken的响应提取中的出参名称“X-Auth-Token”。请求体选择“JSON”,并填写如下信息:


{  "page_num": "1",  "page_size": "15",  "query_type": "backlog",  "tracker_id": [    2,    3,    7  ]}
复制代码


检查点:来源为“响应码”,比较符为“等于(数字)”,目标值为“200”。

2.2.3 “创建工作项”步骤

在用例“manageProject”的编辑用例脚本页面的“测试步骤”中,新建“URL 请求”, 名称设置为“createWorkItem”,并输入以下信息:


请求:请求信息的方法选为“POST”,URL 填为“ api.devcloud.huaweicloud.com/mobile/v1/projects/${project_uuid}/issues ”; 请求头名称为“X-Auth-Token”,值为“${X-Auth-Token}”,此值为关键字 getAuthToken 的响应提取中的出参名称“X-Auth-Token”。请求体选择“JSON”,并填写如下信息:


{  "subject": "Item1",  "description": "工作项描述",  "type_id": 3,  "start_date": "1566809662",  "due_date": "1566896062",  "priority_id": 3,  "servity_id": 12,  "status_id": 1,  "expected_work_hours": 8}
复制代码


检查点:来源为“响应码”,比较符为“等于(数字)”,目标值为“200”。

2.2.4 “查询工作项列表” 步骤

在用例“manageProject”的编辑用例脚本页面的“测试步骤”中,在步骤“queryWorkItemList”上点击“复制”,并将新的步骤拖拽到 createWorkItem 后面。

2.2.5 测试步骤“删除项目”

在用例“manageProject”的编辑用例脚本页面的“测试步骤”中,新建“URL 请求”, 名称设置为“deleteProject”,并输入以下信息:


请求:请求信息的方法选为“DELETE”,URL 填为“api.devcloud.huaweicloud.com/pcedge/v1/projects/{X-Auth-Token}”,此值为关键字getAuthToken的响应提取中的出参名称“X-Auth-Token”。


检查点:来源为“响应码”,比较符为“等于(数字)”,目标值为“200”。

2.3 测试情况分析

假如测试用例正确创建,那么执行的正常结果应该为:成功创建项目;项目中工作项数量为 0;成功创建工作项;工作项数量为 1;成功删除项目。在此过程中如果出现失败的情况,可以查看测试用例 manageProject 的结果页面,进行分析。


当然,大家仔细观察测试步骤中有 2 步是“查询工作项列表”,可以用关键字来进行处理,供大家自行实现。


本文通过案例展示了华为云 DevCloud 的接口测试特性的关键能力以及使用。在实际项目中,测试场景与测试用例等将更为复杂,因此正如前文所述,产品团队应该投入精力进行测试设计,在此基础上进行测试自动化,实现持续测试。当然持续测试不可能一蹴而就,产品团队可以采用迭代的方式,持续重构优化。


2019-10-15 16:331325

评论

发布
暂无评论
发现更多内容

c++17使用多线程编程的时候在编译时要怎么处理

linux大本营

多线程 C++

当生成式AI照进医疗,医患关系将何去何从?

白洞计划

医疗

【Python实战】Python采集度贴吧排行榜

BROKEN

三周年连更

数说热点|米哈游新作《崩坏:星穹铁道》今日公测,能否再现原神奇迹?

MobTech袤博科技

如何使用 SCP 和 Rsync 在 Linux 中传输文件

wljslmz

Linux 三周年连更

一个有趣的图片加载效果

南城FE

CSS 前端 动画 图片

有奖征文丨【玩转Cloud Studio】第二季来啦!

CODING DevOps

Cloud Studio 云端IDE 在线编程 有奖征文 活动推荐

从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的

Zilliz

非结构化数据 Milvus 向量数据库

云BI产品瓴羊Quick BI,为企业数字化转型保驾护航

巷子

什么是Java 异常?如何处理异常?

Java架构历程

Java 三周年连更

百度与用友网络签署战略合作

百度开发者中心

智能制造 文心一言

读《分布式商业》有感

后台技术汇

分布式 三周年连更

spdk里是怎么运行nvmf-tgt的

linux大本营

spdk

用c语言写一个目录遍历程序

linux大本营

C语言 目录遍历

c++单例模式的所有面经

linux大本营

设计模式 单例模式 C++

KubeVela:一场向应用交付标准的“冲锋”

RRLL

阿里云 数据湖 云原生 KubeVela 应用交付

eBPF的发展演进---从石器时代到成为神(三)

统信软件

操作系统 Linux内核

什么是文件传输,介绍文件传输的发展进程

镭速

容量成本性能全都要有, Redis 容量版 PegaDB 设计与实践

百度开发者中心

云数据库 百度智能云

第五期(2022-2023)传统行业云原生技术落地调研报告——金融篇

York

容器 DevOps 微服务 云原生 金融

对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda

亚马逊云科技 (Amazon Web Services)

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

阿里巴巴云原生

阿里云 云原生 生态合作

电子签赛道驶向深水区,法大大以数智化引领创新

ToB行业头条

5.10版本linux内核的使用slub的kmem_cache_init函数解析

linux大本营

内存管理 Linux内核 slub slab

YashanDB V22.2重磅发布!七大亮点带你了解新特性

YashanDB

数据库

来字节跳动实习,有机会发Nature子刊

字节跳动技术范儿

人工智能训练数据集:基础与发展

数据堂

linux设置虚拟IP

linux大本营

Linux 网络 IP地址

使用tc+iptables对指定的socket进行限速

linux大本营

TCP socket 网络 iptables

《雄安新区2022年大数据研究报告》发布

百度开发者中心

智慧城市

DevOps on DevCloud|如何实现应用接口的混合驱动测试?_文化 & 方法_华为云容器服务团队_InfoQ精选文章