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


    开发完接口,接下来我们需要对我们开发的接口进行测试。接口测试的方法比较多,使用接口工具或者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使用如下命令来运行即可:

    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.迁移数据库时没有权限写入

    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
    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. _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))

    【软件测试行业现状】2023年干测试,约等于49年入国军。未来已寄..测试人该何去何从?【自动化测试、软件测试面试、性能测试】

  • 相关阅读:
    五、C#—字符串
    持久层框架之Mybatis
    EasyA正在帮助Sui为新一代Web3 App培养构建者
    【算法-回溯法】N皇后问题
    平平无奇的项目「GitHub 热点速览 v.22.10」
    Java毕业设计之评教评分教务管理系统springboot mybatis
    Visual Leak Detector 2.5.1 (VLD)下载、安装与使用
    通过开发者工具-网络排查响应时间过长的问题
    Vue中的数据代理
    【SA8295P 源码分析 (一)】55 - ifs2_la.img 镜像加载解析过程分析
  • 原文地址:https://blog.csdn.net/2301_79535618/article/details/134127037