日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

restframework单元测试

發布時間:2023/12/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 restframework单元测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

示例代碼:

from rest_framework import status from rest_framework.serializers import Serializer from rest_framework.test import APITestCase from apps.models import User class UserAPITests(APITestCase):# 此測試類運行結束后,會自動從數據庫里銷毀這份數據def setUp(self):# 在類里每個測試方法執行前會運行# 在此方法執行前,django會運行以下操作# 1. 重置數據庫,數據庫恢復到執行migrate后的狀態# 每個測試方法里對數據庫的操作都是獨立的,不會相互影響#簡單的數據在setUp里面創建kwargs = dict(mobile_phone='15999999999', password='111111')self.user = User.app_user_objects.create(**kwargs)#def tearDown(self):# 在類里每個方法結束執行后會運行,一般我們不用自己寫,系統會自動調用父類的tearDown方法#passdef test_app_user_login_success(self):#所有的測試方法都要以test_開頭,系統會自動測試以test_開頭的方法,test_后面跟的盡量寫清楚自己要干什么,不求簡潔,但求詳細,要讓別人一看就知道你在干什么"""APP用戶登錄接口成功情況"""# path使用硬編碼,盡量不要使用reverse反解析url,以便在修改url之后能及時發現接口地址變化,并通知接口使用人員path = '/api/api-token-auth/'data = {'mobile_phone': '15999999999', 'password': '111111'}response = self.client.post(path, data)# response.data是字典對象# response.content是json字符串對象#判斷接口返回的狀態碼是否與自己認為的一致self.assertEquals(response.status_code,status.HTTP_200_OK,'登錄接口返回狀態碼錯誤: 錯誤信息: {}'.format(response.content))self.assertIn('token', response.data, '登錄成功后無token返回')

常用斷言
assertFalse(expr, msg=None)
判斷返回的是否是False
  assertTrue(expr, msg=None)
  assertEqual(first, second, msg=None)
  判斷是否相等
  assertNotEqual(first, second, msg=None)
  assertAlmostEqual(first, second, places=None, msg=None, delta=None)
  assertNotAlmostEqual(first, second, places=None, msg=None, delta=None)
  assertSequenceEqual(seq1, seq2, msg=None, seq_type=None)
  assertListEqual(list1, list2, msg=None)
  assertTupleEqual(tuple1, tuple2, msg=None)
  assertSetEqual(set1, set2, msg=None)
  assertIn(member, container, msg=None)
  判斷member是否包含在container中
  assertNotIn(member, container, msg=None)
  assertIs(expr1, expr2, msg=None)
  assertIsNot(expr1, expr2, msg=None)
  assertDictEqual(d1, d2, msg=None)
  assertDictContainsSubset(expected, actual, msg=None)
  assertItemsEqual(expected_seq, actual_seq, msg=None)
  assertMultiLineEqual(first, second, msg=None)
  assertLess(a, b, msg=None)
  assertLessEqual(a, b, msg=None)
  assertGreater(a, b, msg=None)
  assertGreaterEqual(a, b, msg=None)
  assertIsNone(obj, msg=None)
  assertIsInstance(obj, cls, msg=None)
  assertNotIsInstance(obj, cls, msg=None)
  assertRaisesRegexp(expected_exception, expected_regexp,
   callable_obj=None, *args, **kwargs)
  assertRegexpMatches(text, expected_regexp, msg=None)
  assertNotRegexpMatches(text, unexpected_regexp, msg=None)

測試接口地址
  測試接口地址建議使用硬編碼,盡量不要使用reverse反解析url,原因是接口地址盡量避免改變,如果必須修改,需要以很明顯的方式來提醒開發人員以便開發人員通知接口使用人員。
  測試數據準備
  有如下兩種方法準備測試數據
  1.簡單的數據可以在setUp()里來創建;
  2.復雜數據可以使用fixtures來寫,并在賦值給測試類的fixtures屬性;
  fixtures數據示例
   [{{
   “model”: “myapp.person”,
   “pk”: 1,
   “fields”: {
   “name”: “Xiaoming”,
   “phone”: “123456”
   }
   },
   {
   “model”: “myapp.person”,
   “pk”: 2,
   “fields”: {
   “name”: “xiangyu”,
   “phone”: “963852741”
   }
   }
  ]

測試覆蓋率(coverage)
  在Pycharm里可以通用右鍵項目,選擇Run ‘Test:’ with Coverage來查看測試的覆蓋率。
使用Python 測試代碼覆蓋率統計工具 coverage.py
1:安裝

pip install coverage

2:生成覆蓋率統計文件

python -m coverage run --source='.' manage.py test --noinput 執行代碼覆蓋率統計,只需要通過coverage的run參數執行被統計代碼即可。 跑完后,會自動生成一個覆蓋率統計結果文件(data file):.coverage。如果要修改這個默認的文件名也可以,只要設置COVERAGE_FILE環境變量。

3:顯示統計結果

python -m coverage report 有了覆蓋率統計結果文件,只需要再運行report參數,就可以在命令里看到統計的結果。

總結

以上是生活随笔為你收集整理的restframework单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。