当前位置:   article > 正文

腾讯外包凭借HTTP API 自动化测试从手工到平台,涨薪13k_由于频繁的重复,许多起初在我们看来重要的事情逐渐变得毫无价值的感悟_腾讯出的 自动化

腾讯出的 自动化

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

在这个平台中,RobotFramework 主要用于后台执行 Robot 关键字脚本,而关键字脚本,是平台通过读取 YAML 文件生成,该文件是通过笛卡尔乘积产生的用例,工作原理如图所示:

(点击放大图像)

图 -3- 工作原理

那话说回来,YAML 干什么呢?为什么不是 XML 呢?

  • YAML 的可读性好
  • YAML 和脚本语言的交互性好
  • YAML 使用实现语言的数据类型
  • YAML 有一个一致的信息模型
  • YAML 易于实现

听起来 YAML 试图用一种比 XML 更敏捷的方式,来完成 XML 所完成的任务。下面通过一段实际例子说明配置生成的 YAML 代码段:

被测接口通过web 界面配置

主接口配置界面:

(点击放大图像)

图-4- 接口配置页面

设置API 参数:

(点击放大图像)

图 -5- 设置 API 参数

配置文件 byChannelsDaily.yaml(列举一个参数示例):

复制代码

- byChannelsDaily: #接口名称
method: get #与服务器交互的方法
format: json #API 数据格式
url: /reportdata/flux/byChannelsDaily #API 的 URL,与奇台配置文件里面的 host 变量组成整个 URL 的前半部分。
url_path:
url_params: #URL 参数部分,固定写法。
username: #API 的参数名。
required: true #该参数是否必须(true/false)。
value: chinacache #该参数的值。如此值是从另一个接口获取的,可在 from_api 设置,此处可不填。如果值是 Boolean,必须加双引号。
type: string #该参数值的类型。
len: 10 #该参数值的长度。
max: -100 #该参数值的最大值。-100 相当于忽略此参数
min: -100 #该参数值的最小值。-100 相当于忽略此参数
from_api: #如参数的值是从另一个接口、global.yaml 中获取的,请设置 from_api,如 global
jsonpath: #可通过 jsonpath 来指定取值范围,如 $.version[2:4]
range:
response: #期望结果
verification:
success: [] #success 是一个 list, 它的元素也是 list,success[0] = [ RF 关键字 ,验证字段,正则匹配]
failure: []
error_msg: [] #错误信息集合

测试报告:

(点击放大图像)

图-6-rf 测试报告

按照这个思路做下来,得到什么收益呢?

(点击放大图像)

说到这里,其实,真没有带来多少收益,思路对了,但是方向有偏差了,主要体现在:

  1. 使用了笛卡尔乘积来生成不同参数的测试用例,发现一堆的测试用例生成文件是 M 的单位,而且也给测试服务器带来性能问题,数量 4980 个中占 95% 的用例都是没有实际意义的,对服务器频繁请求造成压力;
    (点击放大图像)

图 -7- 庞大的测试用例文件

  1. 通过 WEB 配置将 YAML 文件转为 robot 可以识别的,这种做法坑太深、维护难,参数越多, 文件越臃肿,可读性差;
  2. 后来尝试将笛卡尔乘积换成全对偶组合算法,效果改进显著,无效用例数明显下降,有效用例数显著提升;

败了,就是败了,没什么好找借口,关键问题是:

  1. 有效的测试用例占比例很低,无效的占了大部分;
  2. 没有化繁为简,前端隐藏了配置,复杂的配置还是需要在后端处理;
  3. 没有实际测试参与动脑过程,测试人员不会穷举,会根据业务编写实际用例;
  4. 平台易用性很重要:需要测试人员直接在上面编写,合理的逻辑步骤,有利于引导测试参与;

重构:发现测试的价值

回到起点,测试要解决什么问题,为什么要做 API 自动化测试平台?做这个平台,不是为了满足老板的提倡全民自动化的口号,也不是为了浮夸的 KPI,更不是宣传自动化可以解决一切问题,发现所有 bug。叔本华说过一句话:由于频繁地重复,许多起初在我们看来重要的事情逐渐变得毫无价值。如果 API 测试仅仅依靠纯手工的执行,很快将会面临瓶颈,因为每一个功能几乎都不能是第一次提交测试后就测试通过的,所以就需要反复 bug 修复、验证,以及回归的过程。另外,很多的 API 测试工作手工做起来非常的繁琐,甚至不便,比如针对接口协议的验证、针对返回数据格式的验证,这些都依赖于测试自动化的开展。因此,真正的目的是解放测试人员重复的手工生产力,加速回归测试效率,同时让研发人员在开发过程及早参与测试(自测、冒烟测试),驱动编码质量的提升。

回顾以往,重新梳理头绪,更加清晰的展现:

(点击放大图像)

图 -8-HTTP API 自动化测试图解

  • HTTP API 传统手工测试
  • 重复请求参数基础校验、正确参数查询返回数据校验,测试工程师没有新的创造价值,不断重复工作,甚至可能压缩其中的测试环节,勉强交付;
  • HTTP API 自动化测试
  • 重复步骤(请求接口是否有效、参数校验可以作为冒烟测试,研发参与自测)用自动化解决,关键业务步骤数据对比人工参与和 schema 自动化校验;

