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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

restframework单元测试

發(fā)布時(shí)間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 restframework单元测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

示例代碼:

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):# 此測(cè)試類運(yùn)行結(jié)束后,會(huì)自動(dòng)從數(shù)據(jù)庫里銷毀這份數(shù)據(jù)def setUp(self):# 在類里每個(gè)測(cè)試方法執(zhí)行前會(huì)運(yùn)行# 在此方法執(zhí)行前,django會(huì)運(yùn)行以下操作# 1. 重置數(shù)據(jù)庫,數(shù)據(jù)庫恢復(fù)到執(zhí)行migrate后的狀態(tài)# 每個(gè)測(cè)試方法里對(duì)數(shù)據(jù)庫的操作都是獨(dú)立的,不會(huì)相互影響#簡(jiǎn)單的數(shù)據(jù)在setUp里面創(chuàng)建kwargs = dict(mobile_phone='15999999999', password='111111')self.user = User.app_user_objects.create(**kwargs)#def tearDown(self):# 在類里每個(gè)方法結(jié)束執(zhí)行后會(huì)運(yùn)行,一般我們不用自己寫,系統(tǒng)會(huì)自動(dòng)調(diào)用父類的tearDown方法#passdef test_app_user_login_success(self):#所有的測(cè)試方法都要以test_開頭,系統(tǒng)會(huì)自動(dòng)測(cè)試以test_開頭的方法,test_后面跟的盡量寫清楚自己要干什么,不求簡(jiǎn)潔,但求詳細(xì),要讓別人一看就知道你在干什么"""APP用戶登錄接口成功情況"""# path使用硬編碼,盡量不要使用reverse反解析url,以便在修改url之后能及時(shí)發(fā)現(xiàn)接口地址變化,并通知接口使用人員path = '/api/api-token-auth/'data = {'mobile_phone': '15999999999', 'password': '111111'}response = self.client.post(path, data)# response.data是字典對(duì)象# response.content是json字符串對(duì)象#判斷接口返回的狀態(tài)碼是否與自己認(rèn)為的一致self.assertEquals(response.status_code,status.HTTP_200_OK,'登錄接口返回狀態(tài)碼錯(cuò)誤: 錯(cuò)誤信息: {}'.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)

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

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

pip install coverage

2:生成覆蓋率統(tǒng)計(jì)文件

python -m coverage run --source='.' manage.py test --noinput 執(zhí)行代碼覆蓋率統(tǒng)計(jì),只需要通過coverage的run參數(shù)執(zhí)行被統(tǒng)計(jì)代碼即可。 跑完后,會(huì)自動(dòng)生成一個(gè)覆蓋率統(tǒng)計(jì)結(jié)果文件(data file):.coverage。如果要修改這個(gè)默認(rèn)的文件名也可以,只要設(shè)置COVERAGE_FILE環(huán)境變量。

3:顯示統(tǒng)計(jì)結(jié)果

python -m coverage report 有了覆蓋率統(tǒng)計(jì)結(jié)果文件,只需要再運(yùn)行report參數(shù),就可以在命令里看到統(tǒng)計(jì)的結(jié)果。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。