Python Unittest根据不同测试环境跳过用例的方法

唐可
唐可
发布时间:2026-10-13 | 3人浏览过
原创

本文详解Python unittest框架中跳过用例的三种装饰器用法,结合sys.argv实现命令行参数传递。通过自动化测试实例,展示如何配置一套代码支持多环境运行,并根据传入的环境URL动态跳过特定用例,提升测试脚本的复用性与灵活性。

前言

在执行单元测试用例时,经常遇到需要仅运行部分用例,或暂时跳过某些用例的场景。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']

要点总结:

  • sys.argv 的主要作用是实现从程序外部向程序传递参数。
  • 传入的第一个参数固定为脚本文件名。
  • 传递给程序的各个参数之间以空格进行分隔。
  • 所有传入程序的参数在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)

在命令行中执行上述脚本,并传入目标URL参数:

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)

在命令行中执行上述脚本,并传入非百度的URL参数:

python test_multiple_env_skip.py www.testclass.com

执行结果如下:

argv[-1] : www.testclass.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 (本地下载)

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对本站的支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表