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


Posted in Python onDecember 16, 2018

前言

在利用单元测试框架执行测试用例的过程中,有时只需要执行一部分用例,或者跳过某些暂不需要执行的用例,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 实现从程序外部向程序传递参数
  • 传入的第一个参数为脚本文件名
  • 传入程序的每一个参数以空格 隔开
  • 传入程序的参数均以字符串的类型存储,命令行中不需要加引号

三、自动化测试项目中如何一套代码多套环境运行

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

运行结果:

打开浏览器,导航到百度页面

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

需求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 (本地下载)

总结

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

Python 相关文章推荐
python实现代理服务功能实例
Nov 15 Python
Python实现的一个找零钱的小程序代码分享
Aug 25 Python
python使用range函数计算一组数和的方法
May 07 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
python一键升级所有pip package的方法
Jan 16 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python解决八皇后问题示例
Apr 22 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
使用Python自动化破解自定义字体混淆信息的方法实例
Feb 13 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
Python 如何反方向迭代一个序列
Jul 28 Python
python request 模块详细介绍
Nov 10 Python
python使用插值法画出平滑曲线
Dec 15 #Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 #Python
python实现一组典型数据格式转换
Dec 15 #Python
python判断计算机是否有网络连接的实例
Dec 15 #Python
Django model反向关联名称的方法
Dec 15 #Python
django orm 通过related_name反向查询的方法
Dec 15 #Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 #Python
You might like
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
javascript常用功能汇总
2015/07/05 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
大学生就业推荐信范文
2013/11/29 职场文书
上班上网检讨书
2014/01/29 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
周年庆典主持词
2014/04/02 职场文书
小学课外活动总结
2014/07/09 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS