本文章會講述以下幾個內容:
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']
小結:
- sys.argv 實現從程序外部向程序傳遞參數
- 傳入的第一個參數為腳本文件名
- 傳入程序的每一個參數以空格 隔開
- 傳入程序的參數均以字符串的類型存儲,命令行中不需要加引號
三、自動化測試項目中如何一套代碼多套環境運行
需求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