pythonunittest-根据不同测试环境跳过用例详解(代码片段)

snailrunning snailrunning     2023-02-04     642

关键词:

本文章会讲述以下几个内容:
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























pythonunittest--testcase类总结4,skip跳过用例或者跳过测试类

跳过测试类: 跳过某个用例:如果发现是跳过时,就不会执行setup和teardown,就执行停止执行用例了 查看详情

pythonunittest报告样式不显示

Pythonunittest报告样式不显示的原因可能是因为没有正确配置unittest框架,或者没有正确安装unittest模块。正确配置unittest框架的方法是,在项目的根目录中创建一个名为“tests”的文件夹,并在其中创建一个“__init__.py”文件,以及... 查看详情

仅针对一个子类的 Python unittest 跳过测试

】仅针对一个子类的Pythonunittest跳过测试【英文标题】:Pythonunittestskiptestforonlyonesubclass【发布时间】:2019-02-2810:34:57【问题描述】:假设我的单元测试设置如下:importunittestclassBaseTest(object):defsetup(self):self.foo=Nonedeftest_something(self)... 查看详情

根据环境或测试或产品激活不同的属性文件

】根据环境或测试或产品激活不同的属性文件【英文标题】:Activatedifferentpropertyfilesdependingonenvironmentortestingorprod【发布时间】:2020-04-2622:13:04【问题描述】:我不知道如何在SpringBoot中加载带有oracle相关凭据的属性文件,并且在... 查看详情

java示例代码_Maven,Jenkins——如何根据不同的测试环境构建项目

java示例代码_Maven,Jenkins——如何根据不同的测试环境构建项目 查看详情

如何以编程方式跳过摩卡中的测试?

...有一段代码,其中某些测试在CI环境中总是会失败。我想根据环境条件禁用它们。如何在运行时执行期间以编程方式跳过mocha中的测试?【问题讨论】:以编程方式跳过测试由this.skip()中的mochajs.org/#inclusive-tests和@z 查看详情

根据条件应用不同的装饰器

】根据条件应用不同的装饰器【英文标题】:Applydifferentdecoratorsbasedonacondition【发布时间】:2016-11-2518:23:00【问题描述】:我正在使用单元测试和鼻子参数化,并希望根据条件将不同的装饰器应用于测试。我有一个测试,我想跳... 查看详情

springboot的profiles根据开发环境和测试环境载入不同的配置文件

参考:https://www.cnblogs.com/bjlhx/p/8325374.html1、需要有一个默认的配置文件,然后一个正式的配置文件,一个测试的配置文件。激活配置项,默认的配置文件application.properties也会加载进去的。编程的方式指定生效的profile。默认的配... 查看详情

用pythonunittest搭建自动化测试框架

unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那你用unittest来应该是很轻松的,它们的工作方式都差不多。unittest核心工作原理unittest中最核心的四个概念是:testcase,testsuite,testrunner,testfixture。下面... 查看详情

phpunit跳过具有不同测试用例之间依赖关系的测试

】phpunit跳过具有不同测试用例之间依赖关系的测试【英文标题】:phpunitskippingtestswithdependenciesbetweendifferenttestcases【发布时间】:2017-11-2414:09:16【问题描述】:对于集成测试,我想重用测试结果。依赖项是通过注解定义的。对于... 查看详情

如何根据当前平台跳过 xUnit 中的特定测试

】如何根据当前平台跳过xUnit中的特定测试【英文标题】:HowdoIskipspecifictestsinxUnitbasedoncurrentplatform【发布时间】:2011-05-2404:59:41【问题描述】:我有一个在Windows上构建的程序集我想在Linux的单声道上运行xUnit测试。但是,我发现... 查看详情

pythonunittest控制用例的执行顺序(代码片段)

Pythonunittest控制用例的执行顺序……直接上正文用例的执行顺序和书写次序无关,默认是根据ASCII码的顺序加载测试用例,所以执行顺序如下:基于unittest的机制,介绍2种控制用例执行顺序的方式:方式一:... 查看详情

pythonunittest控制用例的执行顺序(代码片段)

Pythonunittest控制用例的执行顺序……直接上正文用例的执行顺序和书写次序无关,默认是根据ASCII码的顺序加载测试用例,所以执行顺序如下:基于unittest的机制,介绍2种控制用例执行顺序的方式:方式一:... 查看详情

如何实现根据环境切换不同配置?(代码片段)

首发于公众号:BiggerBoy前言在企业开发中,系统的配置信息往往会分不同的环境,如开发环境、测试环境、生产环境。当我们使用nacos作为配置中心时,一定会遇到的问题就是在应用中配置nacos的server-addr时测试环境的nacos地址和... 查看详情

vue-cli根据不同的环境打包(代码片段)

根据项目需要,通过vue-cli中的npmrunbuild打包到不同的环境,例如测试环境,预发布环境,线上环境,根据process.env分别进行接口的调用vue-cli中build中build.jsrequire(‘./check-versions‘)()//process.env.NODE_ENV=‘production‘varora=require(‘ora‘)v... 查看详情

如何根据工作流变量部署到不同的环境?

】如何根据工作流变量部署到不同的环境?【英文标题】:Howtodeploytodifferentenviromentsbasedonworkflowvariables?【发布时间】:2022-01-1122:40:41【问题描述】:我找到了followingproposal并对其进行了测试(参见代码示例),但无法使其工作。... 查看详情

pythonunittest控制用例的执行顺序(代码片段)

Pythonunittest控制用例的执行顺序……直接上正文用例的执行顺序和书写次序无关,默认是根据ASCII码的顺序加载测试用例,所以执行顺序如下:基于unittest的机制,介绍2种控制用例执行顺序的方式:方式一:... 查看详情

pythonunittest控制用例的执行顺序(代码片段)

Pythonunittest控制用例的执行顺序……直接上正文用例的执行顺序和书写次序无关,默认是根据ASCII码的顺序加载测试用例,所以执行顺序如下:基于unittest的机制,介绍2种控制用例执行顺序的方式:方式一:... 查看详情