测试老鸟,Python接口自动化测试框架搭建-全过程,看这篇就够了...

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

1、接口测试自动化好处

可以在短时间内自动执行大量的测试用例;
通过参数化和数据驱动的方式进行测试数据的变化,提高测试覆盖范围;

快速反馈测试执行结果和报告;
支持持续集成和持续交付的流程;

2、使用Python+Requests+Pytest+Allure搭建测试框架目的

简化接口测试编写:
Requests库是 Python 的一个优雅且简单的 Http库,可以很方便地发送 http 请求,接收和处理接口返回的响应数据。

强大的断言和校验功能:
Pytest 是一个功能强大的测试框架,提供丰富的断言功能,用于验证接口响应的正确性。

美观的测试报告:
Allure是一个开源的测试报告生成工具,可以生成漂亮、交互式和易于理解的测试报告。

持续集成:
使用Requests+Pytest+Allure搭建的框架可以与持续集成和自动化流程集成,实现快速的接口测试。

3、环境搭建

1)环境准备

安装requests、pytest、allure的方法

pip install requests
pip install pytest
pip install allure-pytest

requests、pytest 的安装很简单,这里主要讲讲如何安装 allure。

Windows 安装 allure:

①安装配置jdk这里就不再过多叙述。
②allure 命令行工具安装

allure命令行工具 allure是一个命令行工具,下载最新版。
地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/

下载完成后,解压放在D盘

在这里插入图片描述

把bin目录添加到环境变量Path下

在这里插入图片描述

注意: cmd命令行运行 java、javac、allure可能表现安装未成功,出现这种情况时可以先选择重启试试。

3、接口自动化框架整体结构

名称说明
apiapi
config配置文件,存放setting.ini配置文件,主要配置接口域名和mysql数据库信息
corerequest 请求方法封装、关键字返回结果类
data存放测试用例数据
log日志
report测试报告数据
testcase测试方法
utils工具类
pytest.inipytest 配置文件,为运行项目的相关参数
requirements.txt相关依赖包及版本

测试代码运用了代码分层思想,具体往后看。

在testcases文件夹中,不做接口请求和返回值的操作,用一个方法A代替,参数为请求参数;

方法A中调用B方法,B方法接收组装好的参数(包含headers);

B方法调用C方法,C方法接收请求参数,参数为接口路径(不包含域名)和 **kwargs(接收B方法中组装好的参数)C方法参数为url,接口请求参数: **kwargs;

4、测试用例

创建测试文件并编写测试方法

.py测试文件必须以“test ”开头(或“ test”结尾);
测试方法必须以“test_”开头;
测试类必须以Test开头;

使用 Pytest 提供的装饰器 “@pytest.mark” 来标记测试用例,其中“@pytest.mark.parametrize ”用于参数化测试用例,通过装饰器可以将多个参数传递给测试函数。

@allure.feature(“”) 是Allure插件提供的一个装饰器,用于定义测试报告中的feature(敏捷开发场景)。

通过使用该装饰器,可以将测试用例按照功能模块进行分类展示,提供测试报告可读性。

如下是用户登录的一个例子,test_get_token 函数被标记为参数化测试用例,通过”@pytest.mark.parametrize“传递一个参数data和对应的值。

在测试函数中,可以直接使用传递的参数进行测试逻辑,验证请求接口返回是否通过,断言返回状态和登录令牌。

## test_user.py
@allure.feature("用户模块")
class TestUser:
    @pytest.mark.parametrize("data", get_data()['user_login'])
    @allure.story("登录-获得token")
    @allure.title("登录获取令牌测试用例")
    def test_get_token(self,data):
        result = login(data)
        assert result['body']['success'] is True
        assert len(result['body']['accessToken']) != 0 

5、发送请求和处理响应

调用requests库发送http请求,将data参数中的请求方式、参数和请求体通过调用 api_util_new.do_request()发送请求,使用response接收接口请求的响应结果,并将响应结果处理后返回。

