1、安装第三方库:pip3 install requests
2、编写一个登陆的代码:
from flask import Flask,jsonify
from flask_restful import Api,Resource,reqparse
app=Flask(__name__)
api=Api(app)
class LoginView(Resource):
def get(self):
return {'status':0,'msg':'ok','data':'this is a login page'}
def post(self):
parser=reqparse.RequestParser()
parser.add_argument('username', type=str, required=True, help='用户名不能为空')
parser.add_argument('password',type=str,required=True,help='账户密码不能为空')
parser.add_argument('age',type=int,help='年龄必须为正正数')
parser.add_argument('sex',type=str,help='性别只能是男或者女',choices=['女','男'])
args=parser.parse_args()
return jsonify(args)
api.add_resource(LoginView,'/login',endpoint='login')
if __name__ == '__main__':
app.run(debug=True,port=5000)
执行以上代码,结果为:

3、使用python执行代码
(1)get请求:
import requests
r=requests.get(
url=' http://localhost:5000/login')
print('协议状态码:',r.status_code)
print('响应头:',r.headers)
print('响应数据:',r.json())
print('响应数据:',r.text)
print('返回二进制的内容:',r.content)
print('响应时间:',r.elapsed.seconds)
print('cookies:',r.cookies)
执行以上代码,结果为:

(2)post请求:
import requests
import json
r=requests.post(
url='http://localhost:5000/login',
data=json.dumps({'username':'wuya',"password":"admin","age":18,"sex":"男"}),
headers={"Content-Type":"application/json"})
print(r.status_code)
print(r.json())
执行以上代码,结果为:
(3)验证错误信息
import requests
import json
import unittest
class ApiTest(unittest.TestCase):
def setUp(self):
self.url='http://localhost:5000/login'
self.data={'username':'wuya',"password":"admin","age":18,"sex":"男"}
self.headers={"Content-Type":"application/json"}
def test_login_get(self):
r=requests.get(
url=self.url)
self.assertEqual(r.status_code,200)
self.assertEqual(r.json()['status'],0)
self.assertEqual(r.json()['data'],'this is a login page')
def test_login_post(self):
r = requests.post(
url=self.url,
json=self.data,
headers=self.headers)
self.assertEqual(r.status_code, 200)
self.assertEqual(r.json()['username'],'wuya')
def test_login_username_null(self):
"""login服务验证,username参数为空的效验"""
r = requests.post(
url=self.url,
json={"password":"admin","age":18,"sex":"男"},
headers=self.headers)
self.assertEqual(r.status_code,400)
self.assertEqual(r.json()['message']['username'],'用户名不能为空')
def test_login_username_null(self):
"""login服务验证,password参数为空的效验"""
r = requests.post(
url=self.url,
json={'username':'wuya',"age":18,"sex":"男"},
headers=self.headers)
self.assertEqual(r.status_code,400)
self.assertEqual(r.json()['message']['password'],'账户密码不能为空')
def test_login_age_not_int(self):
"""login服务验证,验证年龄不为正整数的验证"""
r = requests.post(
url=self.url,
json={'username':'wuya',"password":"admin","age":'dsa',"sex":"男"},
headers=self.headers)
self.assertEqual(r.status_code,400)
self.assertEqual(r.json()['message']['age'],'年龄必须为正正数')
def test_login_sex_null(self):
"""login服务验证,效验性别不为男或者女的错误验证"""
r = requests.post(
url=self.url,
json={'username':'wuya',"password":"admin","age":"18","sex":"sadas"},
headers=self.headers)
self.assertEqual(r.status_code,400)
self.assertEqual(r.json()['message']['sex'],'性别只能是男或者女')
if __name__ == '__main__':
unittest.main(verbosity=2)
执行以上代码,结果为:

(4)实战
class ApiTest(unittest.TestCase):
def test_cunyou_001(self):
r=requests.post(
url='http://m.cyw.com/Home/ComSearch/search',
data={'k':'金燕'},
headers={'Content-Type':'application/x-www-form-urlencoded','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'})
self.assertEqual(r.status_code,200)
self.assertEqual(r.json()['procedure'],9)
def test_cunyou_002(self):
r = requests.post(
url='http://m.cyw.com/Home/ComSearch/search',
data={'k': '天沐温泉'},
headers={'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'})
print(r.json())
self.assertEqual(r.status_code, 200)
self.assertEqual(r.json()['procedure'],9)
def test_cunyou_003(self):
r = requests.post(
url='http://m.cyw.com/Home/ComSearch/search',
data={'k': '烧烤'},
headers={'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'})
self.assertEqual(r.status_code, 200)
self.assertEqual(r.json()['procedure'],6)
if __name__ == '__main__':
unittest.main(verbosity=2)
执行以上代码,结果:

浙公网安备 33010602011771号