This can be rewritten like so:

```python
@pytest.fixture
def list_of_tuples():
    return [
        (('a', 'b'), ('c', 'd')),
        (('c', 'd'), ('e', 'f')),
        (('a', 'b'), ('c', 'd'), ('e', 'f')),
    ]

def test_data_argument_accepts_tuples(list_of_tuples):
    """
    Ensure that the data argument will accept tuples of strings
    and properly encode them.
    """
    for data_tuple in list_of_tuples:
        p = PreparedRequest()
        p.prepare(
            method='GET',
            url='http://example.com',
            data=tuple_data,
            hooks=default_hooks()
        )
        assert p.body == urlencode(tuple_data)
```

It doesn't need to be in its own class and you're not really generating random data.