restful接口开发实例_Restful接口开发与测试—接口测试
开发完接口,接下来我们需要对我们开发的接口进行测试。接口测试的方法比较多,使用接口工具或者Python来测试都可以,工具方面比如之前我们学习过的Postman
或者Jmeter
,Python脚本测试可以使用Requests
+ unittest
来测试。
测试思路
功能测试:数据的增删改查
异常测试:未授权,参数异常等
Postman测试
使用测试工具Postman测试结果如下所示:
user接口测试
查询所有用户
创建用户
修改用户
删除用户
未授权测试
groups接口测试
查询所有groups数据
修改group数据
删除groups
Requests+Unittest
在api
目录下面新建一个test_unittest.py
,代码实现如下:
tests_unittest.py
import requestsimport unittest
class UserTest(unittest.TestCase):def setUp(self): self.base_url='http://127.0.0.1:8000/users' self.auth=('51zxw','zxw20182018')
def test_get_user(self): r=requests.get(self.base_url+'/1/',auth=self.auth) result=r.json()
self.assertEqual(result['username'],'51zxw') self.assertEqual(result['email'],'51zxw@163.com')
def test_add_user(self): form_data={'username':'zxw222','email':'zxw668@qq.com','groups':'http://127.0.0.1:8000/groups/2/'} r=requests.post(self.base_url+'/',data=form_data,auth=self.auth) result=r.json()
self.assertEqual(result['username'],'zxw222')
def test_delete_user(self): r=requests.delete(self.base_url+'/11/',auth=self.auth)
self.assertEqual(r.status_code,204)
def test_update_user(self): form_data={'email':'2222@163.com'} r=requests.patch(self.base_url+'/2/',auth=self.auth,data=form_data) result=r.json()
self.assertEqual(result['email'],'2222@163.com')
def test_no_auth(self): r=requests.get(self.base_url) result=r.json()
self.assertEqual(result['detail'],'Authentication credentials were not provided.')
class GroupTest(unittest.TestCase):def setUp(self): self.base_url='http://127.0.0.1:8000/groups' self.auth=('51zxw','zxw20182018')
def test_group_developer(self): r=requests.get(self.base_url+'/7/',auth=self.auth) result=r.json()
self.assertEqual(result['name'],'Developer')
def test_add_group(self): form_data={'name':'Pm'} r=requests.post(self.base_url+'/',auth=self.auth,data=form_data) result=r.json()
self.assertEqual(result['name'],'Pm')
def test_update_group(self): form_data={'name':'Boss'} r=requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data) result=r.json()
self.assertEqual(result['name'],'Boss')
def test_detele_group(self): r=requests.delete(self.base_url+'/6/',auth=self.auth)
self.assertEqual(r.status_code,204)
if __name__ == '__main__': unittest.main()
Django自带测试模块
打开api
目录下面的tests
文件,编写如下测试代码
tests.py
from django.test import TestCaseimport requests
# Create your tests here.class UserTest(TestCase):def setUp(self): self.base_url='http://127.0.0.1:8000/users' self.auth=('51zxw','xxxxx')
def test_get_user(self): r=requests.get(self.base_url+'/1/',auth=self.auth) result=r.json()
self.assertEqual(result['username'],'51zxw') self.assertEqual(result['email'],'zxw886@qq.com')
# @unittest.skip('skip add user')def test_add_user(self): form_data={'username':'zxw222','email':'zxw668@qq.com','groups':'http://127.0.0.1:8000/groups/2/'} r=requests.post(self.base_url+'/',data=form_data,auth=self.auth) result=r.json()
self.assertEqual(result['username'],'zxw222')
# @unittest.skip('skip test_delete_user')def test_delete_user(self): r=requests.delete(self.base_url+'/11/',auth=self.auth)
self.assertEqual(r.status_code,204)
def test_update_user(self): form_data={'email':'2222@163.com'} r=requests.patch(self.base_url+'/2/',auth=self.auth,data=form_data) result=r.json()
self.assertEqual(result['email'],'2222@163.com')
def test_user_already_exists(self): form_data = {'username': 'zxw222', 'email': 'zxw668@qq.com', 'groups': 'http://127.0.0.1:8000/groups/2/'} r = requests.post(self.base_url + '/', data=form_data, auth=self.auth) result = r.json()#预期返回值:{"username":["A user with that username already exists."]} self.assertEqual(result['username'][0], 'A user with that username already exists.')
def test_no_auth(self): r=requests.get(self.base_url) result=r.json()
self.assertEqual(result['detail'],'Authentication credentials were not provided.')
class GroupTest(TestCase):def setUp(self): self.base_url='http://127.0.0.1:8000/groups' self.auth=('51zxw','xxxxxx')
def test_group_developer(self): r=requests.get(self.base_url+'/3/',auth=self.auth) result=r.json()
self.assertEqual(result['name'],'Pm')
# @unittest.skip('skip test_add_group')def test_add_group(self): form_data={'name':'Leader'} r=requests.post(self.base_url+'/',auth=self.auth,data=form_data) result=r.json()
self.assertEqual(result['name'],'Leader')
def test_update_group(self): form_data={'name':'Boss'} r=requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data) result=r.json()
self.assertEqual(result['name'],'Boss')
def test_detele_group(self): r=requests.delete(self.base_url+'/6/',auth=self.auth)
self.assertEqual(r.status_code,204)
运行方式:打开cmd使用如下命令来运行即可:
D:\django_restful>python manage.py test
上面命令是默认测试全部的用例,如果想测试部分用例则可以使用如下命令:
测试指定的测试类
D:\django_restful>python manage.py test api.tests.UserTest
测试具体的某一条具体用例
D:\django_restful>python manage.py test api.tests.UserTest.test_get_user
报错相关
1.迁移数据库时没有权限写入
File "C:\Users\jli75\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 280, in query _mysql.connection.query(self, query)django.db.utils.InternalError: (7, "Error on rename of '.\\httprunnermanager\\#sql-1178_7.frm' to '.\\httprunnermanager\\djcelery_taskstate.frm' (Errcode: 13 - Permission denied)")
原因:可能是杀毒软件通过阻止修改frm文件来解决此问题。通过在杀毒软件威胁防护高级选项中禁用按访问扫描,并杀毒软件设置为忽略这些扩展名来解决此问题
迁移数据库时没有清除之前的迁移文件
migrations
File "C:\Users\jli75\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 280, in query _mysql.connection.query(self, query)_mysql_exceptions.OperationalError: (1050, "Table 'djcelery_crontabschedule' already exists")
解决方案:删除migrations
文件夹即可。
setting配置错误
raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1"))
解决方案:Django2.1不再支持MySQL5.5,必须5.6版本以上 可以使用如下命令 查看当前Mysql版本
mysql -Vmysql Ver 8.0.1-dmr for Win64 on x86_64 (MySQL Community Server (GPL))
更多干货
Restful接口开发与测试—集成Swagger
Restful接口开发与测试—Django安装
Restful接口开发与测试—Rest简介
Python接口自动化——Requests基础功能
Python接口自动化——Requests
Jmeter+Ant+Jenkins接口自动化测试平台
Jmeter+Ant+Jenkins接口自动化测试平台
Jmeter用例数据分离
Jmeter CSV文件管理与正则匹配
Jmeter变量设置
Jmeter简介与安装
断言与参数设置
Jmeter简介与安装
Postman批量执行与集成Jenkins
Mac 环境Appium自动化测试环境搭建
众里寻他千百度—Appium Android 元素定位方式
Android自动化测试设备弹窗处理
Appium iOS 元素定位与操作
Ubuntu+Docker+STF环境搭建
Anyproxy抓包代理安装使用
Python自动化日志收集
Android 测试工具——Monkeyrunner API
关注公众号,更多干货秒得到
restful接口开发实例_Restful接口开发与测试—接口测试相关推荐
- 开发android 输入法,Android输入法开发实例解析 Android开发技术
Android输入法开发实例解析 Android开发技术 2013 年 4 月 13 日 这里我们建立表1为BiHua,同时构建两个字段,字段1为"input"来存放输入的,字段2 ...
- web api接口开发实例_C# 物联网开发API接口系列(4)
C# 物联网开发API接口系列(四) #久爱物联网#MQTT# [提纲] 1)获取设备列表(某用户的) 2)单独检查设备是否存在合法 [正文] /// /// 获取设备列表 /// /// 令牌 // ...
- java restful开发规范_restful api 开发规范
1.协议 http && https 2.域名 https://api.example.com && https://example.org/api/ 3.版本 ht ...
- Python开发实例:TPYBoard开发板制作声光控开关
2019独角兽企业重金招聘Python工程师标准>>> 声光控开关在我们日常生活中已经非常普遍了,几乎每个小区的楼道里都能有声光控开关的影子.现在也逐渐出现了声光控的小夜灯,晚上起夜 ...
- eclipse java开发实例_eclipse+webservice开发实例
1.參考文献: 2.实例1(主要看到[2]) 2.1.系统功能: 开发一个计算器服务CalculateService,这个服务包括加(plus).减(minus).乘(multiply).除(divi ...
- MicroPython开发实例之TurniBit开发板DIY自动窗帘模拟系统
2019独角兽企业重金招聘Python工程师标准>>> 一.准备工作 üTurnipBit 开发板 一块 ü下载数据线 一条 ü微型步进电机(28BYJ-48 ...
- micropython控制板_MicroPython开发实例之TurniBit开发板DIY自动窗帘模拟系统
一.准备工作 üTurnipBit 开发板 一块 ü下载数据线 一条 ü微型步进电机(28BYJ-48) 一个 ü步进电机驱动板(ULN2003APG) 一块 ü光敏传感器 一个 üTurnipBit ...
- c mysql web开发实例教程_Web开发(六)MySql
数据库简介 数据库(DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩 ...
- java接口和实例_java – 接口和实例化
第二个声明是错误的: Then it goes on and says a paragraph or so later that "You can declare a variable to ...
最新文章
- Deployment
- Docker----在Docker中部署Asp.net core2.1以及修改发布
- 【cocostudio】发布资源在Cocos2d-x中如何使用
- nmap常用参数详解
- 【Makefile由浅入深完全学习记录7】Makefile中变量的高级主题下
- include包含头文件的语句中,双引号和尖括号的区别
- linux系统批量装机,PXE+Kickstart实现无人值守批量安装Linux
- pythonselenium上传图片视频_如何用selenium、python上传文件(图片)
- Unity3D 渲染统计窗口
- 9_python基础—数据序列(公共方法)
- JAVA 常用开发快捷键大全
- vmware使用技巧
- Html5 学习系列(三)增强型表单标签
- 2020 比特大陆 面经
- 全新版大学英语综合教程第二册学习笔记(原文及全文翻译)——1 - Learning, Chinese-Style(中国式的学习风格)
- 交换机设备登录账号权限1_交换机怎么设置 交换机配置方法【详解】
- 2020云课堂智慧职教答案计算机,2020云课堂智慧职教答案英语,云智慧职教题库,智慧职教测试答案...
- 硬盘数据恢复——误删除卷数据恢复
- 记录解决英文和阿拉伯文混合的字符串,在阿拉伯环境下靠左显示,但需要从右开始显示
- iOS IPv6测试环境搭建及服务器ipv6测试
热门文章
- 《转》不要过打折的生活,当你发现这些你有了,说明你开始成熟了
- linux-ubuntu下调出中文输入法
- (转)Windows 批处理实现 定时打开IE 延时一段时间后 关闭IE
- 2021-07-27-jeesite学习笔记
- Leetcode--152. 乘积最大子序列
- 怎么改变表单option标签直接字体大小_不起眼却非常重要的表单交互
- linux终端密码星星,如何获得您的sudo密码在Ubuntu中显示为星号 | MOS86
- 3dmax体积雾渲染不出来_【扮家家云渲染效果图】3Dmax体积光制作丛林光束|干货教程...
- python求助神器_python三大神器
- QT中的QButtonGroup