引言 在测试用例的执行过程中,需要创建对象的临时目录/文件。 fixture提供了两个内置方法:
- 单文件操作【function级别】:tmpdir();
- 多文件操作【session级别】:tmpdir_factory();
这两个方法的执行过程:测试执行前创建临时目录/文件,测试执行后删除临时目录/文件。
1.临时目录概述
1.作用及处理流程
内置的tmpdir与tmpdir_factory负责,在测试执行前创建临时目录/文件,在测试执行后删除临时目录/文件。
2.tmpdir与tmpdir_factory的区别
| 区别点 | tmpdir | tmpdir_factory |
|---|---|---|
| 作用范围 | function级别 | session级别 |
| 测试文件数量 | 单个 | 多个 |
说明 在执行命令的时候,结合“—setup-show参数”就能发现“tmpdir与tmpdir_factory的区别”
3.tmpdir与tmpdir_factory的常用方法
| 方法 | tmpdir | tmpdir_factory | 说明 |
|---|---|---|---|
| 创建目录 | f=tmpdir.mkdir() | a_dir=tmpdir_factory.mktemp() - a_sub_dir=a_dir.mkdir() |
|
| 创建文件 | a_file=f.join(“hello.txt”) | a_file=a_sub_dir.join(“hello.txt”) | |
| 文件写入 | - a_file.write(数据内容) - with open() |
可以对任意文件进行“读写操作” | |
| 文件读取 | - a_file.read() - with open() |
||
| 返回会话的根目录 | NA(不支持) | base_temp=tmpdir_factory.getbasetemp() |
2.tmpdir的使用
@pytest.fixture()def login1():myCookie={"cookie1":"python"}return myCookie@pytest.fixture()def login2(tmpdir,login1): # 引入fixture内置tmpdir方法及自定义fixture_login1fDir=tmpdir.mkdir("myTempdir") # 创建目录jsonFile=fDir.join("myJson.json") # 创建文件# 将数据写入“临时文件myJson.json”with open(jsonFile,'w',encoding='utf-8') as f:json.dump(login1,f) # login1为自定义的fixture的返回值【json,dump()可以写入任意json数据】return jsonFile # 返回:json文件def test_hello2(login2): # 引入自定义fixture(login2),并读取json数据with open(login2,'r') as f:myJsonData = json.load(f)print("--------------")print("test2-myJsonData:\n", myJsonData)
3.tmpdir_factory的使用
import pytest, jsonloginData = {"username": "admin","password": "test123456"}#@pytest.fixture(scope="module")@pytest.fixture(scope="session")def wirteJson(tmpdir_factory):fDir = tmpdir_factory.mktemp("myJsonDir").join("login.json") # 创建临时目录及文件with open(fDir,'w', encoding='utf-8') as writeFlag:json.dump(loginData,writeFlag) # 将指定的数据写入“临时文件中”return fDir#@pytest.fixture(scope="module")@pytest.fixture(scope="session")def readJson(wirteJson):with open(wirteJson, 'r', encoding='utf-8') as readFlag:jsonData = json.load(readFlag)print("\n---------------------")#print("read-json:\t", jsonData)return jsonDatadef test_hello2(readJson):print("----------------------------------")print("this is readJson:\t",readJson)
1.tmpdir_factory在其他范围使用
import pytest, jsonloginData = {"username": "admin","password": "test123456"}@pytest.fixture(scope="module")#@pytest.fixture(scope="function")#@pytest.fixture(scope="session")def wirteJson(tmpdir_factory):fDir = tmpdir_factory.mktemp("myJsonDir").join("login.json") # 创建临时目录及文件with open(fDir,'w', encoding='utf-8') as writeFlag:json.dump(loginData,writeFlag) # 将指定的数据写入“临时文件中”return fDir@pytest.fixture(scope="module")#@pytest.fixture(scope="session")#@pytest.fixture(scope="function")def readJson(wirteJson):with open(wirteJson, 'r', encoding='utf-8') as readFlag:jsonData = json.load(readFlag)print("\n---------------------")#print("read-json:\t", jsonData)return jsonDatadef test_hello2(readJson):print("----------------------------------")print("this is readJson:\t",readJson)def test_hello3(readJson):print("----------------------------------")print("this is readJson:\t",readJson)



