使用过unittest的小伙伴们都知道,setup和teardown是用来处理用例的开始前工作和结束后的工作,其中还有setupclass和teardownclass是保证执行所以的用例都只执行1次前置和后置,使用起来非常方便,那么学习pytest强大的测试框框,肯定也有这个功能,并且还比unittest的简单不少。
pytest比较强大,提供了不仅仅一种方法的前置和后置:
光看上面的内容,肯定一脸懵逼,不知道到底什么时候使用,安静来通过举例一个个介绍
先介绍第一个大家都比较熟悉的与unittest中的书写一直,这个可以在类中使用,也可以在类外进行使用。
该方法每条用例都会执行
import pytest
def setup():
print('这是测试用例的前置')
def teardown():
print('这是测试用例的后置')
def test01():
print('用例01')
def test02():
print('用例02')
if __name__ == '__main__':
pytest.main(['-s'])
该方法表示只能类外面执行用例过程中,只执行1次。相当于unittest中的setupclass和teardownclass方法
import pytest
def setup_module():
print('这是测试用例的前置')
def teardown_module():
print('这是测试用例的后置')
def test01():
print('用例01')
def test02():
print('用例02')
if __name__ == '__main__':
pytest.main(['-s','test_02.py'])
该方法表示在类外面执行用例过程中,每次都会执行前置和后置。
import pytest
def setup_function():
print('这是测试用例的前置')
def teardown_function():
print('这是测试用例的后置')
def test01():
print('用例01')
def test02():
print('用例02')
if __name__ == '__main__':
pytest.main(['-s','test_02.py'])
该方法表示在类中每次执行测试用例前,测试前置和测试后置都会执行一次
# coding:utf-8
import pytest
class Test():
def setup_method(self):
print('这是setup函数前置内容')
def teardown_method(self):
print('这是teardown函数后置内容')
def test01(self):
print('这是测试用例1')
def test02(self):
print('这是测试用例2')
if __name__ == '__main__':
pytest.main(['-s','test_01.py'])
该方法表示在类中执行测试用例前,只执行1次测试前置和测试后置
# coding:utf-8
import pytest
class Test():
def setup_class(self):
print('这是setup函数前置内容')
def teardown_class(self):
print('这是teardown函数后置内容')
def test01(self):
print('这是测试用例1')
def test02(self):
print('这是测试用例2')
if __name__ == '__main__':
pytest.main(['-s','test_01.py'])
setup_class和setup_method、setup混合
import pytest
class Test():
def setup_method(self):
print('这是setup_method用例前置内容')
def setup_class(self):
print('这是setup_class用例前置内容')
def setup(self):
print('这是setup用例前置内容')
def teardown_class(self):
print('这是teardown_class用例后置内容')
def teardown_method(self):
print('这是teardown_method用例后置内容')
def teardown(self):
print('这是teardown用例后置内容')
def test01(self):
print('这是测试用例1')
def test02(self):
print('这是测试用例2')
if __name__ == '__main__':
pytest.main(['-s','test_01.py'])
ui自动化时,我们经常把启动浏览器作为前置,让用例执行时只启动一次浏览器,所以我们需要每一个class只处理一次,下面是实战代码
class test(BaseCase):
def setup_class (self):
bc=BaseCase()
self.driver =bc.GetDriver("Chrome")
self.driver.get ("https://account.369zhan.com/auth/loginPage")
self.l = LoginPage (self.driver)
def teardown_class (self):
self.driver.quit ()
@pytest.mark.parametrize ('username, password',[ ('13129562261', 'czh123')])
def test_login(self, username, password):
self.l.login(username,password)
time.sleep(2)
@pytest.mark.parametrize ('username, password',[('test1', '123') ])
def test_loginz(self, username, password):
time.sleep (2)
self.l.login(username,password)
1、setup_class和setup_module执行用例时,只执行一次前置和后置
2、setup_class,setup_method,setup是在类中执行的
3、setup_module,setup_function,setup是在类外执行的
4、其中setup类中,类外都可以执行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。