」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 用於自動化測試的 Python Shutil 模組

用於自動化測試的 Python Shutil 模組

發佈於2024-08-27
瀏覽:965

Python

介绍

在软件开发的动态领域,通过自动化测试确保应用程序质量至关重要。自动化测试涉及运行大量需要特定文件和目录设置的测试。有效地设置和拆除测试环境是此过程的重要组成部分,如果没有合适的工具,这通常会是一项乏味且容易出错的任务。

找到合适的工具来简化任务可以带来很大的不同。标准实用程序模块 Shutil 是 shell 实用程序的缩写。它提供了用于复制、移动和删除文件和目录的高级文件操作,可以简化测试环境的管理。本博客解释了shutil模块如何简化自动化软件测试中的文件操作。

为了确保每个测试都从正确的环境开始,我们需要自动化设置过程,创建一致且隔离的测试环境。

开始使用 Shutil

Shutil模块是Python标准库的一部分,所以我们不需要安装任何额外的东西。只需将其导入到脚本的开头即可。

# Import shell utility module
import shutil

基本文件复制方法

在测试应用程序时,我们经常需要一组特定的数据文件。四种常见方法提供了一种使用shutil 模块复制文件的简单有效的方法,而不是手动复制文件。

  1. shutil.copy()
  2. shutil.copy2()
  3. shutil.copyfile()
  4. shutil.copyfileobj()

1.shutil.copy()方法

shutil.copy(source, destination, *, follow_symlinks=True)

此方法将源文件复制到目标中指定的目录或文件,并返回文件的目标。它复制文件的数据和文件的权限模式,但不保留复制的文件的元数据(文件创建和修改时间)。源和目标应该是类似路径的对象或字符串。目标可以指定文件或目录。如果目标指定目录路径,则文件将被复制到目标目录,文件名与源路径相同。
使用符号链接时:

  • 如果 follow_symlinks=True,目标将是源中符号链接指向的文件的副本。参数 follow_symlinks 默认值为 True。

  • 如果 follow_symlinks=False,目的地将被创建为符号链接。

# Import shell utility module
import shutil

#  Copy the content of source_file.txt to destination_file.txt
shutil.copy('source_file.txt', 'destination_file.txt')

2.shutil.copy2()方法

shutil.copy2(source, destination, *, follow_symlinks=True)

shutil.copy2() 方法提供了保留文件的所有元数据的附加功能。其他特征与 Shutil.copy() 方法相同。目标可以指定文件或目录。如果目标是目录,则文件将以与源文件名相同的名称进行复制。

# Import shell utility module
import shutil

#  Copy the content of source_file.txt to destination_file.txt
shutil.copy2('source_file.txt', 'destination_file.txt')

我在自动化测试时使用了这种方法,因为它复制文件内容及其大多数相关元数据,以便我们可以通过编程方式实现与在图形文件管理器中使用键盘快捷键复制和粘贴文件相同的结果,并且它也紧密相连在图形文件管理器中使用鼠标复制典型复制和粘贴操作的行为。

3.shutil.copyfile()方法

shutil.copyfile(source, destination, *, follow_symlinks=True)

使用此方法,文件的内容可以从源复制到目标,而无需元数据。源和目标应该是类似路径的对象或字符串。目标路径只能指定文件路径,不能指定目录路径。

# Import shell utility module
import shutil

#  Copy the content of source_file.txt to destination_file.txt
shutil.copyfile('source_file.txt', 'destination_file.txt')

4.shutil.copyfileobj()方法

shutil.copyfileobj(fsrc, fdst, length)

该方法将源文件对象的内容复制到目标文件对象。源和目标必须是类似文件的对象。它不保留元数据,也不返回任何值。可选的长度参数指定缓冲区大小的整数值。

# Import shell utility module
import shutil

# Create file objects
source_file_object = open("../hello.txt", "r")
destination_file_object = open("CopyFile/copyFalseSrcPath.txt", "w")

# Copy the content of the file object to another file object
shutil.copyfileobj(source_file_object, destination_file_object)

预防常见错误:

  • 源和目标不能在shutil.copy()、shutil.copy2()和shutil.copyfile()中指定相同的路径。如果源和目标指定相同的文件路径,则将引发异常“SameFileError”。 Shutil.copyfileobj() 中不会引发此错误,因为它会覆盖目标文件(如果已存在)。
  • 如果源指定的文件路径不存在,则会引发错误“FileNotFound”。

结论

每种方法提供不同方面的文件操作,提供灵活性和强大功能来满足各种测试需求。 Python的shutil模块提供了软件测试中高效文件操作的必备工具:

  • Shutil.copy:非常适合基本文件复制,包括权限。
  • Shutil.copy2:非常适合复制文件及其大部分元数据,包括时间戳。
  • Shutil.copyfile:最适合快速、简单的内容复制,无需元数据。
  • Shutil.copyfileobj:启用类文件对象之间的精确复制。

其他一些在自动化测试时有用的常用实用函数是:

  1. Shutil.mkdirs():递归创建目录。对于设置测试或组织文件所需的目录结构很有用。
  2. Shutil.copytree():递归复制整个目录树。非常适合复制复杂的目录结构(包括所有文件和子目录),以创建或备份测试或部署环境。
  3. Shutil.rmtree():递归删除目录树。对于测试后清理或完全删除临时目录及其内容至关重要。
  4. Shutil.move():将文件或目录移动到另一个位置。有效地重新定位文件系统内的文件或目录,促进组织或部署过程。
  5. Shutil.make_archive():创建目录及其内容的存档(例如 AIP 或 TAR)。对于出于分发或备份目的打包目录很有用。

更多实用函数和详细说明可以参见官方文档。

Python 中的 Shutil 模块不仅在软件测试中充当通用工具集,而且还跨越软件开发的各个领域,例如版本控制和部署、数据科学和机器学习、IT 和系统管理、研究和学术界等等。更多的。

将shutil集成到我们的测试流程中,我们可以用最少的代码执行复杂的文件操作,节省我们的时间和精力,使我们能够专注于开发高质量的软件。

版本聲明 本文轉載於:https://dev.to/jankaritech/pythons-shutil-module-for-automated-testing-413n?1如有侵犯,請聯繫[email protected]刪除
最新教學 更多>
  • Java為何無法創建泛型數組?
    Java為何無法創建泛型數組?
    通用陣列創建錯誤 arrayList [2]; JAVA報告了“通用數組創建”錯誤。為什麼不允許這樣做? 答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<my...
    程式設計 發佈於2025-07-12
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-07-12
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-07-12
  • 在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    程式設計 發佈於2025-07-12
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-07-12
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-07-12
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-07-12
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-07-12
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-07-12
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 中刪除一個頻繁的問題時,在與Chrome and IE9中的圖像一起工作時,遇到了一個頻繁的問題。和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下CSS ID塊創建帶...
    程式設計 發佈於2025-07-12
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-07-12
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-07-12
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-12
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-07-12
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-07-12

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3