pytest定义fixture

2020-04-0917:09:11

1、fixture是对测试用例执行的环境准备和清理,相当于unittest中的setUp/tearDown/setUpClass/tearDownClass作用

2、fixture的主要目的

  如测试用例运行时都需要进行登录和退出操作时,使用fixture后,可以只进行一次登录和退出操作,不需要每个用例执行时都进行登录和退出

3、如何使用fixture

  在测试函数之前加上@pytest.fixture

  1、需要在测试包下新建一个conftest.py文件,名字不能是其他的

    pytest定义fixture_第1张图片

  2、在该文件中写用例执行的前置条件和后置条件,首先需要声明他是一个fixture,@pytest.fixture 

 1 import pytest
 2 from selenium import webdriver
 3 from PageObjects.login_page import LoginPage
 4 import Common_Datas as CD
 5 
 6 driver=None
 7 
 8 #声明他是一个fixture
 9 # 作用域到测试类
10 @pytest.fixture     #直接使用pytest.fixture
11 def access_web():
12     global driver #声明全局变量
13     # 前置条件
14     driver = webdriver.Chrome()
15     driver.get(CD.web_login_url)
16     lg = LoginPage(driver)
17     #yield 同时可以返回值(driver,lg),相当于return,在使用返回值的时候直接用函数名
18     yield (driver,lg)#前面是前置条件、后面是后置条件,
19     # 后置条件
20     driver.quit()
21 
22 def refresh_page():
23     #前置条件
24     global driver
25     yield26     #后置条件
27     driver.refresh()

 

  3、在函数中直接使用就可以,不需要因为py文件

    • access_web函数名直接接收返回值,使用函数名可以直接使用返回值
 1 from PageObjects.index_page import IndexPage
 2 from ddt import ddt,data
 3 import Login_Datas as LD
 4 import pytest
 5 @pytest.mark.usefixtures("access_web")#函数名access_web,同样可以用在函数名前
 6 class TestLogin:
24     # 正常用例----登录成功
25     @pytest.mark.somke
26     def test_login_1_success(self,access_web):   access_web函数名直接接收返回值,使用函数名可以直接使用返回值
27         # 2步骤,输入用户名和密码,点击登录
28         access_web[1].user_login(LD.success_login['username'],LD.success_login['pwd'])
29         #3断言
30         assert IndexPage(access_web[0]).isExist_logout_ele()
31 
32     # 异常用例---手机号格式不正确(大于11位,小于11位,空,不在号码段内)
33     @pytest.mark.usefixtures("refresh_page")#可以在测试用例函数名前使用,item参数没有用,这里只是说明一下fixture可以用在函数前
34     def test_login_0_user_wrongFormat(self,item,access_web): 
35     access_web[1].user_login(item['username'], item['pwd'])
36     self.assertEqual(access_web[0].get_errorMsg_from_loginArea(),item['msg'])

 

你可能感兴趣的:(pytest定义fixture)