1. 程式人生 > >Python Unittest - 根據不同測試環境跳過用例詳解

Python Unittest - 根據不同測試環境跳過用例詳解

本文章會講述以下幾個內容:
1、Unittest 如何跳過用例
2、如何使用sys.argv
3、自動化測試專案中如何一套程式碼多套環境執行


一、Unittest跳過用例

  • @unittest.skip(reason) , 直接跳過被裝飾的用例 ,reason用於填寫跳過用例的原因

  • @unittest.skipIf(condition, reason) , condition 如果為真,跳過被裝飾的用例,reason用於填寫跳過用例的原因

  • @unittest.skipUnless(condition, reason) , condition如果為假,跳過被裝飾的用例,reason用於填寫跳過用例的原因

例:

test_case_skip.py

# encoding:utf8

import unittest

class SkipExample(unittest.TestCase):

    @unittest.skip('用例 1 無條件跳過')
    def test_case_one(self):
        print('---用例 1 ---')

    @unittest.skipIf(2 > 1, '條件為True ,用例2 跳過')
    def test_case_two(self):
        print('---用例 2  ---')

    @unittest.skipUnless(2 < 1, '條件為False, 用例3 跳過')
    def test_case_three(self):
        print('---用例 3  ---')


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

執行結果:

test_case_one (__main__.SkipExample) ... skipped '用例 1 無條件跳過'
test_case_two (__main__.SkipExample) ... skipped '條件為True ,用例2 跳過'
test_case_three (__main__.SkipExample) ... skipped '條件為False, 用例3 跳過'




二、如何使用sys.argv

  • sys.argv 是一個數組 第一個元素是程式本身路徑
  • sys.argv 實現從程式外部向程式傳遞引數。

例:

how_to_use_argv.py

#encoding:utf8

from sys import argv
print('argv是一個數組:',argv)

使用命令列執行上述指令碼,外部傳入引數:1 2 3 4

python how_to_use_argv.py 1 2 3 4

執行結果

argv是一個數組: ['how_to_use_argv.py', '1', '2', '3', '4']

小結:

  1. sys.argv 實現從程式外部向程式傳遞引數
  2. 傳入的第一個引數為指令碼檔名
  3. 傳入程式的每一個引數以空格 隔開
  4. 傳入程式的引數均以字串的型別儲存,命令列中不需要加引號




三、自動化測試專案中如何一套程式碼多套環境執行

需求1:一套程式碼可以測試多個環境,不希望每次測試不同環境的時候都要去改程式碼裡面的URL,希望把程式碼裡面的URL引數化

以UI自動化為例:

test_multiple_env.py

# encoding:utf8

from selenium import webdriver
from sys import argv
import unittest
from time import sleep


class TestEnv(unittest.TestCase):

    def setUp(self):
        self.url = argv[-1]
        print(self.url)
        self.driver = webdriver.Chrome()

    def test_load_page(self):
        self.driver.get(self.url)
        sleep(10)


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestEnv('test_load_page'))
    runner = unittest.TextTestRunner()
    runner.run(suit)

執行命令列:

python test_multiple_env.py https://www.baidu.com/

執行結果:

開啟瀏覽器,導航到百度頁面
百度首頁


需求2:有些用例不能在預釋出環境或者生產環境執行,怎麼跳過該用例

UI自動化為例:

test_multiple_env_skip.py

# encoding:utf8

from selenium import webdriver
from sys import argv
import unittest
from time import sleep

URL = argv[-1]
print('argv[-1] : ', URL)


class TestEnv(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    @unittest.skipIf(URL != 'https://www.baidu.com' ,'不是百度首頁的URL,跳過用例test_load_page')
    def test_load_page(self):
        self.driver.get(URL)
        sleep(10)


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestEnv('test_load_page'))
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suit)

執行命令列:

python test_multiple_env_skip.py www.testclass.com

執行結果:

argv[-1] : www.baidu.com
test_load_page (__main__.TestEnv) ... skipped '不是百度首頁的URL,跳過用例test_load_page'

----------------------------------------------------------------------
Ran 1 test in 0.001s

OK (skipped=1)

小結

  • 從上面的例子可以瞭解,如何通過sys.argv傳入環境引數,雖然上文是用百度首頁作為例子,但同時引出,我們在做自動化測試時候,實現一套程式碼多環境執行思路

  • 命令列帶引數啟動指令碼,在Unittest中,可以實現不同的測試環境可以跳過用例




Github 原始碼地址:

https://github.com/SEtester/how_to_run_test_case