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中break语句的用法
May 14 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
Python中创建二维数组
Oct 17 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
在python里从协程返回一个值的示例
Feb 19 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
Python 图片处理库exifread详解
Feb 25 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
python使用shell脚本创建kafka连接器
Apr 29 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 文章采集正则代码
2009/12/28 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
简单的js表格操作
2016/09/24 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
Python绘图之柱形图绘制详解
2020/07/28 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
小学毕业感言50字
2014/02/16 职场文书
开学典礼感言
2014/02/16 职场文书
学习演讲稿范文
2014/05/10 职场文书
公司授权委托书样本
2014/09/15 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
师德承诺书2015
2015/04/28 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android