python接口测试入门

本文介绍了如何入门Python接口测试,推荐了虫师大大提供的接口练习工具,并详细说明了下载、安装依赖、启动服务的步骤。通过使用requests库,演示了GET和POST请求的用法,强调了参数类型对结果的影响,鼓励读者自行实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是使用虫师大大写的接口练习的
接口练习工具:https://github.com/defnngj/learning-API-test
下载完后解压,在文件夹目录打开shell
安装依赖包:pip install -r requirements.txt
启动接口服务:python api_server.py

下面开始练习:
首先要import requests
接口测试例子

# r = requests.get('https://api.github.com/user',auth=('zhanzi123','zzy950714'))
#
# print(r.status_code)
# print(r.headers['Content-Type'])
# print(r.encoding)
# print(r.text)
# print(r.json())

先熟悉一下返回的结果构成

200
application/json; charset=utf-8
utf-8
{"login":"zhanzi123","id":47934259,"node_id":"MDQ6VXNlcjQ3OTM0MjU5","avatar_url":"https://avatars2.githubusercontent.com/u/47934259?v=4","gravatar_id":"","url":"https://api.github.com/users/zhanzi123","html_url":"https://github.com/zhanzi123","followers_url":"https://api.github.com/users/zhanzi123/followers","following_url":"https://api.github.com/users/zhanzi123/following{/other_user}","gists_url":"https://api.github.com/users/zhanzi123/gists{/gist_id}","starred_url":"https://api.github.com/users/zhanzi123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhanzi123/subscriptions","organizations_url":"https://api.github.com/users/zhanzi123/orgs","repos_url":"https://api.github.com/users/zhanzi123/repos","events_url":"https://api.github.com/users/zhanzi123/events{/privacy}","received_events_url":"https://api.github.com/users/zhanzi123/received_events","type":"User","site_admin":false,"name":null,"company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"public_repos":0,"public_gists":0,"followers":0,"following":0,"created_at":"2019-02-24T03:52:28Z","updated_at":"2019-10-14T12:25:40Z","private_gists":0,"total_private_repos":0,"owned_private_repos":0,"disk_usage":0,"collaborators":0,"two_factor_authentication":false,"plan":{"name":"free","space":976562499,"collaborators":0,"private_repos":10000}}
{'login': 'zhanzi123', 'id': 47934259, 'node_id': 'MDQ6VXNlcjQ3OTM0MjU5', 'avatar_url': 'https://avatars2.githubusercontent.com/u/47934259?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/zhanzi123', 'html_url': 'https://github.com/zhanzi123', 'followers_url': 'https://api.github.com/users/zhanzi123/followers', 'following_url': 'https://api.github.com/users/zhanzi123/following{/other_user}', 'gists_url': 'https://api.github.com/users/zhanzi123/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/zhanzi123/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/zhanzi123/subscriptions', 'organizations_url': 'https://api.github.com/users/zhanzi123/orgs', 'repos_url': 'https://api.github.com/users/zhanzi123/repos', 'events_url': 'https://api.github.com/users/zhanzi123/events{/privacy}', 'received_events_url': 'https://api.github.com/users/zhanzi123/received_events', 'type': 'User', 'site_admin': False, 'name': None, 'company': None, 'blog': '', 'location': None, 'email': None, 'hireable': None, 'bio': None, 'public_repos': 0, 'public_gists': 0, 'followers': 0, 'following': 0, 'created_at': '2019-02-24T03:52:28Z', 'updated_at': '2019-10-14T12:25:40Z', 'private_gists': 0, 'total_private_repos': 0, 'owned_private_repos': 0, 'disk_usage': 0, 'collaborators': 0, 'two_factor_authentication': False, 'plan': {'name': 'free', 'space': 976562499, 'collaborators': 0, 'private_repos': 10000}}

Process finished with exit code 0

一般的get请求可以使用两种方法,不过说到底还是一样`

'''一般get请求'''
'''方法一'''
# payload = {"q":"selenium"}
# r = requests.get("http://127.0.0.1:5000/search/",params=payload)
# print(r.json())
'''方法二'''
# r=requests.get("http://127.0.0.1:5000/search/?q=selenium")
# print(r.json())
{'code': 10200, 'data': ['selenium教程', 'seleniumhq.org', 'selenium环境安装'], 'message': 'success'}
{'code': 10200, 'data': ['selenium教程', 'seleniumhq.org', 'selenium环境安装'], 'message': 'success'}

下面试一下post请求

参数类型为:from-data/x-www-from-urlencode

payload = {'username':'admin','password':'a123456'}
r = requests.post("http://127.0.0.1:5000/login",data=payload)
print(r.json())
payload = {'username':'','password':'a123456'}
r = requests.post("http://127.0.0.1:5000/login",data=payload)
print(r.json())
payload = {'username':'admin','password':''}
r = requests.post("http://127.0.0.1:5000/login",data=payload)
print(r.json())
payload = {'username':'admin','password':'123456'}
r = requests.post("http://127.0.0.1:5000/login",data=payload)
print(r.json())
payload = {'username':''}
r = requests.post("http://127.0.0.1:5000/login",data=payload)
print(r.json())

传入参数不同有不同的结果

{'code': 10200, 'message': 'login success'}
{'code': 10103, 'message': 'username or passwrord is null'}
{'code': 10103, 'message': 'username or passwrord is null'}
{'code': 10104, 'message': 'username or password error'}
{'code': 10102, 'message': 'username or passwrord is None'}
'''post请求'''
'''参数类型为:json'''
# payload = {'name':'jack','age':'22','height':177}
# r = requests.post("http://127.0.0.1:5000/add_user",json=payload)
# print(r.json())
# payload = {'name':123,'age':123,'height':'xcv'}
# r = requests.post("http://127.0.0.1:5000/add_user",data=payload)
# print(r.json())
# payload = {'name':'admin','age':'22'}
# r = requests.post("http://127.0.0.1:5000/add_user",json=payload)
# print(r.json())
# payload = {'age':'22','height':177}
# r = requests.post("http://127.0.0.1:5000/add_user",json=payload)
# print(r.json())
# payload = {'name':'jack','age':'','height':177}
# r = requests.post("http://127.0.0.1:5000/add_user",json=payload)
# print(r.json())
{'code': 10200, 'data': {'age': '22', 'height': 177, 'name': 'jack'}, 'message': 'add success'}
{'code': 10105, 'message': 'format error'}
{'code': 10102, 'message': 'key null'}
{'code': 10102, 'message': 'key null'}
{'code': 10200, 'data': {'age': '', 'height': 177, 'name': 'jack'}, 'message': 'add success'}

'''post请求'''
'''带header的接口'''

header = {"Content-Type": "application/json",
            "token": "3d80caXELzU1aWmHwxl0TzW7jtterObm8l5EeAfipnhyaKmhFl8KdhFRvy4"}
r = requests.post("http://127.0.0.1:5000/header", headers=header)
print(r.json())
r = requests.post("http://127.0.0.1:5000/header")
print(r.json())
header = {}
r = requests.post("http://127.0.0.1:5000/header",headers=header)
print(r.json())
{'code': 10200, 'data': {'Content-Type': 'application/json', 'token': '3d80caXELzU1aWmHwxl0TzW7jtterObm8l5EeAfipnhyaKmhFl8KdhFRvy4'}, 'message': 'header ok!'}
{'code': 10200, 'data': {'Content-Type': None, 'token': None}, 'message': 'header ok!'}
{'code': 10200, 'data': {'Content-Type': None, 'token': None}, 'message': 'header ok!'}
`

```python
'''post请求'''
'''上传文件的接口'''
files = {'file':open(r'D:\log.txt','rb')}
r = requests.post("http://127.0.0.1:5000/upload", files=files)
print(r.json())
{'code': 10200, 'message': 'upload success!'}

自己尝试改了一下参考的例子

'''get请求一般用来获取该接口'''
r = requests.get("http://127.0.0.1:5000/phone/0")
print(r.json())
r = requests.get("http://127.0.0.1:5000/phone/1")
print(r.json())
for i in range(0,10):
    r = requests.get("http://127.0.0.1:5000/phone/"+str(i))
    print(r.json()['message'],end='--->')
    if 'success' in str(r.json()):
        print("存在编号为"+str(i)+"的手机",end='\n')
    else:
        print("不存在编号为"+str(i)+"的手机",end='\n')
{'code': 10101, 'message': 'The phone id is empty'}
{'code': 10201, 'data': {'id': 1, 'name': '小米手机', 'price': 1999}, 'message': 'get success'}
The phone id is empty--->不存在编号为0的手机
get success--->存在编号为1的手机
The phone id is empty--->不存在编号为2的手机
The phone id is empty--->不存在编号为3的手机
The phone id is empty--->不存在编号为4的手机
The phone id is empty--->不存在编号为5的手机
The phone id is empty--->不存在编号为6的手机
The phone id is empty--->不存在编号为7的手机
The phone id is empty--->不存在编号为8的手机
The phone id is empty--->不存在编号为9的手机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值