引言:在“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.1    示例应用接口

华为云DevCloud对外提供了开放API,供第三方平台进行集成。本接口测试将以华为云DevCloud项目管理服务相关API示例。华为云DevCloud的API列表请参考https://support.huaweicloud.com/devg-devcloud/devcloud_api_1000.html,接口调用方法请参考https://support.huaweicloud.com/devg-devcloud/devcloud_api_0001.html,获取Token认证的方式请参考https://support.huaweicloud.com/devg-devcloud/zh-cn_topic_0107684989.html

1.2    创建项目

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

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

2      API测试

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

2.1    创建关键字getAuthToken

调用华为云DevCloud的开放API首先需要获取授权令牌(token),详细情况请参考“获取用户token”( https://support.huaweicloud.com/api-iam/zh-cn_topic_0057845583.html)。为了测试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。

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

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

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

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

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

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

2.2    测试项目管理相关API

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

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/${project_uuid}/issues/query”;请求头名称为“X-Auth-Token”,值为“${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/${project_uuid}”;请求头名称为“X-Auth-Token”,值为“${X-Auth-Token}”,此值为关键字getAuthToken的响应提取中的出参名称“X-Auth-Token”。

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

2.3    测试情况分析

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

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

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


华为云DevCloud作为一站式云端DevOps平台,集成华为近30年研发实践和前沿理念,面向开发者提供研发工具服务,让软件开发简单高效。现支持5人以下额度范围内,可以免费使用,并且可以预约免费的产品演示和技术交流,详情查看华为云官网

作者:伦语春秋

DevOps on DevCloud|如何实现应用接口的混合驱动测试的更多相关文章

  1. DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】

    [摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...

  2. C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试

    在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...

  3. postman-根据接口文档进行测试

    根据接口文档来测试 1.get请求

  4. 零成本实现接口自动化测试 – Java+TestNG 测试Restful service

    接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...

  5. 利用FPGA实现PCI总线接口及Windows驱动实现

    利用FPGA实现PCI总线接口及Windows驱动实现 关于PCI总线协议,资料网上.书本都是.这里我们仅仅对重点对利用FPGA实现PCI总线接口问题进行简单分析.下图是PCI总线接口信号: 配置空间 ...

  6. Bag类的接口的实现与测试(课上测试补做)

    Bag类的接口的实现与测试(课上测试补做) 截图 由于截图有一定的的限制就没有吧所有的代码截进去,后面有代码. 代码 package ClassTest; import java.util.Objec ...

  7. 接口(API)测试理念

    什么是接口测试 接口测试就是针对软件对外提供服务的接口的输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能与接口描述文档的一致性: 测试的重点是检查数据交互.传递.和控制管理过程以及系统间的相互 ...

  8. (转)接口自动化测试 – Java+TestNG 测试 Restful Web Service

    本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 T ...

  9. 使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

    最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微 ...

随机推荐

  1. CSPS_103

    被sdfz踩爆了! %%%kai586123 %%%Gekoo %%%sdfz_yrt T1 我以为是水题!一直在肝! 而且为什么每次我的考场暴力都是考后才调出来啊!! 先记录一下正解的大神做法: 按 ...

  2. jq实现简单的二级联动下拉框

    1 效果图 2 html <!DOCTYPE html> <html lang="en"> <head>     <meta charse ...

  3. Java-100天知识进阶-基本类型-知识铺(一)

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒你记忆深处的知识点. Java的两大数据类型: 一.内置数据类型 二.引用数据类型 内置数据类型 Java语 ...

  4. 一文带你深入了解 Redis 的持久化方式及其原理

    Redis 提供了两种持久化方式,一种是基于快照形式的 RDB,另一种是基于日志形式的 AOF,每种方式都有自己的优缺点,本文将介绍 Redis 这两种持久化方式,希望阅读本文后你对 Redis 的这 ...

  5. spark和 mapreduce的比较

    网上查阅一些资料,收集整理如下: 1. 通用性 spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块 ...

  6. spark-Worker内部工作流程

  7. vim可视化模式

    进入:v 移动光标选中 c剪切.y复制(自动退出v模式,进入插入模式) p粘贴

  8. startup启动不起来关于监听的问题

    问题描述:要在sqlplus中启动到startup状态,但是提示我没有监听,本来以为启动一下就可以,但是connecting to一直卡半天,stop都停止不了 1.发现监听有问题,前去更改 SQL& ...

  9. SpringMvc demo示例及源码详细分析

    三层架构介绍 我们的开发架构一般都是基于两种形式,一种C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器.在JavaEE开发中,几乎全部都是基于B/S架构的开发.那么在B/S架 ...

  10. 2019-11-26:密码学基础知识,csrf防御

    信息安全的基础是数学--->密码算法--->安全协议(ssl VPN)-->应用(证书 PKI)密码学入门密码编码学:研究加解密算法的学科密码分析学:研究破译密码算法的学科 加解密分 ...