postman接口测试—Restful接口开发与测试

本文介绍了如何使用Postman和Python的Requests库配合unittest进行接口测试,包括功能测试、异常处理(如未授权和参数异常),以及Django自带测试模块的使用实例。同时提到了数据库迁移时可能遇到的问题及其解决方案。
摘要由CSDN通过智能技术生成

开发完接口,接下来我们需要对我们开发的接口进行测试。接口测试的方法比较多,使用接口工具或者Python来测试都可以,工具方面比如之前我们学习过的Postman或者Jmeter ,Python脚本测试可以使用Requests + unittest来测试。

测试思路
  • 功能测试:数据的增删改查
  • 异常测试:未授权,参数异常等
Postman测试

使用测试工具Postman测试结果如下所示:

user接口测试

查询所有用户

创建用户

修改用户

删除用户

未授权测试

groups接口测试

查询所有groups数据

修改group数据

删除groups

Requests+Unittest

api目录下面新建一个test_unittest.py,代码实现如下:

tests_unittest.py

  1. import requests

  2. import unittest

  3. class UserTest(unittest.TestCase):

  4. def setUp(self):

  5. self.base_url='http://127.0.0.1:8000/users'

  6. self.auth=('51zxw','zxw20182018')

  7. def test_get_user(self):

  8. r=requests.get(self.base_url+'/1/',auth=self.auth)

  9. result=r.json()

  10. self.assertEqual(result['username'],'51zxw')

  11. self.assertEqual(result['email'],'51zxw@163.com')

  12. def test_add_user(self):

  13. form_data={'username':'zxw222','email':'zxw668@qq.com','groups':'http://127.0.0.1:8000/groups/2/'}

  14. r=requests.post(self.base_url+'/',data=form_data,auth=self.auth)

  15. result=r.json()

  16. self.assertEqual(result['username'],'zxw222')

  17. def test_delete_user(self):

  18. r=requests.delete(self.base_url+'/11/',auth=self.auth)

  19. self.assertEqual(r.status_code,204)

  20. def test_update_user(self):

  21. form_data={'email':'2222@163.com'}

  22. r=requests.patch(self.base_url+'/2/',auth=self.auth,data=form_data)

  23. result=r.json()

  24. self.assertEqual(result['email'],'2222@163.com')

  25. def test_no_auth(self):

  26. r=requests.get(self.base_url)

  27. result=r.json()

  28. self.assertEqual(result['detail'],'Authentication credentials were not provided.')

  29. class GroupTest(unittest.TestCase):

  30. def setUp(self):

  31. self.base_url='http://127.0.0.1:8000/groups'

  32. self.auth=('51zxw','zxw20182018')

  33. def test_group_developer(self):

  34. r=requests.get(self.base_url+'/7/',auth=self.auth)

  35. result=r.json()

  36. self.assertEqual(result['name'],'Developer')

  37. def test_add_group(self):

  38. form_data={'name':'Pm'}

  39. r=requests.post(self.base_url+'/',auth=self.auth,data=form_data)

  40. result=r.json()

  41. self.assertEqual(result['name'],'Pm')

  42. def test_update_group(self):

  43. form_data={'name':'Boss'}

  44. r=requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data)

  45. result=r.json()

  46. self.assertEqual(result['name'],'Boss')

  47. def test_detele_group(self):

  48. r=requests.delete(self.base_url+'/6/',auth=self.auth)

  49. self.assertEqual(r.status_code,204)

  50. if __name__ == '__main__':

  51. unittest.main()

Django自带测试模块

打开api目录下面的tests文件,编写如下测试代码

