【测试】接口测试与接口自动化

壹、接口测试基础

一、接口测试概念

I、基础概念

是测试系统组件间接口的一种测试。

主要用于检测外部系统与系统间、内部子系统间的交互点;测试重点检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系。

内部接口调用相当于函数调用;外部接口调用大部分基于HTTP协议进行调用。

II、优势

对比UI测试,能更早发现问题、能发现更底层问题、问题发现和解决的效率更高

III、用例设计

原理:

1、模拟客户端向服务器发送请求;

2、服务器接受请求报文后对报文作出处理,返回应答;

3、客户端接受应答。

除了接口的功能测试外,还包括接口安全、接口性能等测试;

用例设计方法常用有等价类、边界值法等。

测试要点:

1、接口返回数据与预期结果一致性检查。

2、接口测试结果通常需要SQL语句从数据库查询确认。

3、接口容错性检查。如:传递错误数据类型的处理

4、接口参数边界值检查。

5、接口性能。响应时间、接口tps等

6、接口安全性检查。外部调用的接口,一般每个接口都需要access-token验证。

b40342147ee3436c968de3c5398d6dc2.png

 


二、接口自动化实现接口关联的方式和提取变量的方式

HTTP URL组成:

f789cbc199c24fdb9433c8526fb66dca.png

 

安装requests:

pip install [ -i 源(清华源、阿里源、豆瓣源等,默认不填为官方源)]  requests

导入requests模块:

import requests

I、发送请求

请求:请求方法、请求路径、请求参数、请求体

requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.delete(url, **kwargs)

#   上诉调用此函数
requests.request(method, url, **kwargs)

#   上诉调用此函数,可以自动关联有cookie关联的接口
session.request(method=method, url=url, **kwargs)
method=method       请求方法
url=url     请求路径
params=None     get请求参数
data=None       post或者put请求参数
json=None       post请求参数
headers=None    请求头
cookies=None        Cookie
files=None      文件上传
————————————
auth=None       鉴权(token)
timeout=None        超时处理
allow_redirects=True
proxies=None    设置代理
hooks=None      钩子函数
stream=None     文件下载
verify=None     证书验证
cert=None       CA证书

#   生成一个session对象,帮助保存客户端的会话信息

requests.session()

II、接受响应

由response对象接收

 

响应:响应码、响应信息、响应内容、响应头

 

响应内容一般有两种格式:JSON格式和HTML格式

 

需要根据响应内容验证接口工作是否正常。

res = requests.get(url, params=None, **kwargs)
print(res.text)                返回的文本信息
print(res.json())                返回的json格式
print(res.url)                返回响应对象的实际请求地址
print(res.content)                返回的字节内容
print(res.status_code)                返回的状态码
print(res.reason)                返回的状态信息
print(res.cookies)                返回的cookie
print(res.encoding)                返回编码格式
print(res.headers)                返回请求头
print(res.request.请求数据)                返回请求数据

III、cookie、session、token概念

cookie:存在于客户端;由服务端set-cookie方法设置。

session:存在于服务端内存中;用于和cookie一起验证客户端登陆状态。

token:服务端生成的一串字符串,用作客户端进行请求的一个令牌。

token运行原理:

1、Client第一次登录成功后,由Sever 生成,保存在Sever DB中,并返回Token值给Client。

2、Client收到Token后,进行保存(保存位置由Server指定)。

3、Client再次发送请求时,附带Token在请求参数中发送给Server进行验证。

4、Server收到请求后,取出Token值与保存在Server DB中的Token值进行比较。

        若Token一致,说明用户登录成功,处于登录状态;

        若Token不一致,说明登录信息失效,需重新登录;

        若Server DB不存在Token值,说明用户没有登录过。

token认证的优缺点:

无状态性、可重用性、安全性


三、面试题:实现接口关联的三种方式和提取变量的两种方式

什么是JSON:

由{}和[]组成的数据

下一个接口的参数需要用到上一个接口的返回值:接口关联

实现接口关联的三种方式

①、通过类变量保存中间变量实现接口关联(如果类变量跨py文件就会出错)

②、通过单独的文件保存中间变量实现接口关联

