To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of SUVs produced as \(x_1\) and the number of sedans produced as \(x_2\). The objective is to maximize profit, which can be represented by the function \(10000x_1 + 9000x_2\), given that each SUV yields a profit of $10,000 and each sedan yields a profit of $9,000.

The constraints are based on the time available for manufacturing and testing. For manufacturing, the company has 20,000 minutes available, with each SUV requiring 200 minutes and each sedan requiring 150 minutes. This constraint can be written as \(200x_1 + 150x_2 \leq 20000\). For testing, there are 10,000 minutes available, with each SUV needing 120 minutes and each sedan needing 100 minutes, leading to the constraint \(120x_1 + 100x_2 \leq 10000\).

Additionally, we must ensure that the number of vehicles produced cannot be negative, so we have non-negativity constraints: \(x_1 \geq 0\) and \(x_2 \geq 0\).

Here is how this problem can be represented in Gurobi Python code:

```python
from gurobipy import *

# Create a new model
m = Model("Car_Production")

# Define the decision variables
x1 = m.addVar(name="SUVs", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="Sedans", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function: Maximize profit
m.setObjective(10000*x1 + 9000*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(200*x1 + 150*x2 <= 20000, name="Manufacturing_Time")
m.addConstr(120*x1 + 100*x2 <= 10000, name="Testing_Time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"SUVs to produce: {x1.x}")
    print(f"Sedans to produce: {x2.x}")
    print(f"Maximum profit: ${10000*x1.x + 9000*x2.x:.2f}")
else:
    print("No optimal solution found.")
```