2

Django REST フレームワークの RetrieveUpdateDestroyAPIView を使用して DELETE リクエストを発行しています。
オブジェクトが存在する場合、応答コードは 204 "no content" になります。DELETE リクエストを再度発行すると、レスポンス コードは 404 になるはずです。

これらは実際、Chrome 拡張機能の POSTMAN を使用したときに取得するステータス コードです。できます!はい!

次に、tests.py に入り、単体テストを作成する必要があるため、Python の Requests ライブラリが最適であると判断しました。しかし、単体テストで同じオブジェクトを 3 回続けて削除しても、削除操作を実行すると「200」の OK ステータス コードが返されます。

Requests ライブラリと Chrome 拡張 POSTMAN が異なるステータス コードを返す理由はありますか? ここで何が間違っていますか?

        #create a role, then delete it
        #response = self.test_POST_role()
        #print 'response in json of the test_role_POST() is %s : ' % response.json()
        url = 'http://127.0.0.1:8000/lakeshoreProperties/roles/'
        payload = {
            "name": "test",
            "description": "someone who tests"
        }
        headers = {'content-type': 'application/json'}
        response = requests.post(url, data=json.dumps(payload), headers=headers)
        responseDict = response.json()
        newly_created_role_id = responseDict['id']
        print 'newly created role id is: %s ' % newly_created_role_id

        #delete this newly created role
        url = 'http://127.0.0.1:8000/lakeshoreProperties/role/' + str(newly_created_role_id)
        print 'going to delete using this url: %s ' % url
        #headers = {'content-type': 'application/json'}
        delete_response = requests.delete(url)
        print 'delete_response text delete is : %s' % delete_response.text
        print 'delete_response code after first delete is is: %d' % delete_response.status_code
#         self.assertEquals(delete_response.status_code, 200)#should be 204 no content, but who knows why???
        #delete again, and get a 404 not found
        delete_response = requests.delete(url) 
        #should be 404 no content b/c you just deleted twice, obj should not be there!
        print 'delete_response code after second delete is: %d' % delete_response.status_code
#         self.assertEquals(delete_response.status_code, 404)
        print 'delete_response code after third delete is: %d' % delete_response.status_code
        self.assertEquals(delete_response.status_code, 404)

* *上記の単体テストでは、すべての status_codes が 200 です*

tests.py の実行時にコンソールに出力されるログの一部を以下に示します。

.newly created role id is: 59
going to delete using this url: http://127.0.0.1:8000/lakeshoreProperties/role/59
delete_response text delete is : {"id": 59, "name": "test", "description": "someone who tests"}
delete_response code after first delete is is: 200
delete_response code after second delete is: 200
delete_response code after third delete is: 200
F.{"id": 60, "name": "test", "description": "someone who tests"}
4

0 に答える 0