浅谈 Pytest+HttpRunner 如何展开接口测试!

news2024/10/6 4:01:14

软件测试有多种多样的方法和技术,可以从不同角度对它们进行分类。其中,根据软件生命周期,针对不同的测试对象与目标,可将测试过程分为 4 个阶段:单元测试、集成测试、系统测试和验收测试。本文着重介绍了如何借用 pytest 与 httprunner 进行接口自动化测试。


一、 什么是接口测试

In computing, an interface is a shared boundary across which two or more separate components of a computer system exchange information. The exchange can be between software, computer hardware, peripheral devices, humans, and combinations of these.

根据 wiki 中的定义,接口是一个共享的边界,计算机系统的多个独立组件通过它交换信息。这些信息的交换可以基于软件、硬件、外部设备、人和它们之间的组合。根据上述定义,可以面向软件、硬件、交互设备等展开接口测试。软件的接口测试是面向独立组件之间接口的一种测试,主要用于检测内外部系统及内部各子系统之间的交互点。测试的重点在于检查逻辑正确性、交互依赖性、数据正确性.

二、 引入自动化背景
基于以下几个情况,数栈引入自动化测试,以期提高测试效率,保障交付产品质量。

产品迭代迅速
目前数栈产品已经迭代至 Release4.3 版本。每过几个月进行一次产品 release 更新让回归测试的工作量持续上升。接口自动化测试可以很好的减少回归工作量。

应用系统日趋复杂
数栈目前自研 8 款产品和多个插件,产品之间的交互与产品 - 插件之间的交互日趋复杂。客观现实带来了更大的测试风险,测试消耗成本越来越高,花费的时间也越来越长。接口自动化测试可以提高测试效率。

部署环境多样
作为一款面向大数据的产品,除了开源的 Hadoop,还需要适配 TDH、CDH、HDP 等其他引擎。同时,各种客户的 POC 环境也需要大量人力支持。

三、 自动化技术选型
接口测试可以使用的工具有很多,Postman、Jmeter、REST-Assured、SoapUI、httpclient 等等。数栈产品使用的是 HttpRunner 这个框架。相比较于前几类工具,它具有以下特点:

简单易用。
虽然前几款工具中有图形化界面可以让人直观的进行操作,但 HttpRunner 以 “关键字” 的优势可以让 QA 快速的上手框架,对代码能力要求低。根据对应的关键字填入相应的值,即可生成一条测试用例。

可扩展性强
HttpRunner 的 V3 版本支持了 pytest,可以方便的借助 pytest 插件解决接口测试中遇到的问题,如数据驱动、参数化等。jUnit 虽然也具有扩展性强的特点,但是 Java 语言对于 QA 来说太重,且学习成本比 HttpRunner 更高。

易于集成 CI
HttpRunner 支持 CLI 命令,可以方便的接入 Jenkins、Gitlab CI 等工具。

录制回放
通过 Charles、Fiddler 等工具将请求到处为.har 文件,然后通过 HttpRunner 提供的命令,就可以将.har 文件转换成 json/yaml 文件。

数栈产品曾使用过 Jmeter 作为接口自动化工具。Jmeter 拥有可视化图形界面,通过拖动组件信息就可完成用例编排,方便 QA 使用。但是 Jmeter 的内置函数不能满足于复杂的数栈产品,虽然可以选择 beanshell 来写工具脚本,但其难以调试,第三方包管理困难等问题使编写效率低下。同时 Jmeter 容易出现编码混乱、日志不易于查看等问题。

HttpRunner 作为一款优秀的开源框架,在 GitHub 上拥有 2.6k star,集简单易用、扩展性强、易于集成、录制回放等特性于一体,相比较于 Jmeter 更适用于数栈自动化实践。

四、 自动化测试用例
数栈整体自动化测试架构如下图所示。从上到下可分为用户层、配置层、用例层、数据源。用户可以通过 Docker 镜像、Pipeline、定时任务来触发自动化任务。运行的结果记录到禅道,然后通过接入自研的 EasyV 进行展示。配置文件分为两类:一类是应用系统信息,如业务数据库信息、域名、账号密码等;另一类是数据源信息,用于用例的执行,现在支持的数据源有 MySQL、Oracle、Kafka、HBase 等等。从业务层面分,可以分为 8 个产品,每个产品编写各自的用例;从执行层面分,可分为接口测试和场景测试。若选择接口测试,则会运行所有产品的接口测试用例。下面拿接口测试用例进行举例说明。

