引言 在测试用例的执行过程中,需要创建对象的临时目录/文件。 fixture提供了两个内置方法:

  1. 单文件操作【function级别】:tmpdir();
  2. 多文件操作【session级别】:tmpdir_factory();

这两个方法的执行过程:测试执行前创建临时目录/文件,测试执行后删除临时目录/文件。

1.临时目录概述

1.作用及处理流程

内置的tmpdir与tmpdir_factory负责,在测试执行前创建临时目录/文件,在测试执行后删除临时目录/文件。
image.png

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的使用

  1. @pytest.fixture()
  2. def login1():
  3. myCookie={"cookie1":"python"}
  4. return myCookie
  5. @pytest.fixture()
  6. def login2(tmpdir,login1): # 引入fixture内置tmpdir方法及自定义fixture_login1
  7. fDir=tmpdir.mkdir("myTempdir") # 创建目录
  8. jsonFile=fDir.join("myJson.json") # 创建文件
  9. # 将数据写入“临时文件myJson.json”
  10. with open(jsonFile,'w',encoding='utf-8') as f:
  11. json.dump(login1,f) # login1为自定义的fixture的返回值【json,dump()可以写入任意json数据】
  12. return jsonFile # 返回:json文件
  13. def test_hello2(login2): # 引入自定义fixture(login2),并读取json数据
  14. with open(login2,'r') as f:
  15. myJsonData = json.load(f)
  16. print("--------------")
  17. print("test2-myJsonData:\n", myJsonData)

t1.png

tmpdir.png

3.tmpdir_factory的使用

  1. import pytest, json
  2. loginData = {"username": "admin",
  3. "password": "test123456"}
  4. #@pytest.fixture(scope="module")
  5. @pytest.fixture(scope="session")
  6. def wirteJson(tmpdir_factory):
  7. fDir = tmpdir_factory.mktemp("myJsonDir").join("login.json") # 创建临时目录及文件
  8. with open(fDir,'w', encoding='utf-8') as writeFlag:
  9. json.dump(loginData,writeFlag) # 将指定的数据写入“临时文件中”
  10. return fDir
  11. #@pytest.fixture(scope="module")
  12. @pytest.fixture(scope="session")
  13. def readJson(wirteJson):
  14. with open(wirteJson, 'r', encoding='utf-8') as readFlag:
  15. jsonData = json.load(readFlag)
  16. print("\n---------------------")
  17. #print("read-json:\t", jsonData)
  18. return jsonData
  19. def test_hello2(readJson):
  20. print("----------------------------------")
  21. print("this is readJson:\t",readJson)

1.tmpdir_factory在其他范围使用

  1. import pytest, json
  2. loginData = {"username": "admin",
  3. "password": "test123456"}
  4. @pytest.fixture(scope="module")
  5. #@pytest.fixture(scope="function")
  6. #@pytest.fixture(scope="session")
  7. def wirteJson(tmpdir_factory):
  8. fDir = tmpdir_factory.mktemp("myJsonDir").join("login.json") # 创建临时目录及文件
  9. with open(fDir,'w', encoding='utf-8') as writeFlag:
  10. json.dump(loginData,writeFlag) # 将指定的数据写入“临时文件中”
  11. return fDir
  12. @pytest.fixture(scope="module")
  13. #@pytest.fixture(scope="session")
  14. #@pytest.fixture(scope="function")
  15. def readJson(wirteJson):
  16. with open(wirteJson, 'r', encoding='utf-8') as readFlag:
  17. jsonData = json.load(readFlag)
  18. print("\n---------------------")
  19. #print("read-json:\t", jsonData)
  20. return jsonData
  21. def test_hello2(readJson):
  22. print("----------------------------------")
  23. print("this is readJson:\t",readJson)
  24. def test_hello3(readJson):
  25. print("----------------------------------")
  26. print("this is readJson:\t",readJson)

tm2.png