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 相关文章推荐
在Django的URLconf中使用命名组的方法
Jul 18 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
python http基本验证方法
Dec 26 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
Python常见的pandas用法demo示例
Mar 16 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Python求解正态分布置信区间教程
Nov 20 Python
用Python画小女孩放风筝的示例
Nov 23 Python
Python3运算符常见用法分析
Feb 14 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
php数组去重实例及分析
2013/11/26 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
微信小程序实现留言板
2018/10/31 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
Python中Random和Math模块学习笔记
2015/05/18 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
windows下python安装pip方法详解
2020/02/10 Python
python如何建立全零数组
2020/07/19 Python
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
冰淇淋店的创业计划书
2014/02/07 职场文书
合作协议书范本
2014/04/17 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
销售2014年度工作总结
2014/12/08 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技