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内建数据结构详解
Feb 03 Python
python学生管理系统
Jan 30 Python
python 为什么说eval要慎用
Mar 26 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
Python实现UDP程序通信过程图解
May 15 Python
Pycharm Git 设置方法
Sep 15 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
详细总结Python常见的安全问题
May 21 Python
Python 如何解决稀疏矩阵运算
May 26 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
深入extjs与php参数交互的详解
2013/06/25 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
Python中的异常处理学习笔记
2015/01/28 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Django之模型层多表操作的实现
2019/01/08 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
船舶专业个人求职信范文
2014/01/02 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
运动会稿件100字
2014/02/21 职场文书
企业业务员岗位职责
2014/03/14 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
书法大赛策划方案
2014/06/04 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
行政诉讼答辩状
2015/05/21 职场文书
浅谈python中的多态
2021/06/15 Python