当前位置: 首页 > 工具软件 > Nose > 使用案例 >

nose框架

舒枫涟
2023-12-01

nose

(仅作为个人笔记,如有雷同,请联系删除。。)

nose/nosetests,按照匹配规则收集测试 – [ 先收集,再执行 ]

1、安装:

	pip install nose

2、匹配:

a. Test/test 开头的文件、类名、方法名
b. **_Test/test** 的文件、类名、方法名

3、执行:【-s:执行并捕获输出,-q:简易模式,-v:详细模式,查看运行信息和调试信息】

运行所有:nosetests

运行单个测试文件:nosetests test_1001.py

运行整个包:nosetests test_case

运行某个模块:nosetests test_case.test_1002

运行某个case:nosetests test_case.test_1002:test_01_xx

运行不同模块下的不同case:nosetests --tests=test_case.test_1001:test_01_xx,test_case.test_1002:test_02_xx

4、工具nost.tools的使用:from nose.tools import nottest, istest

@nottest:不测试的case
@istest:指定为测试case,被修饰的方法无需匹配命名规则,也可被收集执行

5、setup和teardown:

  1. 包级别:setup() | tearadown() :放在__init__.py中,整个测试运行期间只执行一次
  2. 模块级别:setup_module() | teardown_module()
		def setup_module(module): 
			...
		def teardown_module(module): 
			...
  1. 类级别:setup_class() | teardown_class()
	@classmethod                    
	def setup_class(cls):
		 ...       
		 
	@classmethod    
 	def teardown_class(cls):
 	 	...
  1. 方法级别:
    1. 在类中:def setup(self): ... | def teardown(self): ...
    2. 不在类中:
from nose import with_setup
def my_setup_func(): 
	...  
def my_teardown_func():
	...
@with_setup(my_setup_func, my_teardown_func)
def test_01_xx():

6、标记执行——attr

from nose.plugins.attrib import attr
# 使用attr标记case
@attr(tag="one")
def test_01(): ...
@attr("all")
def test_02(): ...

# 执行
nosetests -a tag=one
nosetests -a tag=one -a all  # or ,case 匹配到一个attr就可运行
nosetests -a tag=one,all     # and,case 必须同时匹配到两个attr才能够被执行到

7、测试报告:【支持html和allure】

	插件:`pip install nose-html-reporting` 【注意:要兼容中文,需要修改nose-html-reporting,编码格式改为utf-8】

	执行:`nosetests  --with-html  --html-report=index.html`

8、nose参数化

	插件:`pip install nose-parameterized`

	使用:
from parameterized import parameterized
@parameterized.expand([ ("01", 1, 2, 3),
          				("02", 2, 3, 4),
   						("03", 3, 4, 5), 
   						])
def test_01_xx(name, a, b, c): 
	...
运行:
nosetests  test_01.py
nosetests  test_01.py:TestA1 . test_01_xx_0 ---> 单独运行
nosetests  test_01.py:TestA1 . test_01_xx_1
nosetests  test_01.py:TestA1 . test_01_xx_2

9、nose并发运行

	命令:`nosetests  --process=5  --process-timeout=10`
	
		--process:指定并发数量
		--process-timeout:设置超时时间

	注意:如果存在所有case之 前/后 运行一次的setup 和 teardown,并行执行会失效【eg:存在setup_class() 和 teardown_class()】,并发会失效;没有class时,setup() 和 teardown() 是module级别的,并发也会失效。
	
		 但是,如果有class,class中的setup(self) 和 teardown(self) 是不影响并发执行的。

10、失败运行模式

	使用:`nosetests  --failed`

		这样运行会记录失败的case,再次运行命令时,会只执行上次失败的case。使用--failed激活此模式。

11、pdb模式

	使用:`nosetests  --pdb`

12、nose跳过测试
使用方法:

from nose.plugins.skip import SkipTest
def test_01():
	raise SkipTest

13、nosetests可以直接运行unittest的case

14、其他常用命令:

-q:与-v相对,简易模式
-w WHERE:在这个目录中查找测试
-m REGEX:匹配这个正则表达式的文件、目录、class、function进行测试
--tests=NAMES:运行多个case [ 是以逗号分隔的list ]
-x:在第一个error/failed后停止运行测试
--nologcapture:禁用日志记录捕获插件,日志记录将保持不变
--with-coverage:启用覆盖率插件
--cover-erase:运行前清除之前收集的覆盖率统计信息
--cover-html:产生html覆盖率信息
--cover-html-dir=DIR:在目录中生成html覆盖率信息
--no-skkip:禁用SkipTest异常的特殊处理
--collect-only:收集和输出测试名称,只收集,不执行测试
 类似资料: