1. 程式人生 > 其它 >unittest---unittest跳過用例(轉載)

unittest---unittest跳過用例(轉載)

  我們在做自動化測試的時候,可能會遇到一些用例中間不用迴歸,想要進行跳過。直接註釋的話,程式碼量修改過大,顯然這個方法不妥,哪還有什麼方法?unittest這個自動化框架可以幫助我們完成這個操作

自動跳過用例

unittest中提供了一些跳過用例的裝飾器方法。我們可以通過這些裝飾器來幫我們完成這些操作

@unittest.skip()

表示:無條件跳過用例

def skip(reason):
    """
   無條件地跳過用例
    """
    def decorator(test_item):
        if not isinstance(test_item, type):
            @functools.wraps(test_item)
            def skip_wrapper(*args, **kwargs):
                raise SkipTest(reason)
            test_item = skip_wrapper

        test_item.__unittest_skip__ = True
        test_item.__unittest_skip_why__ = reason
        return test_item
    return decorator

@unittest.skipIf()

表示:如果條件為真,則跳過測試。

def skipIf(condition, reason):
    """
    如果條件為真,則跳過測試。
    """
    if condition:
        return skip(reason)
    return _id

@unittest.skipUnless()

表示:除非條件為真,否則跳過測試。

def skipUnless(condition, reason):
    """
   除非條件為真,否則跳過測試。
    """
    if not condition:
        return skip(reason)
    return _id

小試牛刀

閒話少說直接開始實戰,這裡我們一樣使用介面完成我們的測試,當然介面文件,還是我們的查詢歌曲介面(簡單,免費,還好用)

# coding:utf-8
import unittest
import requests

class   Music(unittest.TestCase):

    def select(self,name):
        url = 'https://api.apiopen.top/searchMusic'
        data = {
             "name":name
        }
        r = requests.post(url,data=data)
        b = r.json()['result'][0]['title']
        return b

    @unittest.skip("強制性跳過")
    def test01(self):
        b = '斷橋殘雪'
        a = self.select(b)
        self.assertEqual(b,a)
        print("用例1跳過")

    @unittest.skipIf(True ,'條件為真的時候跳過')
    def test02(self):
        a = '說好不哭'
        b = self.select(a)
        self.assertEqual(a,b)
        print("用例2跳過")

    @unittest.skipUnless(False ,'條件為假的時候跳過')
    def test03(self):
        a = '芒種'
        c = '抖音'
        b = self.select(a)
        try:
            self.assertIn(c,b,msg='\n抖音不存在芒種歌曲資訊中')
        except Exception as msg:
            print('錯誤資訊%s'%msg)
        print("用例3跳過")

    def test04(self):
        a = '像魚'
        b = self.select(a)
        self.assertEqual(a,b)
        print("用例4不跳過")

if __name__ == '__main__':
    unittest.main(verbosity=2)

通過程式碼可以發現我們對用例123進行了跳過,但是每個跳過的條件不同,執行後發現只有用例4沒有跳過,當然我們程式碼中也是隻有對用例4沒有跳過。

也可以從執行結果中看到我們一共跳過了3條用例,以及每條都是怎麼樣進行跳過的

有小夥伴們要問了,這個只是跳過單個用例,那麼我想跳過一個class中的所有用例呢?這還不簡單?直接把裝飾器放在class上面不就可以了。

# coding:utf-8
import unittest
import requests

@unittest.skip('強制性跳過')
class   Music(unittest.TestCase):

    def select(self,name):
        url = 'https://api.apiopen.top/searchMusic'
        data = {
             "name":name
        }
        r = requests.post(url,data=data)
        b = r.json()['result'][0]['title']
        return b

    def test01(self):
        b = '斷橋殘雪'
        a = self.select(b)
        self.assertEqual(b,a)
        print("用例1跳過")

    def test02(self):
        a = '說好不哭'
        b = self.select(a)
        self.assertEqual(a,b)
        print("用例2跳過")

    def test03(self):
        a = '芒種'
        c = '抖音'
        b = self.select(a)
        try:
            self.assertIn(c,b,msg='\n抖音不存在芒種歌曲資訊中')
        except Exception as msg:
            print('錯誤資訊%s'%msg)
        print("用例3跳過")

    def test04(self):
        a = '像魚'
        b = self.select(a)
        self.assertEqual(a,b)
        print("用例4不跳過")

if __name__ == '__main__':  
    unittest.main(verbosity=2)

通過執行結果發現已經把class中的四條用例全部都跳過了。

原文地址:https://www.cnblogs.com/qican/p/11868674.html