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

壹、接口测试基础

一、接口测试概念

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

相关推荐
菜鸟的人工智能之路6 分钟前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python7 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白9508 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式
喜欢猪猪14 分钟前
Django:从入门到精通
后端·python·django
一个小坑货14 分钟前
Cargo Rust 的包管理器
开发语言·后端·rust
bluebonnet2718 分钟前
【Rust练习】22.HashMap
开发语言·后端·rust
古月居GYH19 分钟前
在C++上实现反射用法
java·开发语言·c++
糖豆豆今天也要努力鸭20 分钟前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春36 分钟前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天44 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python