接口如何运用pytest+HttpRunner展开测试?

目录

前言:

一、 什么是接口测试

二、 引入自动化背景

三、 自动化技术选型

四、 自动化测试用例

五、自动化成果


前言:

pytest和HttpRunner都是Python编程语言中常用的接口测试框架。

pytest是一种成熟的、灵活的、社区支持良好的测试框架,提供了丰富的测试功能和扩展机制,可以方便地运行各种类型的测试,如单元测试、功能测试和接口测试等。

HttpRunner 是一种基于Python的开源接口自动化测试框架,它支持多种测试用例的编写方式,包括YAML、JSON和Python等。它还提供了丰富的内置断言和可视化报告,使得接口测试变得更加高效和可靠。

一、 什么是接口测试

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

二、 引入自动化背景

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

1、产品迭代迅速

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

2、应用系统日趋复杂

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

3、部署环境多样

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

三、 自动化技术选型

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

1、简单易用。

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

2、可扩展性强

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

1、易于集成CI

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

2、录制回放

通过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周完成。

  作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可:【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Af5vb8Yd04Vko7N1pLyynmp07ZePYHSQ&authKey=ks61fFogMnCB2Mw40a8gAbIgAW0iXxiu3fEp%2BsUtanTrM%2F8aJ4pzu%2B74Fo%2Fp%2Fd8G&noverify=0&group_code=574737577

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vr沉浸式仿真实训展厅中控系统提高课堂纪律

为解决实训教学过程中“看不到、进不去、成本高、危险大”的问题,VR智能中控系统为职业教育及高等教育老师提供一个数字化、沉浸式、集中管控的实训教学工具。 VR智能中控系统通过对VR教学课堂的实时监控、数据的收集和分析,为气象学院的教学提供更多帮助…

2023年05月份青少年软件编程Scratch试卷三级真题

2023-05 Scratch三级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1. 关于变量,下列描述错误的是?(A)(2分) (变量那一栏…

【深度学习】基于Qt的人脸识别系统,门禁人脸识别系统,Python人脸识别流程,树莓派

文章目录 人脸识别过程人脸检测人脸对齐人脸特征提取特征距离比对人脸识别系统 人脸识别过程 在深度学习领域做人脸识别的识别准确率已经高到超出人类识别,但综合考虑模型复杂度(推理速度)和模型的识别效果,这个地方还是有做一些…

基于Java物流管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

STM32单片机(四)第一节:OLED调试工具

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

从业务出发,K8S环境自建和非自建整体架构设计比较

新钛云服已累计为您分享751篇技术干货 随着数字化转型的大潮到来,越来越多的企业开始上云,同时也纷纷加入到微服务和K8S队伍中。但在K8S整体环境究竟应该用自建的还是非自建?以及他们需要用到的服务,究竟应该自建还是直接用PAAS服…

C++【STL】之list的使用

文章目录: list介绍list使用1. 默认成员函数1.1 构造函数1.2 拷贝构造1.3 赋值重载1.4 析构函数 2. 迭代器3. 容量操作4. 数据访问5. 数据修改5.1 插入删除5.2 交换调整清理 6. 其他操作6.1 链表拼接6.2 链表移除6.3 排序6.4 链表逆置 list介绍 list是可以在常数范围…

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

轻量服务器架设网站打开速度慢,如何加速?

轻量服务器非常适合流量适中的小、中型网站,虽作为轻量级主机包,但它一般与云服务器使用同样的 CPU、内存、硬盘等底层资源。只是,轻量服务器的资源(可用的存储空间、RAM 和 CPU等硬件/内存容量)更低,虽然这些对于较中、小的网站来…

性能优化-内存优化

8-《内存优化》 一.基础知识1.Java的内存分配区域2.Java的引用类型3.Java的垃圾回收机制:三个问题4.Android的内存管理机制 二. Android的内存泄漏、内存溢出、内存抖动概念0.内存泄露1.内存溢出![在这里插入图片描述](https://img-blog.csdnimg.cn/8b73ef844f26470…

png转jpg,直接改后缀?

通过把.png改为.jpg可以改变图片的格式么? 将PNG文件扩展名改为JPEG的扩展名(.jpg或.jpeg)不会更改图像的格式。它只是更改了文件扩展名,这可能导致一些图像查看器和编辑器无法正确识别和处理该文件。 PNG和JPEG是两种不同的图像文…

Python自动人工智能训练数据增强工具 | DALI介绍(含代码)

Python自动人工智能训练数据增强工具 | DALI介绍(含代码) 文章目录 Python自动人工智能训练数据增强工具 | DALI介绍(含代码)自动数据增强方法DALI 和条件执行使用 DALI 自动增强使用 DALI 的自动增强性能尝试使用 DALI 进行自动增强 深度学习模型需要数百 GB 的数据才能很好地…

练习:逻辑回归

练习2:逻辑回归 介绍 在本练习中,您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法,来提高算法的鲁棒性,并用更复杂的情形来测试模型算法。 在开始练习前,需要下载如下的文件进行数据上…

研一,有点迷茫。

作者:阿秀 校招八股文学习网站:https://interviewguide.cn 这是阿秀的第「277」篇原创 小伙伴们大家好,我是阿秀。 最近回答了不少大一大二研一在读的学习圈中学弟学妹的咨询问题,基本都是计算机学习、进度、疑惑等等相关的问题&a…

Mock和Vite-plugin-Mock的区别是什么?

简介 我不知道大家和我是否有一样的疑问,之前Mock.js用的挺好,为啥又出现了一个vite-plugin-mock,而且这个插件还依赖于Mock.js.那么他的优势到底是什么呢?如果你也有这样的疑问,本文最后会给出答案解开这个谜底 前言 我之前已经…

MVC、MVP、MVVM:详解2

概述 MVC、MVP、MVVM 都是在 Android 开发中经常用到的架构思想,它们都是为了更好地分离代码、提高代码可复用性、方便维护等目的而设计的。下面对这三种架构思想进行简单的介绍和比较。 MVC MVC 架构是最早被使用的一种架构,它把程序分成了三个部分&…

EasyExcel实现execl导入导出

引言 在实际开发中,处理 Excel 文件是一个常见的需求。EasyExcel 是一个基于 Java 的开源库,提供了简单易用的 API,可以方便地读取和写入 Excel 文件。本文将介绍如何使用 EasyExcel 实现 Excel 导入功能,以及一些相关的技巧和注…

【问题记录】Visual Studio 下的Qt工程无法打开 “xxx.ui“ 文件和LNK1104 无法打开文件“Qt5Cored.lib”错误

环境 Windows 11 家庭中文版Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.5.3qt-vsaddin-msvc2022-2.9.1-rev.06 问题产生 VS下Qt环境准备好后,创建了Qt工程然后点击 Form Files 下的 “xxx.ui” 文件,在弹出 Qt 设计师 界面后…

电脑出现MSVCP100.dll丢失错误怎么办?

MSVCP100.dll是一个Windows系统文件,它可以确保Windows程序正确平稳运行,如果该文件安装不正确、丢失或损坏,则使用该文件的应用程序将无法正常启动,会出现“无法启动此程序,因为计算机中丢失MSVCP100.dll”的错误提示…

从零开始 Spring Boot 42:异步执行

从零开始 Spring Boot 42:异步执行 图源:简书 (jianshu.com) 在之前的文章中,我多次介绍过在 Spring 中如何使用Async注解让方法调用变成“异步执行”: 在这篇文章中,介绍了如何让定时任务使用Async变成异步执行。在…