一.安装方式
1.安装命令:pip install pytest
2.html安装插件:pip install pytest-html
二.pytest执行指定测试用例
1.思想:通过对测试用例进行做标记,在执行测试用例的时候执行做标记的测试用例。
2.使用方法
在指定执行的测试用例上面做标记:@pytest.mark.标记名
例如:
@pytest.mark.smoke def test_loginpage(self): logging.info("*********登陆用例:正常场景:使用正确的用户名和密码登陆*********") xxxxxxxxxxxx相关代码xxxxxxxxxxxx
三.pytest收集测试用例
1.默认收集规则:默认在当前目录收集测试用例,即在哪个目录下运行pytest,就在哪个目录中搜索
2.搜索规则:
(1)以test_*.py或者*_test.py命名的文件
(2)以test_*开头的函数名
(3)以Test开头的测试类(类中没有def __init__(self)函数)中以test_*命名的函数。
注意:*代表任意字符
四.pytest参数化
1.使用方式:
在需要参数化的测试用例上面加上:@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并且作为测试用例的参数
此处的参数名用法类似于unittest里面所使用的@ddt.data的装饰的函数的作为测试用例的参数。
列表数据:一组测试数据。
五.pytest运行测试用例
常用方式:通过做标记执行用例pytest -m 标记名
1.指定测试模块:pytest test_mod.py
2.指定测试目录:pytest testing/(此处是相对路径)
3.通过关键字过滤:pytest -k "myclass and not method"
4.通过节点过滤:py模块名::类名::函数名 或 py模块名::函数名
六.pytest的fixture功能
1.思想:fixture的思想是测试用例的环境的准备和清理工作。类似于unittest里面的Setup和tearDown函数功能类似,unittest中的Setup是将执行测试用例前的准备放到此函数内,执行玩测试用例后的操作放在tearDown函数中。
2.用途:做web自动化测试的时候都需要登录网站和退出每一个测试用例都需要则可以利用fixture可以制作一次。
3.使用方法:
(1)在框架中新建一个conftest.py文件,在该文件中定义fixture.这样在运行测试用例的时候不需要去导入文件,就会自动查找conftest.py文件中对应的fixture
(2)定义fixture:
在函数声明前加上@pytest.fixture。表示次函数为测试环境的准备和清理工作
通过yield来标识为环境清理的工作。yield后面的代码为环境清理的工作。
fixture装饰的函数可以有返回值:yield 返回值
(3)可以通过scope参数设置fixture的不同作用域。
scope='function':默认是函数级别的,每个test都运行。
scope='class':作用域是类(class)每个class中的test函数都运行
scope='module':作用域是模块,模块内的test都运行且运行一次
scope='session':每个session运行一次
例如:
@pytest.fixture(scope='class')#注意fixture默认的作用域是函数级别的此处定义的是类级别的 def start(self): logging.info("**********登陆用例:正常场景:使用正确的用户名和密码登陆*********") driver = webdriver.Chrome()#打开浏览器会话yield 返回值 logging.info("*********执行测试结束,关闭相应驱动*********") driver.quit()#关闭浏览器会话,并且关闭线程 driver.close()#关闭浏览器会话
4.在测试类/测试用例函数中使用fixture.
通过使用fixture装饰器装饰:@pytest.mark.usefixtures("用fixture装饰的函数名")用以上例子调用fixture装饰的函数则是:@pytest.mark.usefixtures("strat")
5.测试用例的函数需要fixture装饰的函数的返回值
如果fixture有返回值,在测试用例中用fixture函数名接收返回值
例如:
def aa(self,start): star.find_element_by_id("zz")
七.用例重试机制
web自动化环境不稳定,考虑用例重试机制。若是环境问题导致用例执行失败,重新运行后可能会成功。