巧用PyUnit中unittest特性解決接口測試產生髒數據問題

巧用PyUnit中unittest特性解決接口測試產生髒數據問題


一、背景

測試數據創建後需要對其刪除,不然可能產生髒數據,對開發和測試、生產環境造成一定影響。其接口框架是基於Python,API規範基於REST。


二、產生原因

(1)改進前:清除資源的操作放在每個正向測試用例裏,沒有在setUp和tearDown中刪除。

(2)改進後:在setUp中初始化資源id=None,每次創建資源時會生產一個資源id,然後在tearDown中,判斷資源的id是否爲None,if不爲None,then delete 資源並將資源id重新賦值爲None。這樣不管有沒有執行成功,最終都會在tearDown中刪除被創建成功的資源,初始化工作放在setUp中。


三、代碼對比

(1)改進前:清除資源的操作放在每個正向測試用例裏,沒有在setUp和tearDown中刪除。代碼如下:

     def test_konwledges_check_by_list_ok(self):
        """
        lc知識點API:成功創建2個知識點後,批量查詢知識點詳細信息\
        """
        title = 'knowledges'
        flag = 0
        response = self.knowledge.add_knowledges(title, flag)
        message = "創建知識點接口返回失敗"
        code = 200
        data = self.rest_o.parse_response(response, code, message)
        self.knowledges_id1 = data['identifier']

        response = self.knowledge.add_knowledges(title, flag)
        message = "創建知識點接口返回失敗"
        code = 200
        data = self.rest_o.parse_response(response, code, message)
        self.knowledges_id2 = data['identifier']

        knowledge_id_str = [self.knowledges_id1, self.knowledges_id2]

        response = self.knowledge.check_konwledges_details_by_list(knowledge_id_str)
        #print 'response: ' + str(response)
        message = "批量查詢知識點詳細信息接口返回失敗"
        code = 200
        data = self.rest_o.parse_response(response, code, message)
        print data
        assert data[self.knowledges_id1]
        assert data[self.knowledges_id2]

        self.knowledge.delete_konwledges(knowledge_id1)#放在測試用例中刪除
        self.knowledge.delete_konwledges(knowledge_id2)#放在測試用例中刪除


(2)改進後:

a.setUp和tearDown中改進:


    def setUp(self):
        print 'start run KnowledgeTest(知識點接口)......'
        self.knowledge = Knowledge()
        self.lessons = Lessons()
        self.instructional = Instructional(id)
        self.teaching_material = TeachingMaterial()
        self.rest_o = CoRestful.Restful()
        self.rand_o = CoRand()
        self.knowledges_id = None
        self.knowledges_id1 = None
        self.knowledges_id2 = None
        self.knowledge_relation_id = None

    def tearDown(self):
        #判斷資源的id是否爲None,if不爲None,then delete 資源並將資源id重新賦值爲None<span style="font-family: Arial, Helvetica, sans-serif;">,</span>這樣不管有沒有執行成功,最終都會在tearDown中刪除被創建成功的資源
        if self.knowledge_relation_id != None:
            self.knowledge.delete_relation(self.knowledge_relation_id)
        if self.knowledges_id2 != None:
            self.knowledge.delete_konwledges(self.knowledges_id2)
        if self.knowledges_id1 != None:
            self.knowledge.delete_konwledges(self.knowledges_id1)
        if self.knowledges_id != None:
            self.knowledge.delete_konwledges(self.knowledges_id)
        print '------------------------------------------------------'


b.測試用例中將其刪除代碼註釋

def test_konwledges_check_by_list_ok(self):
        """
        lc知識點API:成功創建2個知識點後,批量查詢知識點詳細信息\
        """
        title = 'knowledges'
        flag = 0
        response = self.knowledge.add_knowledges(title, flag)
        message = "創建知識點接口返回失敗"
        code = 200
        data = self.rest_o.parse_response(response, code, message)
        self.knowledges_id1 = data['identifier']

        response = self.knowledge.add_knowledges(title, flag)
        message = "創建知識點接口返回失敗"
        code = 200
        data = self.rest_o.parse_response(response, code, message)
        self.knowledges_id2 = data['identifier']

        knowledge_id_str = [self.knowledges_id1, self.knowledges_id2]

        response = self.knowledge.check_konwledges_details_by_list(knowledge_id_str)
        #print 'response: ' + str(response)
        message = "批量查詢知識點詳細信息接口返回失敗"
        code = 200
        data = self.rest_o.parse_response(response, code, message)
        print data
        assert data[self.knowledges_id1]
        assert data[self.knowledges_id2]

        #註釋原在測試用例中刪除的代碼
        #self.knowledge.delete_konwledges(knowledge_id1)
        #self.knowledge.delete_konwledges(knowledge_id2)


四、總結

發現問題要多思考,並努力把其解決。



發佈了40 篇原創文章 · 獲贊 6 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章