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中列表生成式的用法
Mar 31 Python
python中栈的原理及实现方法示例
Nov 27 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 Python
Python如何读取文件中图片格式
Jan 13 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
python实现自动打卡的示例代码
Oct 10 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
Pytest中skip skipif跳过用例详解
Jun 30 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 中的批处理的实现
2007/06/14 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
办公室驾驶员岗位职责
2013/11/15 职场文书
医院实习介绍信
2014/01/12 职场文书
财务会计专业求职信
2014/06/09 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
财务部岗位职责范本
2015/04/14 职场文书
遗愿清单观后感
2015/06/09 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
Python实现归一化算法详情
2022/03/18 Python