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实现破解猜数游戏算法示例
Sep 25 Python
理论讲解python多进程并发编程
Feb 09 Python
Python中偏函数用法示例
Jun 07 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python中property属性的介绍及其应用详解
Aug 29 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
如何利用python给图片添加半透明水印
Sep 06 Python
tensorflow模型转ncnn的操作方式
May 25 Python
树莓派升级python的具体步骤
Jul 05 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
Python headers请求头如何实现快速添加
Nov 03 Python
scrapy实践之翻页爬取的实现
Jan 05 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
AJAX的使用方法详解
2017/04/29 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JS 控件事件小结
2012/10/31 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
js常见遍历操作小结
2019/06/06 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
详解Python中的日志模块logging
2015/06/19 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
python实现猜拳小游戏
2020/04/05 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
自考毕业自我鉴定范文
2013/10/27 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
《开国大典》教学反思
2014/04/19 职场文书
学生上课说话检讨书
2014/10/25 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
python基于tkinter实现gif录屏功能
2021/05/19 Python
Python办公自动化解决world文件批量转换
2021/09/15 Python
Python语言内置数据类型
2022/02/24 Python