网站建设的主题,手机制作网站的软件,哪些网上订餐的网站做的好,wordpress用户数据同步壹、接口测试基础
一、接口测试概念 I、基础概念 是测试系统组件间接口的一种测试。 主要用于检测外部系统与系统间、内部子系统间的交互点#xff1b;测试重点检查数据的交换、传递和控制管理过程#xff0c;以及系统间的相互逻辑依赖关系。 内部接口调用相当于函数调用测试重点检查数据的交换、传递和控制管理过程以及系统间的相互逻辑依赖关系。 内部接口调用相当于函数调用外部接口调用大部分基于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, paramsNone, **kwargs) requests.post(url, dataNone, jsonNone, **kwargs) requests.put(url, dataNone, **kwargs) requests.delete(url, **kwargs) # 上诉调用此函数 requests.request(method, url, **kwargs) # 上诉调用此函数可以自动关联有cookie关联的接口 session.request(methodmethod, urlurl, **kwargs) methodmethod 请求方法 urlurl 请求路径 paramsNone get请求参数 dataNone post或者put请求参数 jsonNone post请求参数 headersNone 请求头 cookiesNone Cookie filesNone 文件上传 ———————————— authNone 鉴权token timeoutNone 超时处理 allow_redirectsTrue proxiesNone 设置代理 hooksNone 钩子函数 streamNone 文件下载 verifyNone 证书验证 certNone CA证书 # 生成一个session对象帮助保存客户端的会话信息 requests.session() II、接受响应 由response对象接收 响应响应码、响应信息、响应内容、响应头 响应内容一般有两种格式JSON格式和HTML格式 需要根据响应内容验证接口工作是否正常。 res requests.get(url, paramsNone, **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用例管理框架 pythonpytestunitest java: testngjunit 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_scopeNone,*args,scopefunction,paramsNone,autouseFalse,dsNone,nameNone)
scope“作用范围” scope:function 函数 scope:class 类 scope:module 模块 scope:session 会话 autouse “自动执行” 在一个文件设置的固件fixture只能在当前文件起作用。
若希望对所有py文件起作用需要结合conftest.py文件 pytest.fixture(scopefunction, autouseFalse, params[[baili,baili123]], ids[data1], namesql)
def exe_sql(request):print(请求之前查询数据库)yield request.paramprint(请求之后关闭数据库) 分层前后置 最外层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、yamlexcel、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 用于性能测试