diff --git a/swh/lister/pypi/tests/api_response.html b/swh/lister/pypi/tests/api_response.html
new file mode 100644
index 0000000..40ec945
--- /dev/null
+++ b/swh/lister/pypi/tests/api_response.html
@@ -0,0 +1,12 @@
+
+
+
+ Simple index
+
+
+ 0lever-so
+ 0lever-utils
+ 0-orchestrator
+ 0wned
+
+
\ No newline at end of file
diff --git a/swh/lister/pypi/tests/test_lister.py b/swh/lister/pypi/tests/test_lister.py
new file mode 100644
index 0000000..bda21a2
--- /dev/null
+++ b/swh/lister/pypi/tests/test_lister.py
@@ -0,0 +1,64 @@
+# Copyright (C) 2019 the Software Heritage developers
+# License: GNU General Public License version 3, or any later version
+# See top-level LICENSE file for more information
+
+import requests_mock
+import unittest
+from unittest.mock import patch
+from swh.lister.pypi.lister import PyPILister
+from swh.lister.core.tests.test_lister import HttpSimpleListerTester
+
+lister = PyPILister()
+
+expected_packages = ['0lever-so', '0lever-utils', '0-orchestrator', '0wned']
+
+expected_model = {
+ 'uid': 'arrow',
+ 'name': 'arrow',
+ 'full_name': 'arrow',
+ 'html_url': 'https://pypi.org/pypi/arrow/json',
+ 'origin_url': 'https://pypi.org/project/arrow/',
+ 'origin_type': 'pypi',
+ }
+
+
+class PyPIListerTester(HttpSimpleListerTester, unittest.TestCase):
+ Lister = PyPILister
+ PAGE = 'https://pypi.org/simple/'
+ lister_subdir = 'pypi'
+ good_api_response_file = 'api_response.html'
+ entries = 4
+
+ @requests_mock.Mocker()
+ def test_list_packages(self, http_mocker):
+ """List packages from simple api page should retrieve all packages within
+
+ """
+ http_mocker.get(self.PAGE, text=self.mock_response)
+ fl = self.get_fl()
+ packages = fl.list_packages(self.get_api_response(0))
+
+ for package in expected_packages:
+ assert package in packages
+
+ def test_transport_response_simplified(self):
+ """Test model created by the lister
+
+ """
+ fl = self.get_fl()
+ model = fl.transport_response_simplified(['arrow'])
+ assert len(model) == 1
+ for key, values in model[0].items():
+ assert values == expected_model[key]
+
+ def test_task_dict(self):
+ """Test the task creation of lister
+
+ """
+ with patch('swh.lister.pypi.lister.utils.create_task_dict') as mock_create_tasks: # noqa
+ lister.task_dict(origin_type='pypi', origin_url='https://abc',
+ name='test_pack', html_url='https://def')
+
+ mock_create_tasks.assert_called_once_with(
+ 'load-pypi', 'recurring', 'test_pack', 'https://abc',
+ project_metadata_url='https://def')