③、极限封装成和工具一样只需要通过表达式实现接口关联

提取变量的两种方式(对接口响应内容的处理方式)

①、正则表达式提取(适用文本对象)或者 html的xpath方式提取(HTML格式)

re.search() 提取一个值,通过下标值

re.findall()提取多个值,通过下标值

②、JsonPath提取(适用JSON对象)

       jsonpath.jsonpath()

        jsonpath表达式规则:

        $ 根节点

        .子节点

        .. 递归子节点

        [] 代表列表中的值,下标从0开始


贰、接口测试工具

一、ApiFox

接口管理、开发、测试全流程集成工具。解决多个系统间数据同步问题。

ApiFox = Postman + Swagger  + Mock + Jmeter

命令行中执行ApiFox测试

 

npm install -g apifox-cli

安装apifox-cli库

若出现报错:

unable to verify the first certificate

则执行npm config set strict-ssl false

 

导出用例:

ApiFox cli文件

通过命令执行测试:

apifox run (用例名称).apifox-cli.json -d data.csv -n 2 -r html

-d :数据文件

-n :循环次数

-r :生成测试报告,并指定报告格式

 

二、Jmeter

 


叁、Pytest接口自动化框架

接口自动化框架封装——统一请求封装

原因:

①、去除冗余代码

②、实现请求统一管理,如统一异常管理、统一日志管理

577d9d8930b643a19236a0d7d91e6c91.png


、接口自动化测试引入pytest用例管理框架

python:pytest,unitest

java: testng,junit

pytest作用:

1、找到用例

        模块名必须以test_开头或者_test结尾

        类名必须以Test开头,并且不能由init方法

        用例方法必须以test开头

2、执行用例

3、判断结果

4、生成报告

pytest插件:

pip install -r requirements.txt:

  -r 或 --requirement:这个选项告诉pip从一个文件中读取要安装的包列表;

        创建requirements.txt文件的一个常用方法是使用pip freeze > requirements.txt命令

pytest                本身

pytest-html                简单的html报告

pytest-xdist                多线程执行

pytest-ordering                控制用例执行顺序

pytest-rerunfailures        失败的用例重跑

pytest-base-url                设计基础路径(开发、测试、生产、预发布)

allure-pytest                生成allure报告

运行:

1、命令行运行

        命令行输入pytest运行

                -v输出更详细信息

                -s输出调试信息 

2、主函数调用

import pytestif __name__=="__main__":pytest.main()

3、结合pytest.ini全局配置文件执行

[pytest]#命令行参数
addopts = -vs --html=/reports/report.html --reruns 2
#--html产生html报告保存在/reports/report.html路径,--reruns失败用例重跑2次#配置执行的用例位置
testpaths = ./testcases
#若没有,则将执行所有文件夹下用例#配置修改默认的模块规则
python_files = test_*.py
#按照test_开头匹配执行用例#配置修改默认的类规则
python_classes = Test*#配置修改默认的用例规则
python_functions = test_*#配置基础路径
base_url = http://www.baidu.com#标记
markers =test_this:测试这条用例user_this:测试这条用例

、Pytest的前后置、固件、夹具

I、类似Jmeter和Postman:前置脚本和后置脚本

#   每个用例def setup(self):print("每个用例前:xxx")def teardown(self):print("每个用例之后:x")#   每个类def setup_class(self):print("每个类前:xx")def teardown_class(self):print("每个类之后:xxxx")

II、使用fixture固件结合contest.py文件实现前后置

装饰器

@pytest.fixture(callable_or_scope=None,*args,scope="function",params=None,autouse=False,ds=None,name=None)

scope=“作用范围”

scope:function 函数

scope:class 类

scope:module 模块

scope:session 会话

autouse = “自动执行”

在一个文件设置的固件fixture只能在当前文件起作用。

若希望对所有py文件起作用,需要结合conftest.py文件

@pytest.fixture(scope='function', autouse=False, params=[["baili","baili123"]], ids=["data1"], name="sql")
def exe_sql(request):print("请求之前:查询数据库")yield request.paramprint("请求之后:关闭数据库")

