File Actions
File Actions Driver
- In order to perform file operations programmatically, you will need an instance of FileActions
import com.shaft.cli.FileActions;
FileActions fileActions = FileActions.getInstance();
Upon executing this line, SHAFT ENGINE provides you with a singleton instance to perform various file manipulation operations. This is essential for test data management, file-based validations, and automated file handling workflows.
File Actions
The FileActions class handles file system operations, allowing you to create, read, write, copy, and delete files as part of your automated test flows.
Read File
readFromFile
String content = fileActions.readFromFile("/path/to/file.txt");
- Reads and returns the complete contents of a file as a string.
- Works with text files, configuration files, and other readable file formats.
- The file path can be absolute or relative to your project directory.
Example:
String testData = fileActions.readFromFile("src/test/resources/testData.txt");
System.out.println(testData);
Write to File
writeToFile
fileActions.writeToFile("/path/to/file.txt", "File content here");
- Writes the specified content to a file.
- Creates a new file if it doesn't exist.
- Overwrites the file content if it already exists.
- Takes two parameters: file path and content string.
Example:
String reportData = "Test Results: All tests passed";
fileActions.writeToFile("reports/test_summary.txt", reportData);
Copy File
copyFile
fileActions.copyFile("/path/to/source.txt", "/path/to/destination.txt");
- Copies a file from the source path to the destination path.
- Creates destination directories if they don't exist.
- Useful for backing up files or duplicating test data.
- Takes two parameters: source file path and destination file path.
Example:
// Backup configuration before test
fileActions.copyFile("config/settings.json", "config/settings.backup.json");
Delete File
deleteFile
fileActions.deleteFile("/path/to/file.txt");
- Deletes the file at the specified path.
- Useful for cleanup operations or removing temporary files.
- No error is thrown if the file doesn't exist (safe deletion).
Example:
// Cleanup after test
fileActions.deleteFile("temp/temp_data.txt");
Common Use Cases
Test Data Management
Use file actions to manage test data files:
@BeforeClass
void setupTestData() {
// Copy fresh test data for each test run
fileActions.copyFile(
"src/test/resources/original_data.json",
"target/test_data.json"
);
}
@Test
void processTestData() {
String testData = fileActions.readFromFile("target/test_data.json");
// Process and use test data
processData(testData);
}
@AfterClass
void cleanupTestData() {
fileActions.deleteFile("target/test_data.json");
}
Configuration File Handling
Read and modify configuration files:
@Test
void updateConfiguration() {
// Read current config
String config = fileActions.readFromFile("config/app.properties");
// Modify config
String updatedConfig = config.replace("debug=false", "debug=true");
// Write updated config
fileActions.writeToFile("config/app.properties", updatedConfig);
}
Report Generation
Generate custom reports or logs:
@AfterMethod
void generateTestReport(ITestResult result) {
String reportContent = String.format(
"Test: %s\nStatus: %s\nTime: %s\n",
result.getName(),
result.getStatus(),
new Date()
);
fileActions.writeToFile(
"reports/" + result.getName() + "_report.txt",
reportContent
);
}
File Validation
Combine with file validations to verify file operations:
@Test
void validateFileOperations() {
// Create a file
String content = "Test content";
fileActions.writeToFile("test.txt", content);
// Validate file exists and has correct content
Validations.assertThat()
.file(".", "test.txt")
.exists()
.perform();
String readContent = fileActions.readFromFile("test.txt");
Validations.assertThat()
.object(readContent)
.isEqualTo(content)
.perform();
// Cleanup
fileActions.deleteFile("test.txt");
}
Working with Different File Types
Text Files
// Read and write plain text
String text = fileActions.readFromFile("data.txt");
fileActions.writeToFile("output.txt", "Plain text content");
Configuration Files
// Handle properties, JSON, XML, YAML files
String properties = fileActions.readFromFile("config.properties");
String jsonData = fileActions.readFromFile("data.json");
String xmlData = fileActions.readFromFile("config.xml");
Test Data Files
// Read test data from various formats
String csvData = fileActions.readFromFile("testData.csv");
String testScript = fileActions.readFromFile("testScript.sql");
File Path Handling
Absolute Paths
fileActions.readFromFile("/home/user/project/data/file.txt"); // Linux/Mac
fileActions.readFromFile("C:\\Users\\username\\project\\data\\file.txt"); // Windows
Relative Paths
fileActions.readFromFile("src/test/resources/data.txt");
fileActions.readFromFile("target/reports/summary.txt");
Project-relative Paths
// Relative to project root
fileActions.readFromFile("testData/input.txt");
fileActions.writeToFile("output/results.txt", data);
Best Practices
- File Path Validation: Ensure file paths are correct and accessible
- Error Handling: Wrap file operations in try-catch blocks for production code
- Resource Cleanup: Always delete temporary files after test execution
- Path Separators: Use forward slashes (/) for cross-platform compatibility, or use
File.separator - Encoding: Be aware of file encoding when reading/writing non-ASCII characters
- File Permissions: Ensure your test execution environment has necessary file system permissions
- Backup Important Files: Use
copyFileto backup files before modifying them in tests
Integration with File Validations
File Actions work seamlessly with SHAFT's File Validations:
// Perform file action
fileActions.writeToFile("test.txt", "Hello SHAFT");
// Validate the result
Validations.assertThat()
.file(".", "test.txt")
.exists()
.perform();
Validations.assertThat()
.file(".", "test.txt")
.content()
.contains("Hello SHAFT")
.perform();
For more information on file validations, see the File Validations section.
As you skim through the console output, you will notice the comprehensive reporting SHAFT provides for each file operation, making it easy to track and debug file-related test activities.