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 30 Python
Python实现发送QQ邮件的封装
Jul 14 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
使用pycharm生成代码模板的实例
May 23 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
Python networkx包的实现
Feb 14 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
使用keras根据层名称来初始化网络
May 21 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
python 调用API接口 获取和解析 Json数据
Sep 28 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实现的MySQL通用查询程序
2007/03/11 PHP
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
js实现日历
2020/11/07 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Python闭包思想与用法浅析
2018/12/27 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
什么是python的必选参数
2020/06/21 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
css3的transition属性详解
2014/12/15 HTML / CSS
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
户外亲子活动策划方案
2014/02/07 职场文书
简单租房协议书范本
2014/08/20 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB