pytest和unittest都是python中的测试框架,pytest相比unittest 更加的灵活,具体体现在 以下几点
1.写测试方法时不用继承类
2.前置后置放在一起
2.1如果是全局共享的前置,就会写在一个固定的文件中,(比如一个系统中打开浏览器,访问系统网址就是全局共享的前置)这个文件命名为conftest,其他的各个模块设计到的前置放在用例文件中
from selenium import webdriver import pytest from TestDatas import global_datas as gd @pytest.fixture def init_driver(): driver = webdriver.Chrome() driver.maximize_window() driver.get(gd.login_url) yield driver driver.quit()
2.2前置后置的定义语法,@pytest.fixture,前置后置用yield隔开,yield前的就是前置,yield后的就是后置,yield后面加的语句是返回值,如上面代码中的yield driver,driver就是返回值
2.3用例中用到前置时,在用例前加上@pytest.mark.usefixtures
@pytest.mark.usefixtures("前置的名称")
2.4如果用例要用上返回值,就在函数参数上加上前置名称
def test_login_success(self,init_driver):#init_driver是前置名称 # 登录 #LoginPage(self.driver).login_success(*lds.success) LoginPage(init_driver).login_success(*lds.success) #断言 assert(HomePage(init_driver).get_element_exists())==True
3.有给用例打标签的功能,运行时,通过标签进行分类运行
3.1先建一个文件,定义好标签名,作者在此用的时ini文件来定义标签名,语法如下,markers=标签名
[pytest] markers= demo_fail: just for demo show smoke
3.2在需要打标签的测试函数以及类上,加上@pytest.mark.标签名
@pytest.mark.标签名
4运行用例,unittest需要加载用例,而pytest中是自动识别用例,pytest命令在哪个目录下执行,那就默认从哪个目录下开始搜索用例。
5.pytest断言要比unittest灵活,assert 表达式即可。(erunittest当中,要assert*)