知识点:
- 利用fixture共享数据
- conftest.py共享fixture
- 使用多个fixture
- fixture作用范围
- usefixture
- 重命名
1. 利用fixture共享数据
test_data中包含了一个fixture名为data,pytest会优先搜索fixture,返回data值
pytest/ch3/test_one.py
import pytest """ fixture : @pytest.fixture 声明了一个fixture,如果测试函数中用到fixture名,那么pytest会检测到,并且再执行测试用例前,先执行fixture """ @pytest.fixture() def data(): return 3 def test_data(data): assert data == 4
2. conftest.py
针对fixture,可以单独放在一个文件里,如果你希望测试文件共享fixture, 那么在你当前的目录下创建conftest.py文件,将所有的fixture放进去,注意如果你只想作用于某一个文件夹,那么在那个文件夹创建contest.py
pytest/ch3/conftest.py
import pytest import requests """ 如果想多个测试用例共享fixture,可以单独建立一个conftest.py 文件,可以看成提供测试用例使用的一个fixture仓库 """ @pytest.fixture() def login(): url = 'http://api.shoumilive.com:83/api/p/login/login/pwd' data = {"phone": "18860910", "pwd": "123456"} res = requests.post(url, data) return res.text
pytest/ch3/test_conftest.py
import json import pytest """ 通过conftest 建立公共仓库,testcase获取公共仓库 """ @pytest.mark.login def test_conftest(login): data = json.loads(login) print(data['code']) assert data['code'] == '200'
if __name__ == '__main__':
pytest.main(["--setup-show", "-m", "login", "-s", "-v"])
3. 使用多个fixture
pytest/ch3/conftest.py
@pytest.fixture() def one(): return 1 @pytest.fixture() def two(): return 2
pytest/ch3/test_muti.py
def test_muti(one, two): assert one == two
4. fixture 作用范围
用scope来指定作用范围, 作用范围有固定的待选值,fucntion, class, module, session(默认为function)
5. usefixture
指定fixture ,使用@pytest.mark.usefixtures('')标记测试函数,或者测试类
6. 重命名
如果一个测试命名过长的话,我们可以使用name参数,给她重名了,我们使用fixture的时候,只需要传入name值即可
@pytest.fixture(name='maoyan') def test_maoyan_page_001(): return 2
github: https://github.com/wangxiao9/pytest.git