一条接口测试用例可分为两部分:配置和测试步骤。先来看配置:

config = (
        Config("测试创建项目接口")
            .variables(
            **{
                "cookie": Cookie().get_cookie(),
                "url": api.aiworks.aiworks_api.AiworksApi.create_project.value,
                "tenant_name": ENV_CONF.uic.tenant_name,
                "project_name": project_name
            }
        )
            .base_url(ENV_CONF.base_url.rdos)
    )

首先第一个遇到的问题就是获取 cookie。基本上接口都需要 cookie 或者 token 校验才能调用,因此将获取 cookie 的方法抽象提取成一个 get_cookie (),避免了每个用例写一遍登陆。这个方法就属于架构图中预置函数的模块。url、tenant_name、project_name 三个变量是后续测试步骤中所需要用到的变量值,这些都预先在 variables 中定义好。其中还可以看到有 AiworksApi、ENV_CONF 这几个文件。AiworksApi 是所有 Aiwork 产品的接口枚举类,对接口内容进行管理;ENV_CONF 包含了整个自动化项目的配置信息,是一个配置文件,属于配置层。

	teststeps = [
        Step(
          RunRequest("开始请求创建项目接口")
            .post("$url")
            .with_headers(**{"cookie": "$cookie"})
        	.with_json(
            	{
                    "enableCycleSchedule": "$enableCycleSchedule",
                     "isSwitchJupyter": "$isSwitchJupyter",
                     "projectAlias": "$projectAlias",
                     "projectDesc": "$projectDesc",
                     "projectEngineList": "$projectEngineList",
                     "projectName": "$projectName",
                     "switchGpu": "$switchGpu"
                }
        	)
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", "$code")
            .assert_contains("body.message", "$message")
            .teardown_hook("${delete_project()}")
        )
    ]

然后在测试步骤部分,整个 teststeps 由 Step 数组构成。可以看到创建项目这个接口只有一个 Step,整个 Step 分为 post、with_headers、with_json、validate、teardown_hooke5 个部分组成。其中,with_json 中 key-value 键值对的值全都是引用的方式来取得,而不是写死的固定值。这样就可以将用例与数据区分开来。而具体的值则通过 @pytest.mark.parameterize 这个装饰器传入,params 里定义了这个用例所需的所有字段值。整体用例编写思路为 “用例与数据分离”,避免修改测试用例需要改动大量的代码。

	@pytest.mark.parametrize("params", params)
    def test_start(self, params):
        super().test_start(params)

所以整体来看,HttpRunner 框架提供了一个用例模版 -- 由多个关键字组成,使用者只需要将模版中的内容填充完整,就可以完成一条用例的编写。

五、自动化成果
自 2021 年 4 月自动化立项以来,已编写超过 900 条用例,8 个子产品接口覆盖率平均达到 60% 以上。每日通过 Jenkins 构建定时任务,在持续集成环境对最新的代码进行自动化测试。同时,自动化测试接入了测试环境、客户环境中使用。在提供环境信息完备的情况下,可以随时接入自动化,并运行得出报告给到 QA,大大减少了回归工作量,从原先 3-4 周的时间缩短到 1-2 周完成。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 资料获取方式 :

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

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

相关文章

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之数码管静态显示(四)

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发…

postgresql-集合运算

