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下的Mysql模块MySQLdb安装详解
Apr 09 Python
python中reduce()函数的使用方法示例
Sep 29 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
Python 线程池用法简单示例
Oct 02 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python如何使用input函数获取输入
Aug 06 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
记一次Django响应超慢的解决过程
Sep 17 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Python接口自动化之文件上传/下载接口详解
Apr 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
JS日历 推荐
2006/12/03 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
python字符串排序方法
2014/08/29 Python
python打开网页和暂停实例
2014/09/30 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python内建模块struct实例详解
2018/02/02 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
keras输出预测值和真实值方式
2020/06/27 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
智能电子应届生求职信
2013/11/10 职场文书
采购部岗位职责
2013/11/24 职场文书
主管竞聘书范文
2014/03/31 职场文书
数学教育专业求职信
2014/07/22 职场文书
财务稽核岗位职责
2015/04/13 职场文书
公司奖励通知
2015/04/21 职场文书
少年犯观后感
2015/06/11 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
java版 联机五子棋游戏
2022/05/04 Java/Android