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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
python中split方法用法分析
Apr 17 Python
一份python入门应该看的学习资料
Apr 11 Python
Python的UTC时间转换讲解
Feb 26 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
Python assert语句的简单使用示例
Jul 28 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
基于PHP文件操作的详解
2013/06/05 PHP
php生成随机颜色的方法
2014/11/13 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python实现简易版计算器
2020/06/22 Python
python 删除非空文件夹的实例
2018/04/26 Python
tensorflow更改变量的值实例
2018/07/30 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
keras和tensorflow使用fit_generator 批次训练操作
2020/07/03 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
入党自我鉴定范文
2013/10/04 职场文书
法律专业应届本科毕业生求职信
2013/10/25 职场文书
人事档案接收函
2014/01/12 职场文书
助残日活动总结
2014/08/27 职场文书
品德与社会教学反思
2016/02/24 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
SpringBoot Http远程调用的方法
2022/08/14 Java/Android
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android