一。过滤用例
1.定义
pytest,是由第三方开发的一个python单元测试框架,与python自带的unittest有些类似(pytest不完全兼容unittest)。
与unittest相比:
优点:
1)编写用例比较灵活,不需要unittest那样先继承,setUp,tearDown这样的写法,pytest中可以在函数或者类中使用
2)pytest更加简洁灵活(筛选用例)
3)不需要加载用例,自动发现用例
4)pytest兼容unittest
5)可以使用测试插件
6)引用测试报告更加方便
不足之处:
1)unittest是python自带的标准库,不需要安装
2)不需要考虑与python版本兼容的问题
注意:
2.pytest发现用例的规则
1)模块名称以test_或者_test.py
2)测试类中不能有__init__(self)
3)方法名称必须以test_开头
4)pytest测试用例可以脱离类的形式,可以直接使用函数的形式;类也可以不集成unittest.TestCase
5)自动发现用例(以如上1)、2)、3)的规则),unittest需要加载用例,用例执行顺序是按照ASCII码的顺序执行,pytest是按照用例的先后顺序一条条执行。
3.过滤用例
1)先注册ini文件,添加标签名(pytest.ini)
2)打标签:需要在测试用例函数上面加 @pytest.mark.标签名 (标签名:步骤1)注册的标签名)
3)运行制定标签用例:
1.控制台命令:python -m "标签名"
2.python文件中执行:
if __name__ == "__main__":
#执行标签名为error_test的用例
pytest.main("-m error_test")
3.引用测试报告:
if __name__ == "__main__":
#新增一个时间戳
ts = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
#引入html测试报告,使用测试报告时需要先下载测试报告(pip install pytest-html)
pytest.main(["--html={}.html".format(ts), "-m error_test"])
#运行多个标签
pytest.main(["--html={}.html".format(ts),"-m error_test","-m suesses"])
4.测试夹具
1.测试夹具设置(需要写在固定py文件中 =‘conftest’,该文件一般与‘run.py’同级放置--也就是放在最外层)
@pytest.fixture(scope="function")
def driver():
'''
yield之前为前置条件
yield之后的为后置条件
yield 并排的driver是返回的参数,此处可以把driver返回
管理浏览器
function:每次执行都调用
class:一个类只执行一次
module:一个模块中只执行一次
:return:
'''
from selenium import webdriver
driver=webdriver.Chrome()
driver.implicitly_wait(WAIT_TIME)
yield driver
driver.quit()
2.测试夹具的使用:
pytest.main(["--html={}.html".format(ts),"-m error_test","-m suesses"])