def login(data):
    """
    获取令牌
    :param json_data
    :return:
    """
    response = client_api.do_request(url=data['url'], method=data['method'], json=data['data'])
    return process_response(response)

以下是对于接口请求响应结果的处理,使用字典ResultResponse存储处理后的response,检查请求响应状态代码以确定请求是否成功,并提取响应内容通过日志打印出来方便定位问题。

def process_response(response):
    ResultResponse = {}
    if response.status_code == 200 or response.status_code == 201:
        ResultResponse['success'] = True
        ResultResponse['body'] = response.json()
    else:
        ResultResponse['success'] = False
        logger.info("请求状态异常")
    logger.info("响应内容>>>:" + json.dumps(response.json(), ensure_ascii=False))
    return ResultResponse

封装 HTTP 请求的类 “RestClient”,在类方法 do_request() 中,使用 request() 方法接收接口url,接口请求 method 和可选的其他关键字参数。

在 request() 方法中,传入的 method(GET、POST、PUT、DELETE) ,使用 requests 库发送相应的 http 请求。

class RestClient:            
    def do_request(self, url, method,**kwargs):
        return self.request(url, method, **kwargs)     
    
    def request(self, url, method, **kwargs):
        if method == "GET":
            return requests.get(self.api_root_url + url, **kwargs)
        if method == "POST":
            return requests.post(self.api_root_url + url, **kwargs)
        if method == "PUT":
            return requests.put(self.api_root_url + url, **kwargs)
        if method == "DELETE":
            return requests.delete(self.api_root_url + url, **kwargs)

client_api = RestClient()

6、数据驱动测试和校验

通过 yaml 文件存放测试用例数据,如下user_login_body 为用户登录数据列表,其中url为api地址,method 为请求方式,data为请求参数

user_login_body:
  - url: /api/signin
    method: POST
    data: {
      username: user
      password: pwd
    }

json转yaml格式的方法网上一堆,比如 bejson,而校验 yaml 书写格式的工具,可以使用 YamlLint。

通过装饰器 @pytest.mark.parametrize,运行测试时会获取测试用例的数据去执行测试。

校验接口返回结果的正确性通常使用断言来实现。根据接口返回的数据结构,可以使用适当的断言函数来校验各个字段的值是否符合预期。

Pytest 支持使用 assert 关键字进行断言assert 函数,Pytest 提供了一些内置的断言函数

assertEqual(a, b)
assertTrue(x)
assertFalse(x)
assertIs(a, b)
assertIsNone(x)
assertIn(a, b)
assertNotIn(a, b)

7、报告生成展示

在命令行执行命令:pytest 运行用例后,会得到一个测试报告的原始文件,但这个时候还不能打开成HTML的报告,还需要在项目根目录下,执行命令启动 allure 服务。

下图是个结果测试结果的展示示例。

# 需要提前配置allure环境,才可以直接使用命令行
allure serve ./report

在这里插入图片描述

allure测试报告框架是一个开源的测试报告生成工具,它提供了丰富的功能和灵活的配置选项,用于生成美观、可交互和易于理解的测试报告。

基本过程如下:

框架集成:通过与 Pytest 集成 ,利用 Pytest 框架提供的插件机制,将测试结果和相关信息收集起来。

结果收集: allure 收集 Pytest 生成的测试结果数据,结果数据中包括测试用例的执行状态、断言结果、日志信息等。

报告生成: allure 使用收集到的数据转换为 xml 格式,并利用报告模板和样式表定义,渲染出漂亮的 html 文件。

8、持续集成

Jenkins中安装Allure插件 Allure Jenkins Plugin;
添加接口自动化测试的代码;
触发规则我选择的是准备发布打tag 后,自动执行构建;

cd ${WORKSPACE}
pytest

首先利用Python把HTTP接口封装成Python接口,接着把这些Python接口组装成一个个的关键字,再把关键字组装成测试用例,而测试数据则通过YAML文件进行统一管理,然后再通过Pytest测试执行器来运行这些脚本,并结合Allure输出测试报告。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