分层前后置

最外层conftest.py先执行、里面层的conftest.py后执行

4673443a2c064259881146153d9473e3.png


、接口自动化测试框架封装——通过文件保存中间变量实现

原因

1、类变量不能跨py文件使用

2、统一管理中间变量

工具做不到的事情

1、RSA,签名,自定义加密,混合加密……

2、生成美观的报告

3、复用性

4、团队协作

数据与业务分离


数据保存到:excel、csv、yaml、txt等

yaml简介:

一种数据类型,支持注释#、换行、字符串等

作用:

1、用于配置文件

2、用于编写测试用例

数据结构:

1、map对象:{键:空格 值}——这里的键值对,引号后面必须有空格,否则无法读取成功

2、list对象:[],可以用一组“-”开头表示,如:

-"name": 1

-"name": 2

可以和json完美转化

读写:

PyYaml模块

数据驱动

通过修改数据,从而驱动测试用例的执行,得到不同的结果。

一组数组执行一次用例,多组数据执行多次用例。

pytest数据驱动装饰器

@pytest.mark.parametrize(参数名,参数值)

生成Allure报告

1、下载allure、解压并配置环境变量

验证环境:

在dos窗口和PyCharm中分别验证:allure --version

 

2、生成临时的json报告

pytest.ini全局配置文件中:

addopts = -vs --alluredir=./temps --clean-alluredir

3、生成HTML的allure报告

if __name__=="__main__":pytest.main()time.sleep(3)os.system("allure generate ./temps -o ./reports --clean")

 

问题
1、yaml(excel、csv、txt)中如何调用python函数

2、接口关联要处理

3、文件上传要处理

4、常规断言和数据库断言

多个用例间区别

1、yaml文件名不同

2、需要提取变量,多了提取代码

3、有关联处理关联,有文件上传处理文件上传

HTTPRunner环境搭建

 安装:

pip install httprunner

pip install har2case

验证环境:

hrun -V

har2case -V

五个命令:

httprunner 主命令

hrun httprunner别名;用于运行yaml/json/pytest测试用例

hmake httprunner make别名;将yaml/json转化为pytest文件

har2case httprunner har2case别名;将har文件转换为yaml/json文件

locust 用于性能测试

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot与iTextPdf:高效生成PDF文件预览

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在现代应用程序开发中,生成PDF文件是一个常见的需求。PDF文件因其跨平台性和易读性,被广泛应用于文档交换、报告生成和打印预览等场景。Spring Boot作为一个用于简化Spring应用开发的框…

毕设 大数据抖音短视频数据分析与可视化(源码)

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕…

基于51单片机的多路电压测量proteus仿真

地址:https://pan.baidu.com/s/1cpgtfl571DcKfjhKvcKqSA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

三种环境下,没有公网ip的虚拟机访问公网的方法

1. windows真机vmware虚拟机 2. 云平台,虚拟机A(有公网ip,有内网ip)虚拟机B(只有内网ip) 3. linux真机kvm虚拟机 ------------------------------------------------------------------------------ 第…

基于 springboot vue中学生日常行为评分管理系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析

目录 前言HttpServlet &FrameworkServletHttpServlet #serviceFrameworkServlet#processRequest DispatcherServlet#doServicedoDispatchcheckMultipartgetHandlerAbstractHandlerMapping#getHandlerRequestMappingInfoHandlerMapping#getHandlerInternalAbstractHandlerMe…

Dit架构 diffusion范式分类+应用

1.ping 网址 2.ssh nscc/l20 3.crtl,打开vscode的setting 4.win 10修改ssh配置文件及其密钥权限为600 - 晴云孤魂 - 博客园 整体来看: 使用transformer作为其主干网络,代替了原先的UNet 在latent space进行训练,通过transformer处理潜…

Spring MVC__@RequestMapping注解、获取请求参数、域对象共享数据、视图、Restful

