A slightly different answer to those already proposed... If specific named assertions are absolutely required, you could subclass TestCase and add methods for new assertions there.
from pathlib import Path
from typing import Container
from unittest import TestCase
class BaseTestCase(TestCase):
    def assertIsFile(self, path: str, msg: str=None) -> None:
        default_msg = 'File does not exist: {0}'.format(path)
        msg = msg if msg is not None else default_msg
        if not Path(path).resolve().is_file():
            raise AssertionError(msg)
    
    def assertIsEmpty(self, obj: Container, msg: str=None) -> None:
        default_msg = '{0} is not empty.'.format(obj)
        msg = msg if msg is not None else default_msg
        self.assertIsInstance(obj, Container, '{0} is not a container.'.format(obj))
        if len(obj) > 0:
            raise AssertionError(msg)
    
    def assertIsNotEmpty(self, obj: Container, msg: str=None) -> None:
        default_msg = '{0} is empty.'.format(obj)
        msg = msg if msg is not None else default_msg
        self.assertIsInstance(obj, Container, '{0} is not a container.'.format(obj))
        if obj is None or len(obj) == 0:
            raise AssertionError(msg)
And then subclass the new BaseTestCase class to use the new assertion methods.
class TestApplicationLoadBalancer(_BaseTestCase):
    def setUp(self) -> None:
        # These assertions will fail.
        self.assertIsFile('does-not-exist.txt')
        self.assertIsEmpty(['asdf'])
        self.assertIsNotEmpty([])
Just like the built-in unittest assertions, you can pass an error message to these if desired.
class TestApplicationLoadBalancer(_BaseTestCase):
    def setUp(self) -> None:
        # These assertions will fail.
        self.assertIsFile('does-not-exist.txt', 'Foo')
        self.assertIsEmpty(['asdf'], 'Bar')
        self.assertIsNotEmpty([], 'Baz')