目录
1、命令行
(1)nosetests --help
作用:查看有什么命令行参数
(2)nosetests -a
作用:匹配用例
需要使用插件库:from nose.plugins.attrib import attr
如何标记:@attr()
# -*- coding:utf-8 -*-
from nose.plugins.attrib import attr
@attr(tag="jifeiall")
def test1():
"""我爱中国"""
print("问问")
@attr("all")
def test2():
"""沃尔沃企鹅的气味"""
print("卫栖梧")
class Test_hh:
def __init__(self):
pass
def test3(self):
print("333333333333")
@attr(tag="ji")
def test4(self):
print("44444444")
如何运行
举例:匹配一个:nosetests -a tag=trial 用例path
匹配多个:nosetests -a tag=trial -m tag=lala 用例path
模糊匹配:nosetests -a tag=trial -m tag=lala 用例path
(2)插件
2、setup和teardown
3、用例跳过或分组
4、报告
(1)中文兼容
第三方包:pip install nose-html-reporting
找到包的位置:site-packages里面

修改__init__.py文件
(1)开始加上两句,将系统编码方式设置为utf-8
reload(sys)
sys.setdefaultencoding("utf-8")
(2)修改方法_format_output
o.decode('latin-1') 修改为o.decode('utf-8')
效果:
不修改前

修改后:


5、nose参数化
1、ddt
pip install ddt
只能装饰类中方法
下面有例子用ddt,掠过
2、parameterized
安装:pip install nose-parameterized
from parameterized import parameterized
@parameterized.expand([
("01",1,2,3),
("02",2,2,4),
("03",4,4,4),
])
def test(name, a, b, c):
assert a+b == c
from parameterized import parameterized
class TestAdd:
@parameterized.expand([
("01",1,2,3),
("02",2,2,4),
("03",4,4,4),
])
def test(self, name, a, b, c):
assert a+b == c
6、并行运行用例
(1)命令行
nosetests -s test_out_audio_m4a.py --processes=5
遇到问题

(2)设置超时时间
nosetests -s test_out_audio_m4a.py --processes=5 --process-timeout=3
我是修改了参数的默认值
vi /usr/lib/python2.7/site-packages/nose/plugins/multiprocess.py

(3)并行测试书写样式
# -*- coding:utf-8 -*-
import time
import ddt
from nose.plugins.attrib import attr
@ddt.ddt
class Test11:
def __init__(self):
pass
def setup(self):
print("setup")
def teardown(self):
print "teardown"
param=[1,2]
@attr(tag="all")
@ddt.data(*param)
def test_h1(self, t2):
time.sleep(1)
print t2
def test_h2(self):
time.sleep(2)
print 2
def test_h3(self):
time.sleep(2)
print 2
def test_h4(self):
time.sleep(2)
print 2
def test_h5(self):
time.sleep(2)
print 2
def test_h6(self):
time.sleep(2)
print 2
注意点:
1、如果要做所有用例之前运行一个的setup和tearDown,并行执行失效
# 在类里面使用次做一些用例集的初始化,并行执行就失效了
@classmethod
def setup_class(cls):
print("setup_class")
@classmethod
def teardown_class(cls):
print("teardown_class")
2、不使用class管理用例,setup和tearDown也是moudle级别的,也不能并行运行
# -*- coding:utf-8 -*-
import time
def setUp():
print("setup")
def tearDown():
print("tearDown")
def test_1():
print("test_1")
time.sleep(2)
def test_2():
print("test_2")
time.sleep(2)
def test_3():
print("test_3")
time.sleep(2)
def test_4():
print("test_4")
time.sleep(2)
(4)并行执行遇到问题
解决:原因是我的用例时在pycharm中写的就会这样,我就想兼容下,根据提示找到unittest的包修改问题
vi /usr/lib64/python2.7/unittest/result.py
开始部分添加
#reload(sys)
#sys.setdefaultencoding("utf-8")
todo:修改框架让并行运行可以执行moudle级别的setup
7、参数化用例单独运行方式
# -*- coding:utf-8 -*-
import time
import ddt
@ddt.ddt
class Test11:
param=[1,2]
@attr(tag="all")
@ddt.data(*param)
def test_h1(self, t2):
time.sleep(1)
print t2
执行:nosetests -v test_1.py

执行:nosetests -v test_1.py:Test11.test_h1_1_1




2519

被折叠的 条评论
为什么被折叠?



