写点什么

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

评论

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

week 3学习总结

Geek_2e7dd7

第三周作业

戴维斯

极客大学架构师训练营

week3 作业& 手撕单例模式

不在调上

【架构师训练营 - 作业 -3】组合模式

小动物

极客大学架构师训练营 作业 第三周

代码重构--架构师必备技能

极客李

奈学教育《百万架构师》课程大纲

奈学教育

极客大学架构师训练营

中心化是人性,去中心化是技术

CECBC

区块链技术 去中心化 超级节点

【week03】作业1

chengjing

瓷都景德镇牵手蚂蚁区块链,重塑非遗陶瓷产业

CECBC

区块链技术 溯源 防篡改 景德镇 非遗

架构师训练营Week03

Frank Zeng

元年云“宽能力”拓宽成长型企业数字化升级之路

人称T客

单例和组合模式

陈皮

week3 学习总结

不在调上

极客大学架构师训练营

Tweak原理与越狱防护

冯选刚

大白话Java多线程,小白都能看的懂的哦

root

Java 多线程 线程安全 创建线程方式 什么是多线程

Week 03- 作业一:设计模式

dean

极客大学架构师训练营

用于可视化软件体系结构的C4模型(转载)

清风徐徐

有益思考一则:概率与格局

石君

思考 思维方式 格局

【架构师训练营 - 周总结 -3】设计模式、重构

小动物

总结 极客大学架构师训练营 第三周

【week03】总结

chengjing

架构师训练营第三周课后作业

竹森先生

极客大学架构师训练营

奈学教育《百万架构师》课程大纲

古月木易

极客大学架构师训练营

第三周作业

andy

第三周总结

andy

万恶的NPE差点让我半个月工资没了

root

Java 程序员 互联网 NPE 空指针

代码重构练习三

极客李

架构师训练营week3学习总结

Frank Zeng

week3

Geek_2e7dd7

当教育遇上区块链,会擦出什么样的火花?

CECBC

区块链技术 去中心化 防篡改 教育资源共享

架构师训练营第 3 周 _ 学习总结

方舟勇士

课程总结

从单机事务到分布式事务

ElvinYang

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