python requests接口自动化,python和request搭建接口自动化框架
接口测试之要求库requests.get()requests.post()提取代币信息提取甜饼干信息使用会议进行会话
requests.get()
将鼠标移至得到处,按住Ctrl,单击鼠标左键,查看源代码
def get(url,params=None,**kwargs): r 发送得到请求参数url:新:类:`请求对象的URL .param参数:(可选)字典,要在查询字符串中发送的元组或字节的列表,用于:class:`Request .param \ * \ * kwargs :`` request 采用的可选参数返回:类:`响应响应`对象:rtype:请求.响应 kwargs。设置默认值(“allow _ redirects”,True)返回请求( get ,url,params=params,**kwargs)从代码和注释中,可以得到这些信息:传的参数有url,数据,json,**kwargs,其中,网址是位置参数(必传参数);参数属于默认参数,默认为空,调用函数时可传可不传该默认参数的值;参数参数表示的请求格式是查询字符串* *克瓦查为包裹关键字参数,如果要添加该类型的参数,必须进行声明该参数的变量,加上关键字,才能解析出来导入请求URL 1= http://127。0 .0 .1:8000/axf/home/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CBC 2 f 4706 f 85 f 50 } RES=请求。post(URL,headers=headers)打印(RES)请求。帖子()将鼠标移至邮政处,按住Ctrl,单击鼠标左键,查看源代码
def post(url,data=None,json=None,**kwargs): r 发送邮政请求参数url:新:类:`请求对象的URL .参数数据:(可选)要在:类:`请求的正文中发送的字典、元组列表、字节或类似文件的对象param json:(可选)要在:类:`请求的正文中发送的数据数据param \ * \ * kwargs :`` request 采用的可选参数返回:类:`响应响应`对象:rtype:请求.响应返回请求( post ,url,data=data,json=json,**kwargs)从代码和注释中,可以得到这些信息:传的参数有url,数据,json,**kwargs,其中,网址是位置参数(必传参数);数据、json都是属于属于默认参数,默认为空,调用函数时可传可不传该默认参数的值数据参数表示的请求格式内容类型为application/x-www-form-urlencoded,表单形式数据参数表示的请求格式内容类型为应用程序/json,json形式;* *克瓦查为包裹关键字参数,如果要添加该类型的参数,必须进行声明该参数的变量,加上关键字,才能解析出来以用户注册为例
导入请求URL 1= http://127。0 .0 .1:8000/axf/register/ headers={ Content-Type : application/text , referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CB C2 f 4706 f 85 f 50 } data={ mobile _ phone : 17379745548 , pwd : 12345678 } RES=requests。帖子(URL这种提交方式会注册失败,因为在调用requests.post()方法时,无法解析头球变量的内容,标题需以包裹关键字参数方式传递
导入请求URL 1= http://127。0 .0 .1:8000/axf/register/ headers={ Content-Type : application/text , referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CB C2 f 4706 f 85 f 50 } data={ mobile _ phone : 17379745548 , pwd : 12345678 } RES=requests。帖子(URL而如果参数的提交方式是数据格式的形式,则可以通过该种方式提交,就不需要声明内容类型了,接口返回的内容,一般也是数据格式,获取接口返回内容,进行输出的时候,也可以使用数据格式的形式输出
导入请求URL 1= http://127。0 .0 .1:8000/axf/register/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CBC 2 f 4706 f 85 f 50 } data={ mobile _ phone : 17379745548 , pwd : 12345678 } RES=requests。post(URL,json=data,headers=headers)当然,也可以通过这种方式提交数据格式的数据
import requests URL 1= http://127 . 0 . 0 . 1:8000/axf/register/ Headers={ Content-Type : application/JSON , referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CB C2 f 4706 f 85 f 50 } data={ mobile _ phone : 17379745548 , pwd : 12345678 } RES=requests . post(URL比如用户登录后进行一些相应的操作时,这些接口在访问时需要提供令牌信息。因此,用户登录成功后,需要从登录界面返回的信息中提取令牌信息的值。
import requests URL 1= http://127 . 0 . 0 . 1:8000/axf/log in/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CBC 2 f 4706 f 85 f 50 } data={ mobile _ phone : 17379745548 , pwd : 12345678 } RES=requests . post(URL,JSON=data
{code: 0000 , statu: OK , data: {ID: 700963644, username: Apple , token : ejf 5232 e 929 ba 0197 b 33840 b 0 cbc2f 4706 f 8
Token=RES . JSON()[ data ][ Token ]令牌信息可以放在请求的头中,也可以放在请求的正文中,这取决于开发的接口文档。
有些页面,比如购物车页面,是通过界面访问的,需要用户信息返回购物车页面的商品信息。
import requests URL 1= http://127 . 0 . 0 . 1:8000/axf/log in/ Headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CBC 2 f 4706 f 85 f 50 } data={ mobile _ phone : 17379745548 , pwd : 12345678 } RES=requests . post(URL,json=data,headers=headers)有些项目通过令牌进行身份验证,而其他项目则通过cookie信息进行身份验证。
如果使用cookie信息进行认证,成功登录后,界面中不会返回相应的令牌信息,可能是这样的。
{code: 0000 , statu: OK , data: {ID: 700963644, username: Apple}}还有一些页面,比如购物车页面,如果此时通过界面访问,并且不携带用户信息,会提示您登录。
导入请求URL 1= http://127 . 0 . 0 . 1:8000/axf/log in/ URL 2= http://127 . 0 . 0 . 1:8000/axf/cart/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0cb C2 f 4706 f85f 50 } data={ mobile _ phone : 17379745548 , pw但是认证方式不是token,接口返回的参数内容中没有相关信息。如何测试接口?
用户登录成功后,服务器会有一个setcookie操作,服务器返回的内容会在头中存储cookie信息,服务器和浏览器通过session会话进行通信。
浏览器中的信息可能是这样的。这是由服务器定义的字段。名字可能有“会话”,但一般不会那么明显。
session id=CBC 2 f 4 ejf 5232 e 929 ba 0197 b 33840 b 0706 f 85 f 85对于用户认证,浏览器在与服务器进行对话时会通过该字段自动带来cookie信息,但是我们的代码中没有cookie信息,所以不会正确返回购物车页面的相关信息。
因此,在代码中,登录操作成功后,需要获取cookie信息。
导入请求URL 1= http://127。0 .0 .1:8000/axf/log in/ URL 2= http://127。0 .0 .1:8000/axf/cart/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0cb C2 f 4706 f85f 50 } data={ mobile _ phone : 17379745548 , pw获取cookiecookies=res1。cookies res2=请求。post(URL 2,json=data,headers=headers,cookies=cookies)print(res2。正文)当然,如果登录成功后接口返回的不是数据格式的数据,而是超文本标记语言格式的数据,那就可能需要使用正则去匹配到甜饼干信息,再进行一些处理操作
使用会议进行会话上面说述方法,每次都要带上饼干,有没有简单一点的操作?
还可以通过会议方式进行会话106 .请求库中,封装了会议方法
导入请求会话=请求session()URL 1= http://127。0 .0 .1:8000/axf/log in/ URL 2= http://127。0 .0 .1:8000/axf/cart/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CB C2 f 4706 f85f 50 } data={ mobile _ phone : 17379745548 , pw这种方式,也能成功访问购物车页面,可以理解为,会话实现了浏览器的功能,代码通过会议与服务端进行会话
但是,这里要注意,如果存在多个会议会话,会话之间的信息不流通使用
导入请求会话=请求session()URL 1= http://127。0 .0 .1:8000/axf/log in/ URL 2= http://127。0 .0 .1:8000/axf/cart/ headers={ referer-Media : BAIDUID=2e 929 ba 0197 b 330 b 0 CB C2 f 4706 f85f 50 } data={ mobile _ phone : 17379745548 , pwsession()res3=session 2。post(URL 2,json=data,headers=headers)print(res3。text)res3打印出来的内容,不是购物车页面的内容,因为会议2这个会话没有进行登录操作
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。