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

news2024/10/5 17:00:30

壹、接口测试基础

一、接口测试概念

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 pytest

if __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.param
    print("请求之后:关闭数据库")

分层前后置

最外层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.coloradmin.cn/o/2190206.html

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

相关文章

C语言基础(9)之指针(1)

目录 1. 指针的概念 1.1 内存 1.2 指针是什么 1.3 指针变量的大小 2. 指针类型 2.1 指针类型的意义 2.2 指针类型意义的疑问 3. 野指针 3.1 野指针的概念 3.2 野指针的成因 3.3 如何规避野指针 4. 指针运算 4.1 指针 或 - 整数 4.2 指针 - 指针 4.3 指…

国庆普及模拟赛-5

题目链接: file:///C:/Users/Administrator/Desktop/%E4%B8%8B%E5%8F%91%E6%96%87%E4%BB%B61005/20241005.pdf T1: 题目分析:不需要进行模拟,想要获得分数最大化,只需要将大的数据相加,再减去小的数据。 …

AD7606 ADC的SPI驱动——FPGA学习笔记17

素材来源 米联客 一、AD7606简介 功能框图: 转换控制时序: AD7606 支持 2 种时序转换, 由于我们采用的时串行 SPI 模式, 本身 SPI 读取数据就会耽误很多时间, 所以必须采用第二种工作时序, 才…

呆仔君最新可用版本及作废版本说明截止日期10.5

呆仔君最新可用版本及作废版本说明 当前最新可用版本为 5.0 及以上版本。 截至今天,最新版本为 5.3。本次 5.3 版本的更新功能如下: 新增清悦阁(用于搜歌)新增手绘功能新增语音合成(包括卢本伟、刘华强、特朗普等人物…

[大语言模型-论文精读] 更大且更可指导的语言模型变得不那么可靠

[大语言模型-论文精读] 更大且更可指导的语言模型变得不那么可靠 目录 文章目录 [大语言模型-论文精读] 更大且更可指导的语言模型变得不那么可靠目录0. 摘要1. 核心内容3. 创新点4. 算法模型5. 实验效果6. 重要数据与实验结论7. 推荐阅读指数:8. 推荐理由 后记 论文…

【Java】—— 集合框架:Collections工具类的使用

目录 7. Collections工具类 7.1 常用方法 7.2 举例 7.3 练习 7. Collections工具类 参考操作数组的工具类:Arrays,Collections 是一个操作 Set、List 和 Map 等集合的工具类。 7.1 常用方法 Collections 中提供了一系列静态的方法对集合元素进行排序…

超声波清洗机什么牌子值得入手?推荐四款入手不亏的眼镜清洗机

在当今这个注重细节完美的时代,超声波清洗机凭借其卓越的清洁效率、深层渗透力及细腻的清洗效果,迅速赢得了家庭与专业场景的青睐。无论是精细的珠宝、眼镜框,还是金属装饰品、电子设备乃至医疗器具,超声波技术都能精准祛除隐秘处…

汇编语言笔记2

7.MASM,NASM,ATT,ARM的介绍 MASM:Windows下编译汇编指令的软件,可以在DOSBox下运行 NASM:优化版的MASM,主要用于Linux操作系统 ATT:Linux默认的汇编风格(但不友好) ARM:非PC(IOT设备)的汇编,比如写51单片机打开keil4的界面可以看到ARM 8.汇编 C语言 C 之间的关系 发展历程…

45集 ESP32 ADC按键程序编写

45集 ESP32 ADC按键程序编写 参考例程是 D:\Espressif\esp-adf\examples\checks\check_board_buttons 1、config 这个向下兼容的要加上,如果不加会有错误。 CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITYy 2、程序里面引入如下头文件 #include “periph_adc_but…

Python+Matplotlib可视化y = e^(1/x)函数

可视化y e^(1/x)函数: import numpy as np import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] Falsefig, ax plt.subplots(figsize(12, 8))def e_to_1_over_x(x):return np.where(x ! 0, np.exp(1/x), …

C初阶(十二)do - while循环 --- 致敬革命烈士

大家国庆看阅兵仪式和天安门升旗仪式了吗?岁月安好,只因有人负重前行。 ————山那边是什么 ————是烈士的英魄 ————是他们拼死保卫的新中国 ————河那边是什么 ————是绵延的战火 ————她望着远方泪一滴滴的落 ————和平来了 ——…

Arduino UNO R3自学笔记20 之 Arduino如何测定电机速度?

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:在学习了Arduino的相关基础知识后,现在做个综合应用,给旋转的电机测速。 1.实验目的 测定旋转电机的转速。 2.实验器材-编码器 …

比较搜索难度曲线5s1-4和4s1

在行列可自由变换的条件下,平面上的5点结构只有34个,4点结构有16个 (A,B)---6*n*2---(0,1)(1,0) 让B全是0。当收敛误差为7e-4,收敛199次取迭代次数平均值。让隐藏层节点数n分别为10,15,20,25,30&#xff…

一些关于上传数据-p7zip-full-压缩包的经验

目录 前言 7z 简介 Windows如何压缩tar.gz格式 一、下载7-ZIP 二、tar文件进一步压缩 说明: 前言 本人每次在linux服务器上执行apt-get install p7zip-full命令,都会有复杂依赖报错(因为实验过程中用到的依赖包太多了)&…

今日指数项目个股周K线功能实现

个股周K线功能实现 1 个股周K线功能实现功能分析 1)个股周K线功能原型分析 2)个股周K线功能接口分析 个股周K线数据主要包含: 股票ID、 一周内最高价、 一周内最低价 、周1开盘价、周5的收盘价、 整周均价、以及一周内最大交易日期&#x…

【Linux】-----进程第二弹(优先级,环境变量)

目录 一、进程优先级 是什么 为什么要有? 查看进程优先级 修改进程优先级 二、环境变量 命令行参数 概念 常见环境变量 查看环境变量 配置环境变量 内存级别修改(命令行修改,暂时) ①拷贝到系统路径下 ② 路径添加…

【Android】中级控件

其他布局 相对布局RelativeLayout RelativeLayout下级视图的位置是相对位置,得有具体的参照物才能确定最终位置。如果不设定下级视图的参照物,那么下级视图默认显示在RelativeLayout内部的左上角。用于确定视图位置的参照物分两种,一种是与…

算法专题三: 二分查找

目录 1. 朴素版: 二分查找2. 查找排序数组元素第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰顶索引6. 寻找旋转数组中的最小值7. 点名 博客主页: 酷酷学!!! 感谢您的关注~ 正文开始 1. 朴素版: 二分查找 题目思路: 仅需根据题意, 找出二段性, 正确更新下标…

Python编码系列—Python访问者模式:为对象结构添加新功能的艺术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

LLM端侧部署系列 | PowerInfer-2助力AI手机端侧部署47B大模型 (论文解读)

引言 简介 PowerInfer-2 概述 神经元感知的运行时推理 多态神经元引擎 内存中的神经元缓存 灵活的神经元加载 Neuron-Cluster-Level Pipeline 生成执行计划 执行 总结 0. 引言 一雨池塘水面平,淡磨明镜照檐楹。东风忽起垂杨舞,更作荷心万点声…