使用 requests 完成接口测试(一)

要使用 requests 方法需要安装第三方库

打开命令提示符键入:pip3 install requests

使用 GET 方法获取响应数据

import requests

r=requests.get(url='http://***.***.***.***:***/login/auth/',
             params={'name':'1'})

# 协议状态码
print('协议状态码',r.status_code)
# 响应数据
print('返回字符串',r.text)
print('返回二进制内容',r.content)
print('返回的是字典数据类型',r.json())
# 响应头
print('响应头',r.headers)

使用 POST 登录

r = requests.post(
    url='http://***.***.***.***/login/auth/',
    params={'username': 'admin', 'password': 'admin'},
    headers={'Content-Type': 'application/json;charset=UTF-8'})
print(json.dumps(r.json(), indent=True, ensure_ascii=False))

r = requests.post(
    url='http://***.***.***.***/login/auth/',
    data=json.dumps({'username': 'admin', 'password': 'admin'}),
    headers={'content-type': 'application/json'})
print(json.dumps(r.json(), indent=True, ensure_ascii=False))

params 是用来发送查询字符串,而 data 是用来发送正文的

根据请求头的数据形式判断使用的方法

  Content-Type: application/json;charset=UTF-8

   数据形式为 JSON 编码格式为 UTF-8

   请求头为 JSON ,但要以 DATA 返回参数,需要对请求参数进行序列化的处理

  Content-Type:application/x-www-form-urlencoded

   数据形式为 form表单,需要对请求参数进行序列化的处理

输出时序列化可以更好的查看返回数据

ensure_ascii 表示是否要转为 ASCII 码,默认打开 True ,那么转为 json 后中文会变成 ASCII 编码,False 中文还是中文,不会变为 ASCII 编码

分别使用 GET 和 POST 方法获取手机号归属地

'''获取手机号归属地'''
r=requests.get(
    url='http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo',
    params={'mobileCode':'手机号','userID':''})
print('请求地址:',r.url)
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print('请求头:',r.headers)
'''获取手机号归属地'''
r=requests.post(
    url='http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo',
    data={'mobileCode':'手机号','userID':''},
    headers={'content-type':'application/x-www-form-urlencoded'})
print('请求地址:',r.url)
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print('请求头:',r.headers)

'''拉勾网'''
r = requests.post(
    url='https://www.lagou.com/jobs/v2/positionAjax.json',
    data={
        'data': '自行获取'},
    headers={'content-type': 'application/x-www-form-urlencoded',
             'Cookie': '自行获取',
             'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
             'referer':'https://www.lagou.com/wn/jobs?labelWords=&fromSearch=true&suginput=&kd=%25E6%25B5%258B%25E8%25AF%2595%25E5%25BC%2580%25E5%258F%2591%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588'})
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print(json.dumps(r.json(),indent=True,ensure_ascii=False))

复杂信息处理,对拉勾网职位信息获取

def login():
    r=requests.post(
        url='http://***.***.***.***/login/auth/',
        json={'username':'用户名','password':'密码'},
        headers={'Content-Type': 'application/json;charset=UTF-8'})
    return r.json()['token']

def index():
    r=requests.get(
        url='http://***.***.***.***/interface/index',
        headers={'Authorization':'JWT {token}'.format(token=login())})
    print(r.text)
    assert r.json()['count']['api']==0

index()

登录并验证返回数据

  登陆后返回 token , index 函数中获取 token ,并提交主页验证身份;

  使用 assert 判断返回值 Api 个数

from requests.auth import HTTPBasicAuth

r=requests.get(
    url='http://***.***.***.***/v1/api/books',
    auth=HTTPBasicAuth(username='admin',password='admin'),
    timeout=180)
print(r.status_code)
print(r.json())

引入 HTTPBasicAuth 进行简单验证

timeout(超时等待)单位:秒

def login():
    r=requests.post(
        url='https://home.51cto.com/index?reback=https://www.51cto.com/&iframe=0&is_go_to_user_set_mobile=1',
        data={'_csrf':'自行获取',
              'LoginForm[username]':'用户名',
              'LoginForm[password]':'密码',
              'show_qr':0},
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
                 'Referer':'https://home.51cto.com/index?reback=https://www.51cto.com/',
                 'Content-Type':'application/x-www-form-urlencoded',
                 'Cookie':'自行获取'})
    print(r.status_code)
    print(r.text)
    print(r.cookies)
    # r.cookies获取set-cookies返回给客户端,sessionID
    return r.cookies

def profile():
    r=requests.get(
        url='https://edu.51cto.com/center/user/info/get-user-info',
        # 通过请求头cookies把返回的sessionID发送给服务器身份验证
        cookies=login())
    print(r.text)
    print(r.status_code)

profile()
def login(): s=requests.session() # 使用 session() 完成 cookie 传递 r=s.post( url='https://home.51cto.com/index?reback=https%3A%2F%2Fhome.51cto.com&iframe=0&is_go_to_user_set_mobile=1', data={'_csrf':'自行获取', 'LoginForm[username]':'用户名', 'LoginForm[password]':'密码', 'show_qr':0}, headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62', 'Referer':'https://home.51cto.com/index?reback=https://www.51cto.com/', 'Content-Type':'application/x-www-form-urlencoded', 'Cookie':'自行获取'}) print(r.text) print(r.status_code) return s def profile(): r=login().get( url='https://edu.51cto.com/center/user/info/get-user-info') print(r.text) print(r.status_code) profile()

使用不同方法访问51CTO个人页面

def apiTest(method,url,**kwargs):
    r=requests.request(method=method,url=url,**kwargs)
    return r

r=apiTest(
    method='post',
    url='http://***.***.***.***/login/auth/',
    json={"username":"用户名","password":"密码"},
    headers={'Content-Type': 'application/json;charset=UTF-8'}
)
print(r.status_code)
print(r.text)

重封装 requests(偷懒)简化参数设定

posted @ 2022-01-23 19:44  星德川  阅读(72)  评论(0编辑  收藏  举报