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 自动化表单提交实例代码
Jun 08 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
python 接口返回的json字符串实例
Mar 27 Python
python3模块smtplib实现发送邮件功能
May 22 Python
python3.6数独问题的解决
Jan 21 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
详细总结Python常见的安全问题
May 21 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python实现学生管理系统
2018/01/11 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
写给女生的道歉信
2014/01/14 职场文书
英语国培研修感言
2014/02/13 职场文书
开工典礼策划方案
2014/05/23 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
机关作风建设自查报告
2014/10/22 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
CentOS安装Nginx并部署vue
2022/04/12 Servers