接口自动化--python+request+pytest

502 阅读5分钟

前提:安装好python

安装requests

在DOS窗口中输入命令:pip install requests

image.png

创建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,代表原始格式传参。

image.png

【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及参数命令 image.png

接口测试用例生成简易报告:

image.png

浏览器打开的html简易报告: image.png

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 分组名"

image.png

image.png

image.png