Python Unittest根據不一樣測試環境跳過用例詳解

雖然如今用的Katalon,不過這篇Unittest基本的用法講的仍是不錯的python

轉自:https://mp.weixin.qq.com/s/ZcrjOrJ1m-hAj3gXK9TjzQgit

本文章會講述如下幾個內容:github

  一、Unittest 如何跳過用例web

  二、如何使用sys.argv數組

  三、自動化測試項目中如何一套代碼多套環境運行less

 

1、Unittest跳過用例測試

 

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

  • @unittest.skipIf(condition, reason) , condition 若是爲真,跳過被裝飾的用例,reason用於填寫跳過用例的緣由url

  • @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 跳過'

  

2、如何使用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']

  小結:

  sys.argv 實現從程序外部向程序傳遞參數

  傳入的第一個參數爲腳本文件名

  傳入程序的每個參數以空格 隔開

  傳入程序的參數均以字符串的類型存儲,命令行中不須要加引號

  3、自動化測試項目中如何一套代碼多套環境運行

  需求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

相關文章
相關標籤/搜索