pytest-sftpserver is a plugin for pytest that provides a local SFTP-Server fixture.
The SFTP-Server provided by this fixture serves content not from files but directly from Python objects.
Assume you want to test a function that downloads a file from an SFTP-Server:
from contextlib import closing
import paramiko
def get_sftp_file(host, port, username, password, path):
with closing(paramiko.Transport((host, port))) as transport:
transport.connect(username=username, password=password)
with closing(paramiko.SFTPClient.from_transport(transport)) as sftpclient:
with sftpclient.open(path, "r") as sftp_file:
return sftp_file.read()
This plugin allows to test such functions without having to spin up an external SFTP-Server by providing a pytest fixture called sftpserver. You use it simply by adding a parameter named sftpserver to your test function:
def test_sftp_fetch(sftpserver):
with sftpserver.serve_content({'a_dir': {'somefile.txt': "File content"}}):
assert get_sftp_file(sftpserver.host, sftpserver.port, "user",
"pw", "/a_dir/somefile.txt") == "File content"
As can be seen from this example sftpserver serves content directly from python objects instead of files.
It is also possible to use the package without pytest:
from pytest_sftpserver.core import SFTPServerContextDecorator
@SFTPServerContextDecorator
def test_sftp_fetch(sftpserver):
with sftpserver.serve_content({'a_dir': {'somefile.txt': "File content"}}):
assert get_sftp_file(sftpserver.host, sftpserver.port, "user",
"pw", "/a_dir/somefile.txt") == "File content"
pip install pytest-sftpserver
This package supports the following Python versions:
- 2.6 - 2.7
- 3.2 - 3.4
- Add more documentation
- Add more usage examples
- Add TODOs :)
- Fixed a bug in stat size calculation (#4)
- Fixed mkdir() overwriting existing content (#5)
Thanks to @zerok for both bug reports and accompanying tests.
- Fixed broken chmod() behaviour for non-existing 'files' (Thanks @dundeemt)
- Fixed broken stat() behaviour for non-existing 'files'
- Slightly increased test coverage
- Fixed broken test on Python 2.6
- Added Python 3.2 support
- Clened up tox configuration
- Initial release
Licensed unter the MIT License. See file LICENSE.
The implementation and idea for this plugin is in part based upon:
- pytest-localserver
- sftpserver
- The Twisted Conch in 60 Seconds series (although I ended up not using twisted, this was very helpful understanding SFTP internals)