最大的收益,重复步骤自动化后,不管是研发人员自测,还是执行功能回归测试,成本可以很快收回(前提是你这个项目周期长,构建频繁;如果仅仅是跑几个月的项目,真没那个必要凑热闹去自动化,当然有平台的另当别论),测试的关注点会落实到更加关键的业务环节去;

总体规划如下:

(点击放大图像)

图 -9-HTTP API 重构规划

  • 技术选型 由于原来的测试平台使用 Python 编写,为了保持风格一致,从界面录入到文件生成处理依然采用 Python、Django,去掉了全对偶组合算法,改为根据测试人员思维去产生用例;去掉了后台 RobotFramework 框架,采用 Python 的 HTTP 类库封装请求。
  • HTTP API 项目管理 Web 前台 使用 Python+Django+MySQL 进行开发,分为项目首页、项目配置、API 配置、全局配置四大部分

(点击放大图像)

图 -10- 管理 Web

项目首页

介绍:列出 API 规范、API 测试用例、定时任务数量,以及某段时间内的测试结果趋势图形。

(点击放大图像)

图 -11- 项目首页

  • 项目配置 重点介绍:全局变量、常用方法、验证器。

全局变量

设计思路:在 API 测试过程中,可以切换生产、测试环境进行对比校验,如果写两套测试用例是冗余,全局变量功能,是一种在执行测试用例时动态改变用例属性的方法。

作用范围:当前项目内

使用方法:{变量名}

能在以下测试用例属性中使用:URL、请求头、请求参数

(点击放大图像)

图 -12- 全局变量配置页

在 API 用例库的 URL 可以直接填写:{host}/reportdata/monitor/getChannelIDsByUserName;当运行测试用例的时候,可以选择不同的参数套件,后台代码执行会直接替换,这样子可以分别快速验证生产环境和测试环境的 API 接口执行结果的差异。

(点击放大图像)

图 -13- 用例执行页

常用方法

(点击放大图像)

图 -14- 常用方法列表页

√ 设计思路:常用方法是一个 Python 函数,对入参进行处理并且返回结果,例如:

gen_md5 作用是生成 MD5,对应代码直接填写:

复制代码

import hashlib
def gen_md5(raw_str):
m = hashlib.md5()
m.update(raw_str)
md5_str = m.hexdigest()
return md5_str

√ 应用场景:

在 API 请求中,有些参数例如 pass 需要加密处理,可以通过引入 [常用方法] 来解决。

在参数 pass 的值中直接填写:

复制代码

{{get_apipwd(“{123456}”,“ChinaCache”)}}

(点击放大图像)

图 -15- 接口配置页

验证器

(点击放大图像)

图-16- 验证器配置页

√ 设计思路

验证器是一个Python 函数,如果函数返回True,则测试通过;返回False,则测试失败。平台默认提供一个默认验证器。

默认验证器是验证期望结果与实际结果(response body)是否完全一致。如果结果不一致则判断为失败,默认验证器只适用于静态的响应结果对比。

自义定验证器,如果默认验证器不能满足某些特殊的测试需求,用户可以在“项目配置- 验证器”中添加自定义的验证器。

√ 应用场景:在API 测试的返回结果中,可以添加自定义验证器对数据进行校验,判断测试是否通过。

(点击放大图像)

图 -17- 测试用例验证展示页

  • API 配置 重点介绍:通用响应配置、API 依赖库、API 用例库、定时任务、测试报告

通用响应配置

(点击放大图像)

图 -18- 通用响应配置列表页

√ 设计思路

在合理的 API 设计中,存在通用的错误响应码,[用户名错误,返回期望响应内容],如果所有 API 的响应结果中都需要重复写是相当繁琐的,作为共同配置调用即可。

(点击放大图像)

√ 应用场景

查询接口遇到用户名密码为空,可以自定义写返回内容,以及选择 [通用响应配置] 下的相关错误类型,例如:用户名密码为空 (计费单元),自动填充期望的返回值:

复制代码

fail
invalid userName or password

(点击放大图像)

图-19- 期望返回值校验页

API 依赖库

√ 设计思路 & 应用场景

API-A 的参数 r_id 依赖与 API-B 返回结果的某个参数(多个参数同样道理),这里登记 API-B,并且提取返回参数。除了特有的变量提取器,基本信息与请求,与后面提到的 API 接口一致的

填写方式 :

(点击放大图像)

图 -20- 变量提取器展示页

该接口返回数据如下;

复制代码

{
“r_id”: “567bbc3f2b8a683f7e2e9436”
}

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
9.jpeg)

图 -20- 变量提取器展示页

该接口返回数据如下;

复制代码

{
“r_id”: “567bbc3f2b8a683f7e2e9436”
}

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-iHlG1iKe-1713239973638)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/852215
推荐阅读
相关标签
  

闽ICP备14008679号