目录 一、RequestMapping注解1、RequestMapping注解的功能2、RequestMapping注解的位置3、RequestMapping注解的value属性4、RequestMapping注解的method属性5、RequestMapping注解的params属性(了解)6、RequestMapping注解的headers属性(了解…

动手学大模型应用开发之大模型简介

动手学大模型应用开发之大模型简介 主要学习目标什么是大语言模型大模型的能力和特点涌现能力作为基座模型支持多元应用的能力支持对话作为统一入口的能力大模型特点 常见大模型ChatGpt通义千问 LangChainLangChain的核心模块 总结相关学习链接 主要学习目标 学习如何进行大模…

【实战】Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP

大家好,我是冰河~~ 自己搭建的网站刚上线,短信接口就被一直攻击,并且攻击者不停变换IP,导致阿里云短信平台上的短信被恶意刷取了几千条,加上最近工作比较忙,就直接在OpenResty上对短信接口做了一些限制&am…

GeoCue与Xer Technologies合作推动无人机测绘技术革新

GeoCue与Xer Technologies合作推动无人机测绘技术革新 近期,LiDAR测绘硬件和软件开发商GeoCue与瑞士长航时混合动力无人机制造商Xer Technologies AG携手合作,成功将GeoCue的TrueView 720 LiDAR和图像传感器集成至Xer X8无人机平台。这一里程碑式的合作不仅标志着无人机测绘技…

Excel下拉菜单制作及选项修改

Excel下拉菜单 1、下拉菜单制作2、下拉菜单修改 下拉框(选项菜单)是十分常见的功能。Excel支持下拉框制作,通过预设选项进行菜单选择,可以避免手动输入错误和重复工作,提升数据输入的准确性和效率 1、下拉菜单制作 步…

【简码短链】使用Selenium实现UI自动化测试

1.环境准备 Chrome浏览器 版本为版本 129.0.6668.90(正式版本) (64 位) 129版本的Chrome浏览器的驱动,将webdriver放到jdk所在的bin目录下 在命令行中输入:chromedriver验证是否成功 打开IDEA,创建Maven项目,在pom.xml导入所需…

idea 同一个项目不同模块如何设置不同的jdk版本

在IntelliJ IDEA中,可以为同一个项目中的不同模块设置不同的JDK版本。这样做可以让你在同一个项目中同时使用多个Java版本,这对于需要兼容多个Java版本的开发非常有用。以下是设置步骤: 打开项目设置: 在IDEA中,打开你…

自建RustDesk服务器:详细步骤与操作指南

在远程办公和协作日益普及的今天,远程桌面软件成为了不可或缺的工具。然而,许多知名的远程桌面软件,在免费使用一段时间后,会通过限制连接数量、时长或在特定网络环境下的可用性来促使用户付费升级,而且其会员非常昂贵…

【stm32】ADC的介绍与使用

ADC的介绍与使用 1、ADC介绍2、逐次逼近型ADC3、ADC电路4、ADC基本结构程序代码编写:ADC 通道和引脚复用的关系 5、转换模式(1)单次转换,非扫描模式转换流程:程序编写: (2)连续转换&…

详细分析Spring Security OAuth2中的JwtAccessTokenConverter基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 JwtAccessTokenConverter 是 Spring Security OAuth2 中的一…

一、Python(介绍、环境搭建)

一、介绍 Python 是一种高级编程语言,具有简洁易读的语法、丰富的库和强大的功能。Python是解释型语言,运行代码必须依赖安装好的解释器。Python目前存在两个版本:Python2、Python3(主流使用) 二、环境搭建 1.安装P…

<<迷雾>> 第8章 学生时代的走马灯(3)--走马灯 示例电路

几个首尾相连的触发器使用同一个控制端,能同时触发 info::操作说明 鼠标单击开关切换开合状态 注: 其中 CP 为按钮开关, 每点击一次, Q 的输出前进一级 注: 第一个触发器的输出端 Q 需要先置入高电平. 如果重置了电路, 可外接电源先使第一个 Q 置入高电平. 另: 因为…

深度学习:5种经典神经网络模型介绍

目录 1. LeNet:CNN的鼻祖 2. AlexNet:深度学习的开山之作 3. VGGNet:深度与简洁的结合 4. GoogLeNet:Inception模块的创新 5. ResNet:残差学习的革命 卷积神经网络(CNN)已经发展为图像识别…