关于接口测试——自动化框架的设计与实现

news2024/11/19 15:21:44

一、自动化测试框架

在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,非常遥远。大家之所以觉得复杂,是因为落地运用起来很复杂;每个公司,每个业务及产品线的业务流程都不一样,所以就导致了“自动化测试框架”去完成自动化测试的时候产生很多不稳定因素,这样就很难定位成一个固定的框架。其实不然,真正的自动化测试框架不是一个模式,而是一种思想和方法的集合,通俗的讲就是一个架构。

二、自动化测试框架思想

为了更好的了解自动化测试框架,我们先从自动化测试的发展历程说起;一般测试工作限在3年以上且接触过自动化测试的应该对以下几种自动化测试框架思想有一定的认知:

  • 模块化思想

  • 库思想

  • 数据驱动思想

  • 关键字驱动思想

以上仅仅是代表了一种自动化测试的思想,并不能定义为框架。上面讲到框架=思想+方法,于是演化了以下五种框架:

1、模块化测试脚本框架

需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。

2、测试库框架

与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

3、关键字驱动或表驱动的测试框架

这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。

这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。

4、数据驱动测试框架

在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,Json文件,Yaml文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测 试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。

5、混合测试自动化框架

最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的。

三、接口自动化测试框架策略

  1. 设计出来的框架是直接给测试人员,而且其他的测试人员只需要简单的向里面不断的补充测试用例即可;所以我们的框架设计必须三简化即操作简单,维护简单,扩展简单。

  2. 设计框架的同时一定要结合业务流程,而且不仅仅靠技术实现,其实技术实现不难,难点对业务流程的理解和把握。

  3. 设计框架时要将基础的封装成公用的,如:get请求、post请求和断言封装成同基础通用类。

  4. 测试用例要与代码分享,这样便于用例管理,所以将我们选择上面的数据驱动思想。

四、接口自动化测试框架设计

1、进行接口框架设计前,我们先看看当前的一些主流接口自动化工具框架

2、以上各工具特性
工具学习 成本录制持续集成测试报告用例管理性能测试扩展难度最低要求
Java+testng+MavenJava
Requests+PythonPython
Robot Framework工具组件
HttpRunnerPython

根据以上的特性可得我们优先考虑Python+Requests和HttpRunner;下面我们根据其两个框架分别来分析下用例执行过程。

3、用例执行解析

Python的Requests库针对所有的HTTP请求方法,采用的是统一的接口

requests.request(method, url, **kwargs)

其中,kwargs可以保护HTTP请求所有可能用到的信息,例如:headers、cookies、params、data、auth等。所以,只要遵循Requests的参数规范,在接口测试用例中复用Requests参数的概念即可。而HttpRunner处理逻辑很简单,直接读取测试用例中的各项参数,传递给Requests发起请求。

1)Requests接口请求示例

def test_login(self):
 url = "www.xxx.com/api/users/login"
 data = {
 "name": "user1",
 "password": "123456"
 }
 resp = requests.post(url, json=data)
 self.assertEqual(200, resp.status_code)
 self.assertEqual(True, resp.json()["success"])

在该用例中,实现了HTTP POST请求,然后对响应结果进行判断,检查响应code等是否符合预期。

这样的用例在实际项目中会存在两个问题:

  • 用例模式基本固定,会存在大量相似或重复的用例,用例维护有很大问题

  • 用例与执行代码不分离,参数数据也未分离,同样不易维护

2)HttpRunner使用json/yaml格式处理测试用例,分离后的用例描述如下

{
 "name": "test login",
 "request": {
 "url": "www.xxx.com/api/users/login",
 "method": "POST",
 "headers": {
 "content-type": "application/json"
 },
 "json": {
 "name": "user1",
 "password": "123456"
 }
 },
 "response": {
 "status_code": 200,
 "headers": {
 "Content-Type": "application/json"
 },
 "body": {
 "success": true,
 "msg": "user login successfully."
 }
 }
 }

3)HttpRunner用例执行引擎

 
 def run_testcase(testcase):
 req_kwargs = testcase['request']try:
     url = req_kwargs.pop('url')
     method = req_kwargs.pop('method')
 except KeyError:
     raise exception.ParamsError("Params Error")

 resp_obj = requests.request(url=url, method=method, **req_kwargs)
 diff_content = utils.diff_response(resp_obj, testcase['response'])
 success = False if diff_content else True
 return success, diff_content

4)从测试用例中获取HTTP接口请求参数,testcase[‘request’]

{
 "url": "www.xxx.com/api/users/login",
 "method": "POST",
 "headers": {
 "content-type": "application/json"
 },
 "json": {
 "name": "user1",
 "password": "123456"
 }
 }

