写点什么

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:331355

评论

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

InPlant SCADA笔记 工程管理的工程属性与全局设置

万里无云万里天

工厂运维 InPlant SCADA

写报告 进图谱 做演讲,可信数据库大会上亚信科技AntDB可太忙了

亚信AntDB数据库

一文剖析高可用向量数据库的本质

Zilliz

人工智能 大数据 AI Zilliz 向量数据库

管理能力达到国际认可水平 智谱获得国内首批ISO/IEC 42001:2023人工智能管理体系认证证书

技术研究院

AWS 弹性伸缩特性介绍

AutoMQ

云计算 kafka 云原生 AWS

攻坚克难岁月长,自主腾飞世界强——回顾近代中国数据库的发展与飞跃

Geek_b7ce72

InPlant SCADA笔记 查看工程的数据库与历史趋势的信息

万里无云万里天

工厂运维 InPlant SCADA

澳鹏Appen入选大模型产业链基础层图谱及案例研究

澳鹏Appen

大模型训练 大模型 百模大战

汽车辐射大?技术来救它:整车辐射抗扰发射天线仿真建模及性能预测

Altair RapidMiner

人工智能 汽车 仿真 altair 辐射

性能提升20%,字节跳动HTTPDNS从中心下沉到边缘

火山引擎边缘云

边缘计算 HTTP DNS #DNS 边缘计算平台

用Python来DIY一个AI面部情绪识别API的简单方案

幂简集成

API

InPlant SCADA笔记 报警管理功能

万里无云万里天

工厂运维 InPlant SCADA

从焦虑症到AI「网红」:这名程序员是如何让AI「助他一臂之力」

新程序员编辑部

ChatGPT Prompt

天工一刻 | 一文看懂3D大模型

新消费日报

InPlant SCADA笔记 io 查看数据库管理与IO驱动

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 调度任务功能

万里无云万里天

工厂运维 InPlant SCADA

InPlant SCADA笔记 二次确认

万里无云万里天

工厂运维 InPlant SCADA

HAProxy 可观测性最佳实践

观测云

HAProxy

如何借助逻辑数据编织平台实现“数据优先堆栈( DFS )”

Aloudata

数据仓库 数据虚拟化 数据编织

如数据血缘探究数据管理的“自治理”

Aloudata

Data 数据管理 数据血缘 Data Fabric

InPlant SCADA笔记 背景模版

万里无云万里天

工厂运维 InPlant SCADA

从0到100:旅拍小程序开发笔记(上)

CC同学

InPlant SCADA笔记 查看工程的网络架构

万里无云万里天

工厂运维 InPlant SCADA

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