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

壹、接口测试基础

一、接口测试概念

I、基础概念

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

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

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

II、优势

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

III、用例设计

原理:

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

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

3、客户端接受应答。

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

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

测试要点:

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

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

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

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

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

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


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

HTTP URL组成:

安装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接口自动化框架

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

原因:

①、去除冗余代码

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


、接口自动化测试引入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后执行


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

原因

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 用于性能测试

相关推荐
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar13 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805114 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_14 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机20 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机21 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 天前
drf初步梳理
python·django
每日AI新事件1 天前
python的异步函数
python