5)发起Http请求

requests.request(url=url, method=method, **req_kwargs)

6)检测测试结果,即断言

utils.diff_response(resp_obj, testcase['response'])

五、接口自动化测试框架落地

根据简单易用易维护原则我们使用HttpRunner工具设计框架。

1、HttpRunner简介

主要特性:

  • 集成了Requests的全部特性,满足对http、https的各种测试需求

  • 测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保障测试用例具备可维护性

  • 测试用例支持参数化和数据驱动机制

  • 基于 HAR 实现接口录制和用例生成功能

  • 结合 Locust 框架,无需额外的工作即可实现分布式性能测试

  • 执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合

  • 测试结果统计报告简洁清晰,附带详尽统计信息和日志记录

  • 具有可扩展性,便于扩展实现 Web 平台化

2、环境准备

安装HomeBrew(MacOs软件包管理工具,类似apt-get、yum)

  • 终端执行
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安装pyenv并配置环境变量:python版本管理器,可同时管理多个Python版本(HttpRunner是基于Python开发,但是支持Python3.6.0以上)
brew install pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
exec $SHELL -l
  • 安装Python3.6
pyenv install --list //查看可安装的Python版本
pyenv install 3.6.0 //安装3.6.0版本
pyenv rehash //更新pyenv
pyenv versions //查看已经安装的python版本,带*号的是当前使用的版本
  • 选择Pyhton
pyenv global 3.6.0 //设置全局版本,即当前系统使用的版本将切换为3.6.0
  • 安装HttpRunner并校验
pip install httprunner
//运行如下命令,若正常显示版本号,则说明httprunner安装成功:
hrun -V
0.9.8

至此HttpRunner已搭建完成

3、用例管理

在HttpRunner中,测试用例引擎最大的特色就是支持Yaml/Json格式的用例描述形式;

采用YAML/JSON格式编写维护测试用例,优势还是很明显的:

  • 相比于表格形式,具有更加强大的灵活性和更丰富的信息承载能力;

  • 相比于代码形式,减少了不必要的编程语言语法重复,并最大化地统一了用例描述形式,提高了用例的可维护性。

Yaml格式

Json格式

以下以数澜–数栖平台2.X中的研发平台为例(采取Json格式)

场景:项目空间后,需要快速支持创建Demo示例,即自动创建各种目录和任务。

1)确定业务流程所使用到的接口并通过Postman或Jmeter调试通过及分好类

  • 查询类(Get请求)接口:查询任务目录、查询资源组、查询工作流等

  • 新增类(Post请求)接口:新建目录、新建任务等

2)根据业务流程确定接口顺序

  • 如要在某个目录下新建任务:则先要调用新建目录接口再调用作建任务接口

3)向Json文件里按照规则填写接口相关信息

  • 接口Base_Url

  • 接口路径

  • 接口请求方式

  • 接口请求参数

  • 接口断言

  • 接口返回参数(关联接口时会用到上一接口返回的参数)

以下是部分用例示例

4)用例填写完成后,执行用例文件,如Json文件为task.json

hrun task.json

5)查看运行结果

  • 在此目录下会自动生成一个reports文件,进入该文件夹可看到生成带时间的html(执行一次就会生成一个Html文件)

  • 打开此Html查看

全部通过

部分通过

  • 点击Log,可查看具体请求信息和返回信息

  • 点击trackback可查看定位错误信息

推荐学习视频

【干货分享】接口自动化测试-Pytest核心固件Fixture详解以及应用实战

年薪百万的测开也得懂的接口测试!你有什么理由可以不学习?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LVS和keepalived

Keepalived及其工作原理 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器&#x…

怎么自制gif动画?简单一招快速搞定

