一、pytest收集用例规则:
1、默认从当前文件开始搜索测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索
2、搜索规则:
1)符合命名规则test_.py或者test.py
2)以test开头的函数名
3)以Test开头的测试类(没有init函数)当中,以test_开头的函数
二、pytest-mark
对测试用例打标签,在运行测试用例的时候,可根据标签名来过滤运行的用例。
使用方法:在测试用例/测试类前面加上:@pytest.mark.标记名
示例:@pytest.mark.smoke
可在一个用例上打多个标签,多次使用@pytest.mark.标签名即可
示例:
@pytest.mark.smoke
@pytest.mark.demo
def test_demo():
print("我是示例啦!!!")
三、pytest-定义fixture
fixture:即测试用例执行的环境准备和清理,在unittest中指setup/teardown/setclass/tearclass
fixture主要目的是提供一种可靠和可重复的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步
定义fixture:
把一个函数定义为fixture很简单,在函数声明之前加上@pytest.fixture
,表示此函数为测试环境数据的准备和清理。
那么在一个fixture内部如何区分环境准备、环境清理呢?
在函数内使用yield关键字
yield关键字以后的代码,就是环境清理的代码,即在测试用例执行完成之后会执行的代码。
fixture返回值:
fixture可以有返回值 以元组、或者列表的形式都可以,放在yield后面。示例:yield (driver,lg)
fixture定义之后的使用
fixture定义之后放在函数或者类的前面,@pytest.mark.usefixture
,函数使用定义的fixture
示例:
在TestCase
文件夹下新建conftest.py
文件,用来存放用到的fixture夹序
定义fixture @pytest.fixture
yield
分离前置和后置,返回值
可以定义多个fixture
测试类、测试用例 @pytest.mark.usefixtures("fixture函数名称")
四、pytest-参数化
相当于unittest
的ddt
使用方法:
在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数
列表数据:一组测试数据
五、pytest-重运行机制
pytest提供了失败重试机制:
插件名称: rerunfailures
安装方法: pip install pytest-rerunfailures
使用方式(命令行参数形式):
命令:pytest --reruns
重复次数
比如:pytest --reruns 2
表示:运行失败的用例可以重新运行2次
命令:pytest --reruns 重复次数 --reruns-delay 时间
次数之间的延时设置(单位:秒)
比如:pytest --reruns 2 --reruns-delay 5
表示失败的用例可以重新运行2次,第一次和第二次的间隔时间为5秒。
六、优化-pytest-html
需要安装pytest-html
插件
pytest可以生成多种样式的结果:
1、生成JunitXml格式的测试报告:命令:--junitxml=path
2、生成result log 格式的测试报告:命令:--resultlog=report\log.txt
3、生成Html格式的测试报告:命令:--html=report\test_one_func.html
七、pytest-allure报告
需要安装allure
pytest生成allure测试报告的命令参数 命令:--alluredir=/XXX/my_allure_results
allure安装方式及allure与Jenkins集成详见之后文章