1. 程式人生 > >python unittest TestCase間共享資料(全域性變數的使用)

python unittest TestCase間共享資料(全域性變數的使用)

使用unittest模組進行單元測試,涉及到以下場景

例如對某個實體,測試方法有建立,更新,實體查詢,刪除

使用unittest進行單元測試,可以在建立時候記錄下返回的ID,在更新、刪除等操作的時候就根據這個新建立的ID進行操作,這就涉及到不同的TestCase之間共享資料。

最初我在class TestCase(unittest.TestCase):裡增加變數,執行建立時候設定值,但是發現在執行其他方法時候值被清空了,說明這種方法不可行。

最後只好定義全域性變數,但是在區域性用的時候需要使用globals()['newid'] 來操作全域性變數。

例如以下例子,建立時候獲取ID,並設定,然後get的時候直接測剛才生成的ID,測delete時候就可以把這條資料刪除掉了

newid = None

class MonTemplateCase(unittest.TestCase):
    base = "http://localhost:8080/"

    def test_moncluster_temp_create(self):
        json = {"monitor_template":{"name":"testname1","desc":"desc2","dcid":"1","host_info":{"check_interval":"1","check_period":"5","max_check_attempts":"1","notification_interval":"1","notifications_enabled":"1","retry_interval":"1","contacts":"[1]"},"service_info":[{"id":"14","max_check_attempts":"1","notification_interval":"1","notifications_enabled":"1","retry_interval":"1","contacts":"[1]","check_period":"5","service_description":"CPU","check_command":"14!80 90","check_interval":"5"}]}}
        headers = {'content-type': 'application/json'}
        r = requests.post(self.base + "api/moncluster/template", data=simplejson.dumps(json),headers=headers)
        result = simplejson.loads(r.text)
        print "create result:", result
        if result['action'] is False:
            print result
        else:
            globals()['newid'] = result['data']
        self.assertEqual(True, result['action'])

    def test_comcluster_temp_get(self):
        global newid
        if newid is None:
            raise Exception('id is none cannot get')
        f = urllib2.urlopen(self.base + "api/moncluster/template/%s" % str(newid))
        result = simplejson.loads(f.read())
        print "get result:",result
        self.assertEqual(True, result['action'])