众所周知gif动图的画面非常的丰富生动,并且体积小传播方便,在当下的网络中是非常的受欢迎。那么,这种gif格式的图片是怎么制作的呢?下面,给大家分享一款专业的gif动态图片制作(https://www.gif.cn/&#xf…

Ubuntu 安装PostgreSQL

网上有各种版本的,也可以去官网看官方的文档。我是下载的PostgreSQL-11.4版本的。找到以后直接复制网上的压缩包链接就可以。 $ mkdir /opt/postgresql && cd /opt/postgresql $ wget https://ftp.postgresql.org/pub/source/v11.4/postgresql-11.4.tar.gz…

如何计算3种卷积之后的尺寸(普通卷积,转置卷积,空洞卷积)

文章目录 前言一、普通卷积二、转置卷积三、空洞卷积 前言 三种卷积之后的feature map的尺寸如何计算。包括普通卷积,转置卷积,空洞卷积。可以在下面这个链接看到三种卷积的动态图。 卷积动态图 一、普通卷积 普通卷积比较简单了,其计算方式…

由于找不到msvcr110.dll 无法继续执行的解决方法分享(最新)

msvcp110.dll 是 Microsoft Visual C 2010 Redistributable Package 中的一个组件,它包含了一些运行时库文件。当计算机缺少这个文件时,可能会出现一些问题,如程序无法正常运行、系统不稳定等。下面是 6 种修复方法: 第1种方法&am…

内网穿透的应用-结合内网穿透实现在线远程Linux DataEase,数据可实时进行可视化分析

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

华为小型智能园区网络解决方案

云时代来袭,数字化正在从园区办公延伸到生产和运营的方方面面,智慧校园,柔性制造,掌上金融和电子政务等,面对各种各样的新兴业态的涌现,企业需要构建一张无所不联、随心体验、业务永续的全无线网络&#xf…

数据采集技术在MES管理系统中的应用及效果

在现代制造业中,MES生产管理系统已成为生产过程中不可或缺的一部分。MES管理系统能够有效地将生产计划、生产执行、质量管理等各个生产环节有机地衔接起来,从而实现生产过程的全面优化。本文将以某车间为例,探讨结合MES系统的数据采集技术的应…

10.正则表达式匹配

10.正则表达式匹配 上述5种可匹配情况的举例,便于理解: 1、a与ab星号是匹配的,分析:a与a匹配,让 b星号看作出现0次。 2、abb与ab*匹配,分析:ab与ab星号匹配,让b多出现1次时&#xff…

Windows10关闭小娜最好方法是什么?

Windows10关闭小娜最好方法是什么?Windows10系统内的小娜可以帮助大家实现各种操作和提供一系列的便捷功能。但是,有些用户并不需要小娜的帮助,所以想要关闭小娜功能,下面小编给大家介绍关闭Windows10系统内小娜的最好方法&#x…

一次对app使用socket通信的渗透思路记录

0x1 概述 ​ 本篇文章记叙了一次测试的目标为app,且该app采用了socket进行通信时,一个非常便秘的渗透测试思路。 0x2 app分析 ​ 首先拿到app,对其使用VPN代理抓包、WIFI代理抓包均未果,于是决定脱壳看看,使用MT管理…

【VsCode】vscode创建文件夹有小图标显示和配置

效果 步骤 刚安装软件后, 开始工作目录下是没有小图标显示的。 如下图操作,安装vscode-icons 插件,重新加载即可 创建文件夹,显示图标如下:

小白的二叉树(C语言实现)

前言: 二叉树属于数据结构的一个重要组成部分,很多小白可能被其复杂的外表所吓退,但我要告诉你的是“世上无难事,只怕有心人”,我将认真的对待这篇博客,我相信只要大家敢于思考,肯定会有所收获…

040:vue项目中 transition 动画实现推拉门效果

第040个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

Embeddig技术与应用 (1) :Embedding技术发展概述及Word2Vec

编者按:嵌入(Embedding)是机器学习中一种将高维稀疏向量转换为低维稠密向量的技术。其通常用于处理自然语言、图像等高维离散数据。 嵌入能够有效地解决维度灾难问题,减少存储和计算成本,同时提高模型的表达能力。我们还可以通过得到的嵌入向…

华为云云耀云服务器L实例评测|在Redis的Docker容器中安装BloomFilter 在Spring中使用Redis插件版的布隆过滤器

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍如何在Redis的docker容器中安装BloomFilter,并且结合spring的使用方式。 其他相关的华为云…

Vue中开发中Mock和总线了解以及应用

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…

[补题记录] Atcoder Beginner Contest 321(E)

URL:https://atcoder.jp/contests/abc321 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 有一颗 N 个节点的完全二叉树,现在给出节点 X,一个整数 K,问举例节点 X 的长度为 K 的点有多少个? Thoug…

25436-2010 热封型茶叶滤纸 阅读笔记

声明 本文是学习GB-T 25436-2010 热封型茶叶滤纸. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了热封型茶叶滤纸的产品分类、技术要求、试验方法、检验规则及标志、包装、运输、 贮存。 本标准适用于热封型包装机包装茶叶、咖…

LLM - Make Causal Mask 构造因果关系掩码

目录 一.引言 二.make_causal_mask 1.完整代码 2.Torch.full 3.torch.view 4.torch.masked_fill_ 5.past_key_values_length 6.Test Main 三.总结 一.引言 Causal Mask 主要用于限定模型的可视范围,防止模型看到未来的数据。在具体应用中,Caus…