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网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
基于Python log 的正确打开方式
Apr 28 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
python实现定时发送qq消息
Jan 18 Python
基于python历史天气采集的分析
Feb 14 Python
django模板结构优化的方法
Feb 28 Python
django使用graphql的实例
Sep 02 Python
python 利用toapi库自动生成api
Oct 19 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 常用的系统函数
2017/02/07 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Table冻结表头示例代码
2013/08/20 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
JavaScript常用数学函数用法示例
2018/05/14 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Python群发邮件实例代码
2014/01/03 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python常见数据类型转换操作示例
2019/05/08 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
教师考核评语
2014/04/28 职场文书
运动员获奖感言
2014/08/15 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
国家助学金受助感言
2015/08/01 职场文书
入党申请书格式
2019/06/20 职场文书
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python