在追逐梦想的路上,别怕困难与挫折,因为每一次的奋斗都是你成长的机会,只有坚持不懈,才能收获辉煌的人生。相信自己,勇往直前,成功属于你!

当你感到疲惫时,记得曾经的梦想和初心,它们将给你力量与勇气。不论困难多大,只要不放弃,努力奋斗,你一定能迎来辉煌的人生。相信自己,无所不能!

每一次的努力都是你成为更好版本的里程碑,每一次的坚持都是你追寻梦想的指南针。勇敢迈出步伐,战胜困难,终将看到自己的辉煌与成就。相信自己,奋斗不止!

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

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

相关文章

Django实战项目-学习任务系统-查询列表分页显示

接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。 接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好。 本…

Centos虚拟机安装配置与MobaXterm工具及Linux常用命令

目录 一、Centos操作系统 1.1 Centos介绍 1.2 Centos虚拟机安装 1.3 配置centos的镜像 1.4 虚拟机开机初始设置 1.4.1 查看网络配置 1.4.2 编辑网络配置 二、MobaXterm工具 2.1 MobaXterm介绍 2.2 MobaXterm安装 2.3 切换国内源 三、Linux常用命令和模式 3.1 查看网络配置 …

前端工程师的摸鱼日常(20)

今年一整年状态都不怎么好,所以别说摸鱼文了,其他技术文章都没写几篇,发生的事情有点多,无暇顾及这些,当然最主要的一个原因还是因为懒! 有很多时候我都觉得人的大脑是单线程的,在处理一件事情…

Vue 事件绑定 和 修饰符

目录 一、事件绑定 1.简介 : 2.实例 : 二、修饰符 1.简介 : 2.实例 : 3.扩展 : 一、事件绑定 1.简介 : (1) 在Vue中,通过"v-on:事件名"可以绑定事件,eg : v-on:click表示绑定点击事件。 (2) 触发事件时调用的方法,定义在Vu…

HBase理论与实践-基操与实践

基操 启动&#xff1a; ./bin/start-hbase.sh 连接 ./bin/hbase shell help命令 输入 help 然后 <RETURN> 可以看到一列shell命令。这里的帮助很详细&#xff0c;要注意的是表名&#xff0c;行和列需要加引号。 建表&#xff0c;查看表&#xff0c;插入数据&#…

Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

目录 1、文章介绍 2、具体思路和写法 &#xff08;1&#xff09;AB包的打包 &#xff08;2&#xff09;AB包的加载 &#xff08;3&#xff09;AB包卸载 3、结语 1、文章介绍 本篇博客主要起记录和学习作用&#xff0c;简单的介绍一下AB包批量的打包和加载AB包的方式&…

深度学习网络模型 MobileNet系列MobileNet V1、MobileNet V2、MobileNet V3网络详解以及pytorch代码复现

深度学习网络模型 MobileNet系列MobileNet V1、MobileNet V2、MobileNet V3网络详解以及pytorch代码复现 1、DW卷积与普通卷积计算量对比DW与PW计算量普通卷积计算量计算量对比 2、MobileNet V1MobileNet V1网络结构MobileNet V1网络结构代码 3、MobileNet V2倒残差结构模块倒残…

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

使用这些优秀的 iPad App 提升您的技术水平

还记得当年 iPad 隆重登场&#xff0c;每个人都对其改变游戏规则的潜力感到震惊吗&#xff1f;嗯&#xff0c;你猜怎么着&#xff1f;iPad 应用程序世界已经发展&#xff0c;我们为您精心挑选了最好的应用程序&#xff08;由 AVNation 提供&#xff09;。 1、Crestron Electro…

求解一个整数中含多少个1

1.问题描述&#xff1a;给定一个整数&#xff0c;统计其对应的二进制中含有1的个数。比如8(0000 1000),对应的二进制数中&#xff0c;只含有一个1. 2.设计思路&#xff1a;对x取余&#xff1a;zx%2。如果z&#xff01;0&#xff0c;说明x的末尾不是为1.对于一个二进制x4x3x2x1…

