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)
执行以上代码,结果: