接口自动化测试,一篇足矣

一、基础篇

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,小编后面会逐步完善自己收藏的资料。

整理不易,给个关注点个赞吧,谢谢各位大佬!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值