postgresql-集合运算 简介UNIONINTERSECTEXCEPT分组与排序集合操作优先级 简介 数据库中的表(table)本质上就是由行(row)组成的集合。因此,PostgreSQL 同样支持集 合论中的集合操作,包括并集(U…

CSS中的相对单位和绝对单位,以及rem自适应布局

在CSS中,我们经常需要指定元素的尺寸、间距和位置。为此,我们可以使用各种单位来定义这些值。本文将重点介绍CSS中的相对单位和绝对单位,并解释它们之间的区别。 相对单位 百分比(%):百分比单位是相对于父元…

Go 官方标准编译器中所做的优化

本文是对#102 Go 官方标准编译器中实现的优化集锦汇总[1] 内容的记录与总结. 优化1-4: 字符串和字节切片之间的转化 1.紧跟range关键字的 从字符串到字节切片的转换; package mainimport ( "fmt" "strings" "testing")var cs10086 s…

C#里Bitmap转Halocn的HObject

一般情况下,图像的width是4的倍数的话,用以下代码便可将彩色bitmap转出halcon里的HObject public void Bitmap2HObject(Bitmap bmp, out HObject image){try{Rectangle rect new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData srcBmpData bmp.L…

通讯录管理系统(个人学习笔记黑马学习)

1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信…

Vue2项目练手——通用后台管理项目第二节

Vue2项目练手——通用后台管理项目 路由限制重复跳转CommonAside.vue 顶部header组件搭建与样式修改右边用户菜单栏使用的组件图片CommonHeader.vue Vuex实现左侧折叠文件目录store/index.jsstore/tab.jsmain.jsCommonHeader.vueCommonAside.vueMain.vue 路由限制重复跳转 路由…

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

MPC模型预测控制器学习笔记(附程序)

本文用于记录学习DR_CAN老师发布的MPC系列视频教程的相关内容&#xff0c;文章中放的源码也是DR_CAN老师提供的程序示例&#xff0c;链接如下&#xff1a; DR_CAN老师的视频教程链接&#xff08;点击可跳转&#xff09; DR_CAN老师提供的程序示例&#xff08;点击可跳转&#x…

探索三丰云:免费虚拟主机与云服务器的新选择**

随着云计算技术的飞速发展&#xff0c;我们有了更多的选择来满足我们的在线业务需求。今天&#xff0c;我想向大家推荐一款我最近发现的优质服务——三丰云。 三丰云&#xff08;https://www.sanfengyun.com&#xff09;是一家提供免费虚拟主机和免费云服务器的公司&#xff0…

热门框架漏洞

文章目录 一、Thinkphp5.0.23 代码执行1.thinkphp5框架2.thinkphp5高危漏洞3.漏洞特征4.THinkphp5.0 远程代码执行--poc5.*TP5实验一(Windows)a.搭建实验环境b.测试phpinfoc.写入shelld.使用菜刀连接 6.*TP5实验二(Linux)a.测试方法b.测试phpinfoc.写入shelld.反弹shell&#x…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行&#xff0c;如Windows、Linux、Unix等&#xff0c;并且支持多种编程语言和技术&#xff0c;如PHP、Perl、Python、Java等。…

物联网智慧种植农业大棚系统

一、项目背景 智慧农业是是将物联网技术和农业生产箱管理的新型农业&#xff0c;依托部署在农业生产现场的各种传感节点&#xff0c;以物联网网关为通道形成数据传输网络&#xff0c;可以实现控制柜、环境监测传感器、气象监测机器等设备的远程监控&#xff0c;达到及时高校的…

docker 安装 Nginx

1、下载 docker pull nginx:latest 2、本地创建管理目录 mkdir -p /var/docker/nginx/conf mkdir -p /var/docker/nginx/log mkdir -p /var/docker/nginx/html 3、将容器中的相应文件复制到管理目录中 /usr/docker/nginx docker run --name nginx -p 80:80 -d nginxdocke…

小猫爪:嵌入式小知识18-XCP SeedNKey.dll

小猫爪&#xff1a;嵌入式小知识18-XCP SeedNKey.dll 0 目录1 前言2 生成DLL2.1 下载模板代码2.2 函数简介2.2 DLL编译 3 使用DLLEND 0 目录 小猫爪&#xff1a;嵌入式小知识15-XCP基础简介小猫爪&#xff1a;嵌入式小知识16-XCP协议简介小猫爪&#xff1a;嵌入式小知识17-XCP…

OpenGl图像的位移及旋转

一般而言&#xff0c;改变物体的位置时&#xff0c;需要改变每一帧所有顶点的坐标&#xff0c;计算量巨大 可以将每一个顶点用向量值表示&#xff0c;使用位移矩阵&#xff0c;缩放矩阵&#xff0c;旋转矩阵对顶点进行操作。 顶点着色器&#xff1a; #version 330 core layo…

LeetCode--HOT100题(46)

目录 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链…

解决Jackson解析JSON时出现的Illegal Character错误

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

恒运资本:如何利用股票筹码进行选股?有什么方法?

在进行股票之前最重要的便是进行股票的挑选&#xff0c;股票挑选有许多办法&#xff0c;比如说消息面选股、使用筹码进行选股等。那么怎么使用股票筹码进行选股&#xff1f;有什么办法&#xff1f;就下面就由恒运资本为大家剖析&#xff1a; 投资者能够根据以下筹码变动特点来进…