python+requests+pytest 接口自动化框架

2022-06-28 08:16:56

目录

一、requests库简介

二、requests库常用方法

三、request()返回的response对象

四、实战案例

post(url, data=None, json=None, **kwargs)

Postman中post的四种传参方式:

案例

今日内容:接口自动化之requests模块详解以及Cookie,Session关联处理

资源:python+requests+pytest接口自动化框架(1-4)-Python文档类资源-CSDN下载

一、requests库简介

1.requests是用来发送http请求以及接收http响应的python第三方库,主要用于做接口自
动化。
pip install requests

二、requests库常用方法

requests.get(url, params=None, **kwargs)**kwargs可变长度的字典
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.delete(url, **kwargs)
requests.request(method, url, **kwargs)  包含了上面所有的请求
底层方法:
    def request(self, method, url,
            params=None, data=None, headers=None, cookies=None, files=None,
            auth=None, timeout=None, allow_redirects=True, proxies=None,
            hooks=None, stream=None, verify=None, cert=None, json=None):
返回:响应的数据response
method:请求方式
url:请求路径
params:get请求传参
data和json:post或put传参。
headers:请求头
cookies:cookie信息
files:文件上传

三、request()返回的response对象

print(res.text) #返回body的text格式
{"access_token":"55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK","expires_in":7200}
print(res.json()) #返回body的dict格式---------重点--------

{'access_token': '55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK', 'expires_in': 7200}

print(res.content) #返回body的byte格式

b'{"access_token":"55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK","expires_in":7200}'

print(res.status_code) #返回状态码

200

print(res.reason) #返回状态信息

OK

print(res.cookies) #返回响应的cookie信息

<RequestsCookieJar[]>

print(res.encoding) #返回编码格式

utf-8

print(res.headers) #返回响应头

{'Connection': 'keep-alive', 'Content-Type': 'application/json; encoding=utf-8', 'Date': 'Thu, 14 Apr 2022 08:42:45 GMT', 'Content-Length': '194'}
print(res.request.method) #返回请求的数据
GET

四、实战案例

字典:dict
JSON:JSON字符串
json.loads()   把json字符串转化成dict
json.dumps()  把dict转化成json字符串

post(url, data=None, json=None, **kwargs)

Postman中post的四种传参方式:

form-data:可以传键值对,也可以传文件。

        请求头中 Content-Type:muilpart/form-data 表单的请求方式通过data传参 a=1&b=2

x-www-form-urlencoded:只能传键值对

     请求头中 Content-Type:application/x-www-from-urlencoded 表单的方式通过data传参

raw:text,javascript,json,html,xml

        Content-Type:text/plain
        Content-Type:application/javascript
        Content-Type:application/json   通过json传参(字典格式) {a:1,b:2}
        Content-Type:text/html
        Content-Type:application/xml
binary:把文件转化成二进制传参
     Content-Type:application/octent-stream通过data传参

总结:

通过data传参data:

场景一:表示表单传参
默认的请求头:Content-Type:application/x- www-from-urlencoded,
请求的格式是:a=1&b=2,
传的参数的类型:纯键值对的字典
场景二:表示字符串传参,
默认请求头:text/plain
传的参数的类型:字符串类型

通过json传参:

默认请求头:Content-Type:application/json
传的参数类型: dict(键值对、非键值对都可以)

files:文件上传

案例

案例1:创建标签

    def test_create_flag(self):
        urls = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token="+TestApi.access_token
        datas = {"tag":{"name":"天草柑橘"}}
        res = requests.post(url=urls,json=datas)
        print(res.json())
{'tag': {'id': 5438, 'name': '\\u5929\\u8349\\u67d1\\u6a58'}}
替换成标准的unicode格式 单个\ 此时中文可以显示成功
print(json.loads(json.dumps(res.json()).replace(r"\\","\\")))

案例2:文件上传

    def test_file_upload(self):
        urls = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="+TestApi.access_token
        datas = {
            "media": open(r"../testfile/img/seola.jpg",'rb')
        }
        res = requests.post(url=urls,files=datas)
        print(res.json())
案例3:访问web项目
凡是web项目的接口,大部分都存在cookie关联。
 # 通过session会话去关联。session默认的情况下回自动的关联cookie。
 session = requests.session() 

 def test_phpwind_index(self):
        urls = "http://47.107.116.139/phpwind/"
        res = TestApi.session.request("get",url=urls)
        # 凡是web项目的接口,大部分都存在cookie关联。笨方法1 取cookie 好方法通过session关联
        # TestApi.phpwind_cookies = res.cookies
        # TestApi.csrf_token = dict(TestApi.phpwind_cookies)['csrf_token']
        TestApi.csrf_token = re.search('name="csrf_token" value="(.*?)"', res.text).group(1)


    def test_phpwind_login(self):
        urls = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
        datas = {
            "username": "王晓佳",
            "password": "123456",
            "csrf_token": TestApi.csrf_token,
            "backurl": "http://47.107.116.139/phpwind/",
            "invite": ""
        }
        headers = {
            "Accept": "application/json, text/javascript, /; q=0.01",
            "X-Requested-With": "XMLHttpRequest"
        }
        # 笨方法1 用cookie res = requests.post(url=urls, data=datas, headers=headers, cookies=TestApi.phpwind_cookies)
        res = TestApi.session.request("post",url=urls,data=datas,headers=headers)
        print(res.text)
  • 作者:天草柑橘
  • 原文链接:https://blog.csdn.net/weixin_41121249/article/details/124153003
    更新时间:2022-06-28 08:16:56