Pytest基本用法
1个回答
展开全部
1、pytest的规则:
①pytest支持 pip安装。
> pip install pytest
②即测试文件和测试函数必须以“test”开头。这也是在执行
“pytest”命令时并没有指定测试文件也可以执行 test_sample.py文件的原因,因为该文件名
以“test”开头。
③通过 main()方法执行测试用例呢?当然可以,pytest同样提供了
main()方法。
import pytest
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
if __name__ == '__main__':
pytest.main()
2、基本用法:
①Fixture通常用来对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境。
主要用到模块级别和函数级别的 Fixture。
setup_module/teardown_module:在当前文件中,在所有测试用例执行之前与之后
执行。
setup_function/teardown_function:在每个测试函数之前与之后执行。
setup/teardown:在每个测试函数之前与之后执行。这两个方法同样可以作用于
类方法
主要用到类级别和方法级别的 Fixture。
setup_class/teardown_class:在当前测试类的开始与结束时执行。
setup_method/teardown_method:在每个测试方法开始与结束时执行。
setup/teardown:在每个测试方法开始与结束时执行,同样可以作用于测试函数。
运行结果
②pytest是支持使用测试类的,同样必须以“Test”开头,注意首字母大写。
③调用顺序如下:setup_module>setup_class>setup_function>setup_method>setup>teardown>teardown_method>teardown_function>teardown_class>teardown_module
#coding:utf-8
import pytest
def multiply(a,b):
return a*b
#-------------------Fixture------------
def setup_module(module):
print("\nsetup_module,只执行一次,当有多个测试类的时候使用")
def teardown_module(module):
print("\nteardown_module,只执行一次,当有多个测试类的时候使用")
def setup_function(function):
print("\nsetup_function,在每个测试函数之前执行。")
def teardown_function(function):
print("\nteardown_function,在每个测试函数之后执行。")
def setup():
print("setup------每个测试方式都执行一次----------->")
def teardown():
print("teardown-----每个测试方式都执行一次--------->")
def test_multiply_3_4():
print('test_numbers_3_4')
assert multiply(3,4) == 12
def test_multiply_2_3():
print('test_strings_2_3')
assert multiply(2,3) == 6
class TestPytest1(object):
@classmethod
def setup_class(cls):
print("\nsetup_class,只执行一次")
@classmethod
def teardown_class(cls):
print("\nteardown_class,只执行一次")
def setup_method(self):
print("\nsetup_method,每个测试方法都执行一次")
def teardown_method(self):
print("\nteardown_method,每个测试方式都执行一次")
def setup(self):
print("setup-----每个测试方式都执行一次------------>>")
def teardown(self):
print("teardown----每个测试方式都执行一次---------->>")
def test_numbers_5_6(self):
print('test_numbers_5_6')
assert multiply(5,6) == 30
def test_numbers_6_6(self):
print('test_numbers_6_6')
assert multiply(6,6) == 36
if __name__ == "__main__":
pytest.main()
3、参数化:
当一组测试用例有固定的测试数据时,就可以通过参数化的方式简化测试用例的编写。
pytest本身是支持参数化的,不需要额外安装插件。
#pytest参数化
@pytest.mark.parametrize(
"base,exponent,expected",
[(2,2,4),
(2,3,8),
(1,9,1),
(0,9,0)],
ids=["case1","case2","case3","case4"]
)
def test_pow(base,exponent,expected):
assert math.pow(base,exponent) == expected
if __name__ == "__main__":
pytest.main()
4、运行测试:
“-s”参数用于关闭捕捉,从而从控制台输出打印信息;
“-v”参数用于增加测试用例冗长,打印详细的日志信息,方便定位问题。
1.运行名称中包含某字符串的测试用例
> pytest -k add test_assert.py
test_assert.py文件中,我们写了很多测试用例,其中有 4条是关于 add()功能的,并且在测试用例的名称上包含了“add”字符串,因此这里可以通过“-k”来指定在名称中包含“add”的测试用例。
pytest -k "类名"
pytest -k '方法名'
pytest -k ’类名 and not 方法名‘#运行类里面所有的方法,不包含某个方法
2.减少测试的运行冗长
> pytest -q test_assert.py
“-q”用来减少测试运行的冗长;也可以使用“--quiet”代替。
3.如果出现一条测试用例失败,则退出测试
> pytest -x test_fail.py
这在测试用例的调试阶段是有用的,当出现一条失败的测试用例时,应该先通过调试让这条测试用例运行通过,而不是继续执行后面的测试用例。
4.用例失败个数达到阈值停止运行。具体用法:
>pytest --maxfail=[num]
5.运行测试目录
> pytest ./test_dir
测试目录既可以指定相对路径(如 ./test_dir),也可以指定绝对路(D:\pytest\test_dir)
6.指定特定类或方法执行
> pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6
这里指定运行 test_fixtures_02.py文件中 TestMultiply类下的 test_numbers_5_6()方法,文件名、类名和方法名之间用“::”符号分隔。
7.通过 main()方法运行测试
import pytest
if __name__ == '__main__':
pytest.main(['-s', './test_dir'])
创建 run_tests.py文件,在文件中通过数组指定参数,每个参数为数组中的一个元素。
①pytest支持 pip安装。
> pip install pytest
②即测试文件和测试函数必须以“test”开头。这也是在执行
“pytest”命令时并没有指定测试文件也可以执行 test_sample.py文件的原因,因为该文件名
以“test”开头。
③通过 main()方法执行测试用例呢?当然可以,pytest同样提供了
main()方法。
import pytest
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
if __name__ == '__main__':
pytest.main()
2、基本用法:
①Fixture通常用来对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境。
主要用到模块级别和函数级别的 Fixture。
setup_module/teardown_module:在当前文件中,在所有测试用例执行之前与之后
执行。
setup_function/teardown_function:在每个测试函数之前与之后执行。
setup/teardown:在每个测试函数之前与之后执行。这两个方法同样可以作用于
类方法
主要用到类级别和方法级别的 Fixture。
setup_class/teardown_class:在当前测试类的开始与结束时执行。
setup_method/teardown_method:在每个测试方法开始与结束时执行。
setup/teardown:在每个测试方法开始与结束时执行,同样可以作用于测试函数。
运行结果
②pytest是支持使用测试类的,同样必须以“Test”开头,注意首字母大写。
③调用顺序如下:setup_module>setup_class>setup_function>setup_method>setup>teardown>teardown_method>teardown_function>teardown_class>teardown_module
#coding:utf-8
import pytest
def multiply(a,b):
return a*b
#-------------------Fixture------------
def setup_module(module):
print("\nsetup_module,只执行一次,当有多个测试类的时候使用")
def teardown_module(module):
print("\nteardown_module,只执行一次,当有多个测试类的时候使用")
def setup_function(function):
print("\nsetup_function,在每个测试函数之前执行。")
def teardown_function(function):
print("\nteardown_function,在每个测试函数之后执行。")
def setup():
print("setup------每个测试方式都执行一次----------->")
def teardown():
print("teardown-----每个测试方式都执行一次--------->")
def test_multiply_3_4():
print('test_numbers_3_4')
assert multiply(3,4) == 12
def test_multiply_2_3():
print('test_strings_2_3')
assert multiply(2,3) == 6
class TestPytest1(object):
@classmethod
def setup_class(cls):
print("\nsetup_class,只执行一次")
@classmethod
def teardown_class(cls):
print("\nteardown_class,只执行一次")
def setup_method(self):
print("\nsetup_method,每个测试方法都执行一次")
def teardown_method(self):
print("\nteardown_method,每个测试方式都执行一次")
def setup(self):
print("setup-----每个测试方式都执行一次------------>>")
def teardown(self):
print("teardown----每个测试方式都执行一次---------->>")
def test_numbers_5_6(self):
print('test_numbers_5_6')
assert multiply(5,6) == 30
def test_numbers_6_6(self):
print('test_numbers_6_6')
assert multiply(6,6) == 36
if __name__ == "__main__":
pytest.main()
3、参数化:
当一组测试用例有固定的测试数据时,就可以通过参数化的方式简化测试用例的编写。
pytest本身是支持参数化的,不需要额外安装插件。
#pytest参数化
@pytest.mark.parametrize(
"base,exponent,expected",
[(2,2,4),
(2,3,8),
(1,9,1),
(0,9,0)],
ids=["case1","case2","case3","case4"]
)
def test_pow(base,exponent,expected):
assert math.pow(base,exponent) == expected
if __name__ == "__main__":
pytest.main()
4、运行测试:
“-s”参数用于关闭捕捉,从而从控制台输出打印信息;
“-v”参数用于增加测试用例冗长,打印详细的日志信息,方便定位问题。
1.运行名称中包含某字符串的测试用例
> pytest -k add test_assert.py
test_assert.py文件中,我们写了很多测试用例,其中有 4条是关于 add()功能的,并且在测试用例的名称上包含了“add”字符串,因此这里可以通过“-k”来指定在名称中包含“add”的测试用例。
pytest -k "类名"
pytest -k '方法名'
pytest -k ’类名 and not 方法名‘#运行类里面所有的方法,不包含某个方法
2.减少测试的运行冗长
> pytest -q test_assert.py
“-q”用来减少测试运行的冗长;也可以使用“--quiet”代替。
3.如果出现一条测试用例失败,则退出测试
> pytest -x test_fail.py
这在测试用例的调试阶段是有用的,当出现一条失败的测试用例时,应该先通过调试让这条测试用例运行通过,而不是继续执行后面的测试用例。
4.用例失败个数达到阈值停止运行。具体用法:
>pytest --maxfail=[num]
5.运行测试目录
> pytest ./test_dir
测试目录既可以指定相对路径(如 ./test_dir),也可以指定绝对路(D:\pytest\test_dir)
6.指定特定类或方法执行
> pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6
这里指定运行 test_fixtures_02.py文件中 TestMultiply类下的 test_numbers_5_6()方法,文件名、类名和方法名之间用“::”符号分隔。
7.通过 main()方法运行测试
import pytest
if __name__ == '__main__':
pytest.main(['-s', './test_dir'])
创建 run_tests.py文件,在文件中通过数组指定参数,每个参数为数组中的一个元素。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
亚远景信息科技
2024-12-11 广告
2024-12-11 广告
上海亚远景信息科技有限公司是国内汽车行业咨询及评估领军机构之一,深耕于ASPICE、敏捷SPICE、ISO26262功能安全、ISO21434车辆网络安全领域,拥有20年以上的行业经验,专精于培训、咨询及评估服务,广受全球车厂及供应商赞誉,...
点击进入详情页
本回答由亚远景信息科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询