HHDBCS扩展数据库类型

为应对市面上的数据库种类繁多的问题&#xff0c;HHDBCS设置了扩展数据库功能。 在登陆界面点击“工具”&#xff0c;选择“扩展数据库类型”&#xff1b; 注&#xff1a;HHDBCS支持已kingbase&#xff0c;本文仅用来举例。 填入名称、所需数据库的信息&#xff0c;上传驱动…

【广州华锐互动】军用飞机VR实战训练系统

随着科技的飞速发展&#xff0c;虚拟现实(VR)技术为军事训练带来了前所未有的机遇。军用飞机VR实战训练系统&#xff0c;正是在这一背景下应运而生的一种创新的训练方法。该系统利用先进的虚拟现实技术&#xff0c;为飞行员提供真实且逼真的模拟飞行环境&#xff0c;使之能够在…

【设计模式】第20节:行为型模式之“备忘录模式”

一、简介 备忘录模式也叫快照模式&#xff0c;具体来说&#xff0c;就是在不违背封装原则的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便之后恢复对象为先前的状态。这个模式的定义表达了两部分内容&#xff1a;一部分是…

JS加密/解密之jsjiami在线js加密的效率问题

故事背景 ​ 经常有客户反馈&#xff0c;v7加密的效率比v6低&#xff0c;但是安全性更好。这里我给大家科普一下关于jsjiami的优化诀窍。 示例源代码 // 伪代码 while (1) {var name ‘张三’ }优化后 var _name 张三; while (1) {var name _name }优化原理 相信很多朋…

uni-app微信小程序打开第三方地图

需求 小程序中有个按钮点击以后会调用手机中第三方地图进行导航。参数 位置信息 经度 与纬度。 实现方法 uni.openLocation({latitude: Number(地址纬度),longitude: Number(地址经度),name: 地址名称,address: 地址详情,success: function (res) {console.log(打开系统位置地…

利用日期创建文件-多用于数据库的备份

功能&#xff1a;根据日期变化实现文件的创建 1&#xff09;知识点&#xff0c;date命令的用法 --date"n day ago" %Y%m%d #n天前&#xff0c;当天则可以去掉--date参数 2&#xff09;文件名的拼接 ${filename}${date} 3查看结果文件 后期学循环语句可以改一下…

计算机视觉基础——基于yolov5-face算法的车牌检测

文章目录 车牌检测算法检测实现1.环境布置2.数据处理2.1 CCPD数据集介绍2.1.1 ccpd2019及20202.1.2 文件名字解析 2.2数据集处理2.2.1 CCPD数据处理2.2.2 CPRD数据集处理 2.3 检测算法2.3.1 数据配置car_plate.yaml2.3.2 模型配置2.3.3 train.py2.3.4 训练结果 2.4 部署2.4.1 p…

Python画图之HelloKitty

Python-turtle画出HelloKitty&#xff08;有趣小游戏&#xff09; 一、效果图二、安装库1.常用镜像源2.库下载 三、Python代码 一、效果图 二、安装库 1.常用镜像源 1. 豆瓣http://pypi.douban.com/simple/ 2. 清华大学&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple…

CentOS 搭建 Hadoop3 高可用集群

Hadoop FullyDistributed Mode 完全分布式 spark101spark102spark103192.168.171.101192.168.171.102192.168.171.103namenodenamenodejournalnodejournalnodejournalnodedatanodedatanodedatanodenodemanagernodemanagernodemanagerrecource managerrecource managerjob hist…

PostgreSQL 工具的相关介绍

1.1 psql工具 psql是PostgreSQL中的一个命令行交互式客户端工具&#xff0c;类似 Oracle中的命令行工具sqlplus&#xff0c;它允许用户交互地键入SQL语句或命 令&#xff0c;然后将其发送给PostgreSQL服务器&#xff0c;再显示SQL语句或命令的结 果。 1.2 psql的简单使用 使用…
最新文章