tests.py

 
  1. from django.test import TestCase

  2. import requests

  3. # Create your tests here.

  4. class UserTest(TestCase):

  5. def setUp(self):

  6. self.base_url='http://127.0.0.1:8000/users'

  7. self.auth=('51zxw','xxxxx')

  8. def test_get_user(self):

  9. r=requests.get(self.base_url+'/1/',auth=self.auth)

  10. result=r.json()

  11. self.assertEqual(result['username'],'51zxw')

  12. self.assertEqual(result['email'],'zxw886@qq.com')

  13. # @unittest.skip('skip add user')

  14. def test_add_user(self):

  15. form_data={'username':'zxw222','email':'zxw668@qq.com','groups':'http://127.0.0.1:8000/groups/2/'}

  16. r=requests.post(self.base_url+'/',data=form_data,auth=self.auth)

  17. result=r.json()

  18. self.assertEqual(result['username'],'zxw222')

  19. # @unittest.skip('skip test_delete_user')

  20. def test_delete_user(self):

  21. r=requests.delete(self.base_url+'/11/',auth=self.auth)

  22. self.assertEqual(r.status_code,204)

  23. def test_update_user(self):

  24. form_data={'email':'2222@163.com'}

  25. r=requests.patch(self.base_url+'/2/',auth=self.auth,data=form_data)

  26. result=r.json()

  27. self.assertEqual(result['email'],'2222@163.com')

  28. def test_user_already_exists(self):

  29. form_data = {'username': 'zxw222', 'email': 'zxw668@qq.com', 'groups': 'http://127.0.0.1:8000/groups/2/'}

  30. r = requests.post(self.base_url + '/', data=form_data, auth=self.auth)

  31. result = r.json()

  32. #预期返回值:{"username":["A user with that username already exists."]}

  33. self.assertEqual(result['username'][0], 'A user with that username already exists.')

  34. def test_no_auth(self):

  35. r=requests.get(self.base_url)

  36. result=r.json()

  37. self.assertEqual(result['detail'],'Authentication credentials were not provided.')

  38. class GroupTest(TestCase):

  39. def setUp(self):

  40. self.base_url='http://127.0.0.1:8000/groups'

  41. self.auth=('51zxw','xxxxxx')

  42. def test_group_developer(self):

  43. r=requests.get(self.base_url+'/3/',auth=self.auth)

  44. result=r.json()

  45. self.assertEqual(result['name'],'Pm')

  46. # @unittest.skip('skip test_add_group')

  47. def test_add_group(self):

  48. form_data={'name':'Leader'}

  49. r=requests.post(self.base_url+'/',auth=self.auth,data=form_data)

  50. result=r.json()

  51. self.assertEqual(result['name'],'Leader')

  52. def test_update_group(self):

  53. form_data={'name':'Boss'}

  54. r=requests.patch(self.base_url+'/6/',auth=self.auth,data=form_data)

  55. result=r.json()

  56. self.assertEqual(result['name'],'Boss')

  57. def test_detele_group(self):

  58. r=requests.delete(self.base_url+'/6/',auth=self.auth)

  59. self.assertEqual(r.status_code,204)

运行方式:打开cmd使用如下命令来运行即可:

  1. D:\django_restful>python manage.py test

上面命令是默认测试全部的用例,如果想测试部分用例则可以使用如下命令:

测试指定的测试类

  1. D:\django_restful>python manage.py test api.tests.UserTest

测试具体的某一条具体用例

  1. D:\django_restful>python manage.py test api.tests.UserTest.test_get_user

报错相关

1.迁移数据库时没有权限写入

  1. File "C:\Users\jli75\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 280, in query

  2. _mysql.connection.query(self, query)

  3. django.db.utils.InternalError: (7, "Error on rename of '.\\httprunnermanager\\#sql-1178_7.frm' to '.\\httprunnermanager\\djcelery_taskstate.frm' (Errcode: 13 - Permission denied)")

原因:可能是杀毒软件通过阻止修改frm文件来解决此问题。通过在杀毒软件威胁防护高级选项中禁用按访问扫描,并杀毒软件设置为忽略这些扩展名来解决此问题

  1. 迁移数据库时没有清除之前的迁移文件migrations
  2. File "C:\Users\jli75\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 280, in query

  3. _mysql.connection.query(self, query)

  4. _mysql_exceptions.OperationalError: (1050, "Table 'djcelery_crontabschedule' already exists")

解决方案:删除migrations文件夹即可。

  1. setting配置错误
 
  1. raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)

  2. 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版本

  1. mysql -V

  2. mysql Ver 8.0.1-dmr for Win64 on x86_64 (MySQL Community Server (GPL))

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值