前提:安装好python
安装requests
在DOS窗口中输入命令:pip install requests
创建python文件,输入requests
,按下快捷键:Alt+Enter键
自动导入requests包
requesets第三方库
requests库是用来发送http协议请求以及接受http协议响应的第三方库。主要用于接口自动化测试。
requests核心6个方法
1、requests.get(url, params=None, **kwargs) -----发送get请求
url是请求路径,params传递参数,**kwargs可变长度字典用于传递其他参数
2、requests.post(url, data
=None, json
=None, **kwargs) ----发送post请求
url是请求路径,data传递参数,json传递参数,**kwargs可变长度字典用于传递其他参数
请求的参数是:
(1).form-data
,代表这是表单传参
或者文件上传
。
type=file
Content-Type:multipart/form-data;
(2).x-www-form-urlencoded
,代表这是表单传参
。(k1=v1&k2=v2)
Content-Type:application/x-www-form-urlencoded(post()函数中使用
---data传参
)
(3).raw
,代表原始格式传参。
【text】---->Content-Type:text/plain(post()函数中使用
---data传参
)
【javascript】---->Content-Type:application/javascript
【json】---->Content-Type:application/json(post()函数中使用
---json传参
)
【html】---->Content-Type:text/html
【xml】---->Content-Type:application/xml
(4).binary
,代表原始格式传参。
Content-Type:application/octent-stream
requests中post()方法中的参数传参类型总结:
a: data传参表示表单传参:默认的请求头是Content-Type:application/x-www-form-urlencoded,请求参数的格式:(k1=v1&k2=v2),参数是纯键值对的dict,如:{key1:value1,key2:value2}
b: data传参表示文本传参:默认的请求头:text/plain。参数:str类型
c: json传参表示json传参:默认的请求头:application/json,参数是dict类型
json
是包括有键值对
和列表的Dict类型
。
3、requests.put()
4、requests.delete()
5、requests.request()
6、requests.session()
3个核心的请求头
:Content-Type、Accept、X-Requested-With
token、cookies、session都是鉴权方式
接口间存在cookies关联情况
,有2种解决方案:
1、cookies关联:前一个接口中取到响应的cookies,并创建一个全局变量赋值给它,在后一个接口请求参数中带上cookies。\
php_cookies = "" #定义空的类全局变量
res = requests.get(url=urls) #前一个接口获取到response对象
Test.php_cookies = res.cookies #前一接口获取到响应的cookies并赋值给全局变量
res = requests.post(url=urls, data=datas, headers=headers, cookies=TestApi.php_cookies) #后一个接口在请求参数中带上cookies全局变量
2、session会话关联:创建一个全局session对象,前一个接口中使用session对象请求,后一个接口中同样使用session对象请求,不是使用requests请求,参数就不用带上cookies,
session = requests.session() #session会话,创建全局session对象
Test.session.request("get", url=urls) #前一个接口使用session请求,不是requests请求
Test.session.request("post", url=urls, data=datas, headers=headers) #后一个接口使用session请求,不是requests请求,无需cookies传参
同一个会话session里的cookies是自动关联的
接口自动化引入用例管理框架:pytest
一、Pytest用例管理框架介绍
1.Pytest是一个非常成熟的python用例管理框架
2.它可以和自动化测试工具或框架selenium,requests,appium等实现自动化测试。
3.它可以和allure生成非常美观的报告,以及结合jenkins实现持续集成。
4.Pytest有很多的强大的插件。
pytest
pytest-html 生成简易报告
pytest-xdist 多线程
pytest-ordering 控制测试用例的执行顺序
pytest-rerunfailures 失败用例重跑
pytest-base-url 基础路径的配置
allure-pytest 生成allure报告
将需要安装的插件写入requirements.txt文件,在控制台输入如下命令进行全部安装
安装命令
:
`pip install ‐r requirements.txt`
二、Pytest的默认的测试用例的规则
1.模块名(即文件名
)必须以test_
或_test
开头
2.测试类
必须以Test
开头,并且不能有init方法
3.测试方法
必须以test_
开头
三、Pytest运行方式详解
1.命令行运行方式 (---不用在文件中使用main方法作为程序入口)
直接在控制台运行命令:pytest
参数:
-v 输出更详细的信息
-s 输出调试信息
-n 多线程
--reruns 失败用例重跑
--html 生成简易报告
pytest带参数命令:
pytest -vs ---->vs命令可以同时使用
pytet -n 2 --->2个线程同时跑
pytest -vs --reruns 1 --->失败用例重跑次数
pytest -vs --html=./reports/report.html --->在当前项目目录下创建reports文件夹,并将生成的简易html报告存放在report.html中
控制台输入:pytest及参数命令
接口测试用例生成简易报告:
浏览器打开的html简易报告:
2.主函数的运行方式
通过在项目根目录下创建run.py文件,编写如下主函数,并带上参数),直接运行该文件即可运行测试用例,就无需在测试用例文件中使用main方法,调用类中的方法进行测试
if __name__ == '__main__':
pytest.main(['-vs']) # 加参数是以列表的方式,参数同上命令行参数
3.通过pytest.ini文件运行
`注意:
1.不管是命令行方式还是主函数的方式,都会自动的读取这个配置文件
2.pytest.ini文件可以改变pytest默认的测试用例的规则
3.这个文件一般是放在项目的根目录下
pytest.ini置文件内容如下:
[pytest] ---代表pytest的配置文件
addopts = -vs ---配置运行参数
testpaths = ./com/yangying ---配置测试用例所在文件夹
python_files = test_*.py ---配置测试用例文件的规则
python_classes = Test* ---配置测试类的规则
python_functions = test_* ---配置测试方法的规则
base_url = http://www.baidu.com ---配置接口测试的基础路径
markers = ---给用例标记进行分组
smoke:冒烟测试 ---如分组模块为:冒烟
usermanager:用户管理 ---如分组模块为:用户管理
在用例上面加上,可执行不同模块的用例:
@pytest.mark.smoke
@pytest.mark.productmanager
一个用例也可以存在于多个模块中
在运行时参数后面需要加上 -m
,若需要同时运行多个模块用例,可使用or
连接,and用不了 :
-m "分组名 or 分组名"