Skip to content

pytest_generate_tests in tests/conftest.py takes much more time than before #2790

@Junchao-Mellanox

Description

@Junchao-Mellanox

Description

This issue is introduced by commit 077f148. In this commit, it introduced some new lines in function pytest_generate_tests:

def pytest_generate_tests(metafunc):
    # The topology always has atleast 1 dut	    # The topology always has atleast 1 dut
    dut_indices = [0]	    dut_indices = [0]

    tbname, testbedinfo = get_tbinfo(metafunc)
    duts_in_testbed = testbedinfo["duts"]

It tries to get testbed info here. However, get testbed info takes many time. I added some debug log.

The debug code:

def pytest_generate_tests(metafunc):
    # The topology always has atleast 1 dut
    t1 = time.time()
    dut_indices = [0]
    tbname, testbedinfo = get_tbinfo(metafunc)
    t2 = time.time()
    logging.info('get tb info takes {}'.format(t2-t1))
    ...
    # at the end of this function
    t3 = time.time()
    logging.info('generate test takes {}'.format(t3 - t2))

The logs:

09:31:34 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.32364201546
09:31:34 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000878095626831
09:31:34 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:31:43 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.42963409424
09:31:43 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000459909439087
09:31:43 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:31:53 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.65246009827
09:31:53 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000452995300293
09:31:53 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:02 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.41860485077
09:32:02 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000477075576782
09:32:02 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:12 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.54106998444
09:32:12 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000458955764771
09:32:12 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:21 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.53165388107
09:32:21 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000458002090454
09:32:21 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:31 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.46508693695
09:32:31 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000452041625977
09:32:31 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:41 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.56296014786
09:32:41 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000479936599731
09:32:41 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:50 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.57247781754
09:32:50 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000463008880615
09:32:50 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:32:59 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.39605808258
09:32:59 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000459909439087
09:32:59 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:33:09 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.46025586128
09:33:09 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000463962554932
09:33:09 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:33:18 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.4327878952
09:33:18 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000454902648926
09:33:18 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:33:28 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.4818148613
09:33:28 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000462055206299
09:33:28 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:33:37 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.61958408356
09:33:37 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000456094741821
09:33:37 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:33:47 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.38003921509
09:33:47 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000452995300293
09:33:47 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:33:56 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.43004393578
09:33:56 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000452041625977
09:33:56 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:34:06 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.38197898865
09:34:06 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000454187393188
09:34:06 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:34:15 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.72663092613
09:34:15 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000468015670776
09:34:15 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:34:25 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.71188187599
09:34:25 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000474214553833
09:34:25 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:34:35 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.82909107208
09:34:35 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000453948974609
09:34:35 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called
09:34:44 INFO conftest.py:pytest_generate_tests:787: get tb info takes 9.37812399864
09:34:44 INFO conftest.py:pytest_generate_tests:835: generate test takes 0.000472068786621
09:34:44 DEBUG plugin.py:pytest_generate_tests:123: pytest_generate_tests() called

As the log shows, get testbed info takes 9 seconds for each call, and the rest of the function only takes no more than 1 ms. Since this function is called many times before the real test, it introduces a 3 minutes delay for each test cases. We don't have to get the testbed info again and again. We need optimize this.

Steps to reproduce the issue:

  1. Run any test cases with debug level log
  2. The test case will block at pytest_generate_tests for a few minutes

Describe the results you received:

pytest_generate_tests takes 3 minutes

Describe the results you expected:

pytest_generate_tests should take no more than 15 seconds

Additional information you deem important:

**Output of `show version`:**

```
(paste your output here)
```

**Attach debug file `sudo generate_dump`:**

```
(paste your output here)
```

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions