一、基础篇
1、requests常用方法及Response对象属性和方法详解
requests第三方库,主要用于发送http请求,做接口自动化
#请求方法如下:
requests.get(url=,params=)# 发送get请求
requests.post(url=,data=,json=)# 发送post请求
requests.delete()# 发送delete请求
requests.put()# 发送put请求
requests.request()# 最核心的方法:无论是说明请求,最后都是调用request方法
#响应信息的内容处理如下:
response = requests.request()
#返回字符串的数据
print(response.text)
#返回字节格式的数据
print(response.content)
#返回字典格式的数据
print(response.json())
#返回状态码
print(response.status_code)
#返回状态信息
print(response.reason)
#返回cookie信息
print(response.cookies)
#返回编码格式
print(response.encoding)
#返回响应头信息
print(response.headers)
同时,我也准备了一份软件测试视频教程(含接口、自动化、性能测试等内容),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取
软件测试视频教程观看处:
2023年B站最牛软件测试面试突击教程,字节大佬亲授,99%的人都能拿到offer
2、get、post方法传参注意点
get请求通过params传递参数。
post请求通过json或者data传参。它们的区别是什么?
data传参:
1.数据报文:dict字典类型,那么默认情况下请求头为:application/x-www-form-urlencoded,表示以form表单的方式传参,格式:a=1&b=2&c=3
2.数据报文:str类型,那么默认情况下为:text/plain,表示以文本方式传参(如果参数是dict格式需要转换成str格式传参)
json传参:
数据报文:不管是dict还是str类型,默认都是application/json,表示以json的方式传参,格式:{“a”:1,“b”:2,“c”:3}
json.dumps(data)# 序列化:把dict格式的数据转换成str格式
json.loads(data)# 反序列化:把str格式的数据转换成dict格式
总结:
data传参只能传简单的只有键值对的dict格式或者是str格式,json传参一般只能传dict格式(简单的和嵌套的都可以)
files传参——用于上传文件
涉及文件上传的接口,上传文件之前需要open文件,才能上传成功
#用open()方法找到文件,"rb"表示用二进制的方式打开
data={
"media":open(r"E:\shu.png","rb")
}
response = requests.post(url=url,files=data)#使用files上传文件
3、requests对于cookie鉴权以及session鉴权的处理
需要带请求头的接口以及需要cookie关联的接口如何测试
#通过正则表达式获取信息 从response.text数据中获取包含字段为'name="csrf_token"的第一个value值
csrf_token = re.search('name="csrf_token" value="(.*?)"',response.text)[1]
#请求需要带请求头的接口
headers={
"Accept":"",
"X-Requested-With":"XMLHttpRequest"
}
response = requests.post(url=rul,data=data,headers=headers,cookies=cookies)
cookie鉴权:网页的接口基本上都要做cookie鉴权
通过session实现cookie鉴权,这种常用
requests.session()
二、升华篇
pytest用例管理框架
pytest默认规则
1.py文件必须要以test_开头或者 _test结尾
2.类名必须以Test开头
3.测试用例(方法名)必须以test_开头
pytest用例管理框架的作用
1.发现测试用例:从多个py文件中通过默认的规则去找测试用例
2.执行测试用例:顺序和条件
3.判断测试结果:断言
4.生成测试报告:html、allure
用例管理框架有哪些?
python:unittest、pytest
java:junit、testng
pytest全局观
1.它可以和所有的自动化测试工具selenium、requests、appium结合实现web自动化,接口自动化以及app自动化
2.可以跳过用例以及失败用例重跑
3.结合allure生成美观的测试报告
4.和jenkins持续集成
5.拥有强大的插件库:
pytest-html——生成html测试报告
pytest-xdist——多线程运行
pytest-ordering——改变测试用例的执行顺序
pytest-rerunfailures——失败用例重跑
allure-pytest——生成allure测试报告
pytest运行方式
1、主函数运行(命令行的方式运行)
-v 输出更加详细的运行信息
-s 输出调试信息
-n 多线程运行
–reruns 失败用例重跑
–html 生成html测试报告
-m “分组名” 执行对应分组的用例
#运行pytest用例
if__name__ == '__main__':
pytest.main(['-vs','-n=2','--reruns=2','--html=./report.html'])#输出详细运行、调试信息,以2个线程运行,失败用例最多重跑2次,生成名为report.html的测试报告
2、实际工作中使用pytest.ini的配置文件来配置运行
pytest.ini如下:
[pytest]
addopts = -vs#addopts 用于配置执行命令
testpaths = ./testcase# testpaths 用于配置用例位置
python_files= Test_*.py #用于改变文件名的默认规则
python_classes = Test* #用于改变类名的默认规则
python_functions = test_* #用于改变用例名的默认规则
markers = ababa:maoyan #对用例进行分组 配合标记@pytest.mark.ababa 使用
前后置夹具,conftest.py
setup/teardown 在每个用例之前和之后执行一次
setup_class/teardown_class 在每个类之前和之后执行一次
实现部分前置:
@pytest.fixtrue
@pytest.fixtrue(scope=“作用域”,params=“数据驱动”,autouse=“自动执行”,ids=“自定义参数名”,name=“重命名”)
作用域:function、class、module、package/session
yield前为前置,yield后为后置
@pytest.fixtrue()通常和conftest.py文件一起使用
conftest.py名称是固定的,功能如下:
1.conftest.py文件能够单独存放@pytest.fixtrue()的一些方法,用处是可以在多个py文件之间共享前置后置
2.conftest.py里面的方法在调用时不需要导入,可以直接使用
3.conftest.py可以有多个,也可以有多个不同层级
接口自动化框架封装
统一请求方式——使用request()方法统一代替post、get等方法
接口关联的封装——通过一个关联的yaml文件(.yml)来实现
1.在根目录下新建extract.yml
2.在common文件夹下新建yaml_util.py,见下:
3.
import os
class YamlUtil:
#读取extract.yml文件
def read_exxtract_yaml(self,key):
with open(os.getcwd()+"/extract.yml",mode='r',encoding='uft-8') as f:
value = yaml.load(strean=f,Loader=yaml.FullLoader)
return value[key]
#写入extract.yml文件
def write_extract_yaml(self,data):
with open(os.getcwd()+"/extract.yml",mode='a',encoding='uft-8') as f:
yaml.dump(data=data,stream=f,allow_unicode=True)
#写入extract.yml文件
def clear_extract_yaml(self):
with open(os.getcwd()+"/extract.yml",mode='a',encoding='uft-8') as f:
f.truncate()
pytest接口断言——assert
pytest结合allure-pytest生成allure测试报告
1.官网下载allure——放到没有中文的路径下,然后把bin目录配置到环境变量的path里面
2.重启pycharm——通过allure --version验证是否能够正常使用
3.执行命令
1.在temp文件夹下生成son格式的临时文件报告—— --alluredir ./temp
2.通过临时的json格式文件在reports文件夹下生成allure报告——os.system(“allure generate 4.temp -o reports --clean”)
5.allure报告的定制化
三、集成篇
接口自动化测试框架YAML数据驱动的封装
@pytest.mark.parametrize(args_name,args_value)
args_name:参数名
args_value:参数值(可以是list、tuple、字典列表、字典元组等)在数据中有多少个值,那么接口用例就会执行多少次
import pytest
class TestApi:
#基础用法
@pytest.mark.parametrize('args',['baili','xuance','ali'])
def test_api1(self,args):
print(args)
#解包用法
@pytest.mark.parametrize('name,age',[['baili',13],['xuance',12],['ali',14]])
def test_api2(self,name,age):
print(name,age)
if __name__ == '__main__':
pytest.main(['test_api.py'])
YAML详解
YAML也是一种数据格式,主要作用如下:
用于全局配置文件:环境、数据库信息、账号信息、日志格式、报告名称
用于接口自动化里面的多一些复杂的多接口串联
用于编写接口测试用例
YAML语法规则:
区分大小写
和python一样也是通过缩进的方式表示层级关系(不同的是不能使用tab缩进,只能使用空格)
和缩进多少层无关,只和左边是否对齐有关系
#表示注释
数据组成方式:
name: xie
列表,用-开头的格式
- name1: xie
- name2: yang
- name3: yi
二者结合
-
name:获得统一的鉴权码token
request:
method:get
url:https://
data:
grant_type:client_credential
appid:wx21321321
secret:e339adk234123
validate:None
统一接口请求封装
将get、post方法等全部封装成同一方法,由传参决定请求方法
多种断言方式
多接口的场景串联
日志监控
包括日志文件生成 、控制台调试日志、邮件日志
写在最后
如需软件测试学习资料,可在公众号(互联网杂货铺)后台回复1,小编后面会逐步完善自己收藏的资料。
整理不易,给个关注点个赞吧,谢谢各位大佬!