pytest
- https://docs.pytest.org/en/latest/contents.html#toc
使用pytest执行用例设置
编写规范
1、文件以test_
开头
2、类以Test
开头
3、方法以test_
开头
from src.calc import Calc
class TestA():
def test_1(self):
s = Calc()
assert s.add(3, 4) == 7
参数化@pytest.mark.parametrize
1、可以直接写入固定值
2、可以读取文件进行参数化yaml、json等
yaml:http://www.ruanyifeng.com/blog/2016/07/yaml.html
json:https://docs.python.org/3.7/library/json.html
-注:使用yaml.load
报错YAMLLoadWarning的处理--加上Loader=yaml.FullLoader
print(yaml.load(open("a.yaml"),Loader=yaml.FullLoader))
from src.calc import Calc
import pytest
class TestA():
@pytest.mark.parametrize(
'a, b, c', [
(1, 2, 3),
(4, 5, 9),
(2, 2, 4)
]
)
def test_1(self, a, b, c):
s = Calc()
assert s.add(a, b) == c
执行:
用例前置与后置处理
执行顺序:
1、setup_module 模块执行前置处理
2、setup_class 类执行前置处理
3、setup_method 用例执行前置处理
4、teardown_method 用例执行后置处理
5、teardown_class 类执行执行后置处理
6、teardown_module 模块执行后置处理
from src.calc import Calc
import pytest
def setup_module():
print("module执行前数据处理")
def teardown_module():
print("module执行完数据处理")
class TestA():
def setup_class(self):
self.s = Calc()
print("执行类前置动作setup_class")
def teardown_class(self):
print("执行类后置处理teardown_class")
def setup_method(self):
print("用例执行前处理")
def teardown_method(self):
print("用例执行后处理")
@pytest.mark.parametrize( 'a, b, c', [
(1, 2, 3),
(4, 5, 9),
(2, 2, 4)] )
def test_1(self, a, b, c):
assert self.s.add(a, b) == c
def test_2(self):
assert self.s.add(1, 2) == 3
用例执行顺序控制
pytest-order:https://pytest-ordering.readthedocs.io/en/develop/
@pytest.mark.run(order=3)
def test_1(self, a, b, c):
assert self.s.add(a, b) == c
@pytest.mark.run(order=1)
def test_2(self):
assert self.s.add(1, 2) == 3
@pytest.mark.run(order=2)
def test_3(self):
assert self.s.add(1, 2) == 3
使用allure输出报告
allure:https://docs.qameta.io/allure/#_pytest
安装
-python:pip install allure-pytest
-mac:brew install allure
-Windows:要安装Allure,请下载并安装Scoop,然后在Powershell中执行:scoop install allure
使用
pytest a.py --alluredir=log #log为执行结果保存位置,可使用绝对路径
allure serve log #阅读报告
报告保存位置
也可以使用allure generate [xml_report_path] -o [html_report_path]生成报告(需手动打开)
if __name__ == '__main__':
today = time.strftime('%Y%m%d')
nowtime = time.strftime('%H%M%S')
xml_path = './report/' + str(today) + '/' + str(nowtime) + '/xml'
report_path = './report/' + str(today) + '/' + str(nowtime) + '/report'
os.system('pytest test_pytest_Calc.py --alluredir ' + xml_path)
os.system('allure generate '+ xml_path + ' -o ' + report_path)