diff --git a/go/chromite/api/test.pb.go b/go/chromite/api/test.pb.go
index c82e7f3..755a137 100644
--- a/go/chromite/api/test.pb.go
+++ b/go/chromite/api/test.pb.go
@@ -54,7 +54,7 @@
 }
 
 func (VmTestRequest_TestHarness) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{8, 0}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{10, 0}
 }
 
 type BuildTargetUnitTestRequest struct {
@@ -312,6 +312,77 @@
 
 var xxx_messageInfo_ChromiteUnitTestResponse proto.InternalMessageInfo
 
+type ChromitePytestRequest struct {
+	// The chroot to use to execute the endpoint.
+	Chroot               *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *ChromitePytestRequest) Reset()         { *m = ChromitePytestRequest{} }
+func (m *ChromitePytestRequest) String() string { return proto.CompactTextString(m) }
+func (*ChromitePytestRequest) ProtoMessage()    {}
+func (*ChromitePytestRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f5c91b4ac6233d9e, []int{4}
+}
+
+func (m *ChromitePytestRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChromitePytestRequest.Unmarshal(m, b)
+}
+func (m *ChromitePytestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChromitePytestRequest.Marshal(b, m, deterministic)
+}
+func (m *ChromitePytestRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChromitePytestRequest.Merge(m, src)
+}
+func (m *ChromitePytestRequest) XXX_Size() int {
+	return xxx_messageInfo_ChromitePytestRequest.Size(m)
+}
+func (m *ChromitePytestRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChromitePytestRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChromitePytestRequest proto.InternalMessageInfo
+
+func (m *ChromitePytestRequest) GetChroot() *chromiumos.Chroot {
+	if m != nil {
+		return m.Chroot
+	}
+	return nil
+}
+
+type ChromitePytestResponse struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChromitePytestResponse) Reset()         { *m = ChromitePytestResponse{} }
+func (m *ChromitePytestResponse) String() string { return proto.CompactTextString(m) }
+func (*ChromitePytestResponse) ProtoMessage()    {}
+func (*ChromitePytestResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_f5c91b4ac6233d9e, []int{5}
+}
+
+func (m *ChromitePytestResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChromitePytestResponse.Unmarshal(m, b)
+}
+func (m *ChromitePytestResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChromitePytestResponse.Marshal(b, m, deterministic)
+}
+func (m *ChromitePytestResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChromitePytestResponse.Merge(m, src)
+}
+func (m *ChromitePytestResponse) XXX_Size() int {
+	return xxx_messageInfo_ChromitePytestResponse.Size(m)
+}
+func (m *ChromitePytestResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChromitePytestResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChromitePytestResponse proto.InternalMessageInfo
+
 type CrosSigningTestRequest struct {
 	// Required if not in default location.
 	// The chroot where the tests should be executed.
@@ -325,7 +396,7 @@
 func (m *CrosSigningTestRequest) String() string { return proto.CompactTextString(m) }
 func (*CrosSigningTestRequest) ProtoMessage()    {}
 func (*CrosSigningTestRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{4}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{6}
 }
 
 func (m *CrosSigningTestRequest) XXX_Unmarshal(b []byte) error {
@@ -363,7 +434,7 @@
 func (m *CrosSigningTestResponse) String() string { return proto.CompactTextString(m) }
 func (*CrosSigningTestResponse) ProtoMessage()    {}
 func (*CrosSigningTestResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{5}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{7}
 }
 
 func (m *CrosSigningTestResponse) XXX_Unmarshal(b []byte) error {
@@ -399,7 +470,7 @@
 func (m *DebugInfoTestRequest) String() string { return proto.CompactTextString(m) }
 func (*DebugInfoTestRequest) ProtoMessage()    {}
 func (*DebugInfoTestRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{6}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{8}
 }
 
 func (m *DebugInfoTestRequest) XXX_Unmarshal(b []byte) error {
@@ -444,7 +515,7 @@
 func (m *DebugInfoTestResponse) String() string { return proto.CompactTextString(m) }
 func (*DebugInfoTestResponse) ProtoMessage()    {}
 func (*DebugInfoTestResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{7}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{9}
 }
 
 func (m *DebugInfoTestResponse) XXX_Unmarshal(b []byte) error {
@@ -486,7 +557,7 @@
 func (m *VmTestRequest) String() string { return proto.CompactTextString(m) }
 func (*VmTestRequest) ProtoMessage()    {}
 func (*VmTestRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{8}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{10}
 }
 
 func (m *VmTestRequest) XXX_Unmarshal(b []byte) error {
@@ -564,7 +635,7 @@
 func (m *VmTestRequest_SshOptions) String() string { return proto.CompactTextString(m) }
 func (*VmTestRequest_SshOptions) ProtoMessage()    {}
 func (*VmTestRequest_SshOptions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{8, 0}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{10, 0}
 }
 
 func (m *VmTestRequest_SshOptions) XXX_Unmarshal(b []byte) error {
@@ -614,7 +685,7 @@
 func (m *VmTestRequest_VmTest) String() string { return proto.CompactTextString(m) }
 func (*VmTestRequest_VmTest) ProtoMessage()    {}
 func (*VmTestRequest_VmTest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{8, 1}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{10, 1}
 }
 
 func (m *VmTestRequest_VmTest) XXX_Unmarshal(b []byte) error {
@@ -652,7 +723,7 @@
 func (m *VmTestResponse) String() string { return proto.CompactTextString(m) }
 func (*VmTestResponse) ProtoMessage()    {}
 func (*VmTestResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{9}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{11}
 }
 
 func (m *VmTestResponse) XXX_Unmarshal(b []byte) error {
@@ -689,7 +760,7 @@
 func (m *MoblabVmTestRequest) String() string { return proto.CompactTextString(m) }
 func (*MoblabVmTestRequest) ProtoMessage()    {}
 func (*MoblabVmTestRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{10}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{12}
 }
 
 func (m *MoblabVmTestRequest) XXX_Unmarshal(b []byte) error {
@@ -744,7 +815,7 @@
 func (m *MoblabVmTestRequest_Payload) String() string { return proto.CompactTextString(m) }
 func (*MoblabVmTestRequest_Payload) ProtoMessage()    {}
 func (*MoblabVmTestRequest_Payload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{10, 0}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{12, 0}
 }
 
 func (m *MoblabVmTestRequest_Payload) XXX_Unmarshal(b []byte) error {
@@ -782,7 +853,7 @@
 func (m *MoblabVmTestResponse) String() string { return proto.CompactTextString(m) }
 func (*MoblabVmTestResponse) ProtoMessage()    {}
 func (*MoblabVmTestResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{11}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{13}
 }
 
 func (m *MoblabVmTestResponse) XXX_Unmarshal(b []byte) error {
@@ -822,7 +893,7 @@
 func (m *SimpleChromeWorkflowTestRequest) String() string { return proto.CompactTextString(m) }
 func (*SimpleChromeWorkflowTestRequest) ProtoMessage()    {}
 func (*SimpleChromeWorkflowTestRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{12}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{14}
 }
 
 func (m *SimpleChromeWorkflowTestRequest) XXX_Unmarshal(b []byte) error {
@@ -874,7 +945,7 @@
 func (m *SimpleChromeWorkflowTestResponse) String() string { return proto.CompactTextString(m) }
 func (*SimpleChromeWorkflowTestResponse) ProtoMessage()    {}
 func (*SimpleChromeWorkflowTestResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f5c91b4ac6233d9e, []int{13}
+	return fileDescriptor_f5c91b4ac6233d9e, []int{15}
 }
 
 func (m *SimpleChromeWorkflowTestResponse) XXX_Unmarshal(b []byte) error {
@@ -902,6 +973,8 @@
 	proto.RegisterType((*BuildTargetUnitTestResponse)(nil), "chromite.api.BuildTargetUnitTestResponse")
 	proto.RegisterType((*ChromiteUnitTestRequest)(nil), "chromite.api.ChromiteUnitTestRequest")
 	proto.RegisterType((*ChromiteUnitTestResponse)(nil), "chromite.api.ChromiteUnitTestResponse")
+	proto.RegisterType((*ChromitePytestRequest)(nil), "chromite.api.ChromitePytestRequest")
+	proto.RegisterType((*ChromitePytestResponse)(nil), "chromite.api.ChromitePytestResponse")
 	proto.RegisterType((*CrosSigningTestRequest)(nil), "chromite.api.CrosSigningTestRequest")
 	proto.RegisterType((*CrosSigningTestResponse)(nil), "chromite.api.CrosSigningTestResponse")
 	proto.RegisterType((*DebugInfoTestRequest)(nil), "chromite.api.DebugInfoTestRequest")
@@ -920,72 +993,74 @@
 func init() { proto.RegisterFile("chromite/api/test.proto", fileDescriptor_f5c91b4ac6233d9e) }
 
 var fileDescriptor_f5c91b4ac6233d9e = []byte{
-	// 1042 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0xdb, 0x36,
-	0x14, 0x9e, 0x1c, 0xdb, 0x71, 0x8f, 0x9c, 0x44, 0x65, 0xdb, 0x44, 0x53, 0x0b, 0x24, 0x55, 0x7f,
-	0x96, 0x6c, 0x98, 0x0c, 0x64, 0x40, 0x37, 0x14, 0x18, 0xb0, 0xc6, 0x49, 0xbb, 0x6c, 0x68, 0x1b,
-	0xc8, 0xce, 0xfe, 0xb0, 0x4d, 0xa0, 0x15, 0x5a, 0x16, 0x22, 0x89, 0x9a, 0xc8, 0x78, 0xc8, 0xe5,
-	0xee, 0x77, 0xb9, 0xc7, 0xd8, 0xc5, 0x80, 0xbd, 0x41, 0x9f, 0x61, 0xaf, 0xd1, 0x77, 0x18, 0x44,
-	0xd2, 0xb6, 0xe4, 0x38, 0x76, 0xb2, 0xf5, 0xca, 0xe2, 0x39, 0xdf, 0xf9, 0x78, 0xfe, 0x69, 0xd8,
-	0xf0, 0x07, 0x19, 0x8d, 0x43, 0x4e, 0x5a, 0x38, 0x0d, 0x5b, 0x9c, 0x30, 0xee, 0xa4, 0x19, 0xe5,
-	0x14, 0x35, 0x47, 0x0a, 0x07, 0xa7, 0xa1, 0x75, 0xaf, 0x04, 0xeb, 0x9d, 0x85, 0xd1, 0x89, 0x87,
-	0xd3, 0x50, 0x62, 0x2d, 0xab, 0xa4, 0x65, 0xe7, 0x2c, 0xa3, 0x54, 0xf1, 0x58, 0xea, 0x82, 0xb3,
-	0x98, 0xb2, 0x96, 0x4f, 0xe3, 0x98, 0x26, 0x4a, 0x61, 0x16, 0x14, 0x31, 0xe1, 0x59, 0xe8, 0x33,
-	0xa9, 0xb1, 0x7f, 0x5f, 0x02, 0x6b, 0x2f, 0xbf, 0xa2, 0x8b, 0xb3, 0x80, 0xf0, 0xe3, 0x24, 0xe4,
-	0x5d, 0xc2, 0xb8, 0x4b, 0x7e, 0x39, 0x23, 0x8c, 0xa3, 0xa7, 0xd0, 0x94, 0x0e, 0x70, 0xa1, 0x36,
-	0xb5, 0x2d, 0x6d, 0x5b, 0xdf, 0xdd, 0x70, 0x26, 0x7c, 0x4e, 0xc1, 0xda, 0xd5, 0x7b, 0x93, 0x03,
-	0xda, 0x04, 0x3d, 0x23, 0xec, 0x2c, 0xe2, 0x5e, 0x8a, 0xf9, 0xc0, 0xac, 0x6c, 0x69, 0xdb, 0x37,
-	0x5c, 0x90, 0xa2, 0x23, 0xcc, 0x07, 0xe8, 0x43, 0xa8, 0xe7, 0x3c, 0x94, 0x9b, 0x4b, 0x82, 0x16,
-	0x15, 0x69, 0xdb, 0x42, 0xe3, 0x2a, 0x04, 0xda, 0x87, 0x5a, 0x3f, 0xc2, 0x01, 0x33, 0xab, 0x02,
-	0xea, 0x38, 0xc5, 0x94, 0x39, 0x97, 0x47, 0xe0, 0x3c, 0xcf, 0xad, 0x5c, 0x69, 0x8c, 0xf6, 0xe1,
-	0x66, 0x8a, 0xfd, 0x53, 0x1c, 0x10, 0xaf, 0x17, 0x61, 0xff, 0x34, 0x0a, 0x19, 0x37, 0x6b, 0x5b,
-	0x4b, 0xd3, 0x31, 0x1d, 0x49, 0xd0, 0x61, 0xd2, 0xa7, 0xae, 0xa1, 0x2c, 0xf6, 0x46, 0x06, 0xd6,
-	0xf7, 0x50, 0x13, 0xac, 0xe8, 0x01, 0xac, 0x90, 0x38, 0xe5, 0xe7, 0x9e, 0x2a, 0x83, 0x48, 0x4f,
-	0xc3, 0x6d, 0x0a, 0x61, 0x47, 0xca, 0xd0, 0x47, 0x70, 0x93, 0x53, 0x1a, 0xf9, 0x03, 0x1c, 0x26,
-	0x9e, 0x3f, 0xc0, 0x49, 0x40, 0x4e, 0x44, 0x32, 0x1a, 0xae, 0x31, 0x56, 0xb4, 0xa5, 0xdc, 0xfe,
-	0x5b, 0x83, 0xbb, 0x33, 0x83, 0x61, 0x29, 0x4d, 0x18, 0x41, 0xf7, 0xa1, 0xc9, 0x71, 0xd6, 0xc3,
-	0x51, 0x24, 0x93, 0xaa, 0x89, 0xa4, 0xea, 0x4a, 0x26, 0xb2, 0xfa, 0x05, 0xac, 0xf5, 0x71, 0x18,
-	0x91, 0x13, 0x4f, 0x39, 0xce, 0xcc, 0xca, 0xfc, 0x08, 0x57, 0x25, 0x5e, 0x89, 0x18, 0x6a, 0x41,
-	0x9d, 0x0c, 0x49, 0xc2, 0x99, 0xb9, 0x74, 0xd1, 0xf0, 0xa5, 0x68, 0x9f, 0x83, 0x5c, 0xef, 0x2a,
-	0x98, 0x7d, 0x00, 0x1b, 0x6d, 0x55, 0x8e, 0xe9, 0x06, 0x9a, 0xd4, 0x58, 0x5b, 0x54, 0x63, 0xdb,
-	0x02, 0xf3, 0x22, 0x8d, 0x0c, 0xdc, 0xde, 0x87, 0xf5, 0x76, 0x46, 0x59, 0x27, 0x0c, 0x92, 0x30,
-	0x09, 0xfe, 0xeb, 0x0d, 0xef, 0xc3, 0xc6, 0x05, 0x16, 0x75, 0x01, 0x83, 0xdb, 0xfb, 0xa4, 0x77,
-	0x16, 0xe4, 0x19, 0x29, 0xd2, 0xb7, 0x60, 0xb9, 0x58, 0x5d, 0x7d, 0xf7, 0x4e, 0xb9, 0xf5, 0x54,
-	0x99, 0xdd, 0x11, 0xaa, 0xe0, 0x4f, 0x65, 0xa1, 0x3f, 0x1b, 0x70, 0x67, 0xea, 0x52, 0xe5, 0xcd,
-	0x5f, 0x55, 0x58, 0xf9, 0x26, 0x7e, 0x57, 0x93, 0x78, 0x0d, 0x97, 0xd0, 0x0e, 0x2c, 0x0f, 0x63,
-	0xd9, 0x5c, 0x72, 0x2a, 0x8d, 0x72, 0xdb, 0xf0, 0x81, 0x5b, 0x1f, 0xc6, 0xa2, 0xd3, 0x5e, 0x80,
-	0xce, 0xd8, 0xc0, 0xa3, 0x29, 0x0f, 0x69, 0x32, 0x9a, 0xcc, 0xc7, 0xe5, 0xf4, 0x94, 0x82, 0x70,
-	0x3a, 0x6c, 0xf0, 0x5a, 0xa2, 0x5d, 0x60, 0xe3, 0x6f, 0xf4, 0x15, 0x34, 0xf3, 0x6d, 0xe8, 0x0d,
-	0x70, 0x96, 0x10, 0xc6, 0xcc, 0xda, 0x96, 0xb6, 0xbd, 0xba, 0xfb, 0xc1, 0x3c, 0xa6, 0xfc, 0xfb,
-	0x4b, 0x09, 0x77, 0x75, 0x3e, 0x39, 0xa0, 0xcf, 0xa1, 0x31, 0x8c, 0xbd, 0x5c, 0xc2, 0xcc, 0xba,
-	0x68, 0x5f, 0x7b, 0x1e, 0x8f, 0x3a, 0x2d, 0x0f, 0xc5, 0x2f, 0xb3, 0x7e, 0x04, 0x98, 0x38, 0x89,
-	0x9e, 0x82, 0x91, 0x66, 0xe1, 0x10, 0x73, 0xe2, 0x9d, 0x92, 0xf3, 0xc9, 0xc8, 0xcd, 0xca, 0xca,
-	0xaa, 0x42, 0x7e, 0x4d, 0xce, 0x45, 0x76, 0x10, 0x54, 0x53, 0x9a, 0xc9, 0x94, 0xd7, 0x5c, 0xf1,
-	0x6d, 0xd9, 0x50, 0x97, 0x17, 0x22, 0x13, 0x96, 0x53, 0xcc, 0x39, 0xc9, 0x12, 0x35, 0xc3, 0xa3,
-	0xa3, 0xfd, 0x04, 0xf4, 0x42, 0x70, 0x68, 0x0d, 0xf4, 0xe3, 0x57, 0x9d, 0xa3, 0x83, 0xf6, 0xe1,
-	0xf3, 0xc3, 0x83, 0x7d, 0xe3, 0x3d, 0xd4, 0x80, 0x6a, 0xf7, 0x59, 0xa7, 0x6b, 0x68, 0xa8, 0x09,
-	0x8d, 0x67, 0xc7, 0xdd, 0xd7, 0xdd, 0x83, 0x4e, 0xd7, 0xa8, 0xd8, 0x06, 0xac, 0x8e, 0x42, 0x53,
-	0x4d, 0xf4, 0x47, 0x05, 0x6e, 0xbd, 0xa4, 0xbd, 0x08, 0xf7, 0xca, 0xad, 0x74, 0x8d, 0x89, 0x41,
-	0xaf, 0x60, 0x25, 0x8c, 0xf3, 0x7d, 0x99, 0xe2, 0xf3, 0x88, 0xe2, 0x13, 0xd5, 0x41, 0x3b, 0xe5,
-	0x9c, 0xce, 0xb8, 0xc5, 0x39, 0x92, 0x06, 0x6e, 0x53, 0xd8, 0xab, 0x13, 0x3a, 0x82, 0x55, 0x1f,
-	0xfb, 0x83, 0x31, 0xdf, 0x68, 0xc7, 0x5c, 0x83, 0x70, 0x45, 0x10, 0xa8, 0x13, 0xb3, 0x5a, 0xb0,
-	0x3c, 0x22, 0x7f, 0x08, 0xd5, 0xb9, 0x25, 0x12, 0x5a, 0x7b, 0x1d, 0x6e, 0x97, 0xe9, 0x55, 0xba,
-	0xfe, 0xd4, 0x60, 0xb3, 0x13, 0xc6, 0x69, 0x44, 0xc4, 0x16, 0x22, 0xdf, 0xd2, 0xec, 0xb4, 0x1f,
-	0xd1, 0x5f, 0xff, 0xd7, 0x36, 0xd8, 0x04, 0x5d, 0x00, 0x88, 0x37, 0x9e, 0xbf, 0x1b, 0x2e, 0x48,
-	0x91, 0x9b, 0x03, 0x3e, 0x05, 0x3d, 0xa0, 0x31, 0xf6, 0x7c, 0x9a, 0xf4, 0xc3, 0x40, 0xcd, 0xdc,
-	0x7a, 0xd1, 0xf5, 0x17, 0x34, 0xc6, 0x6d, 0xa1, 0x75, 0x21, 0x18, 0x7f, 0xdb, 0x36, 0x6c, 0x5d,
-	0xee, 0xad, 0x0c, 0x69, 0xf7, 0x9f, 0x9a, 0x6c, 0xa6, 0x0e, 0xc9, 0x86, 0xa1, 0x4f, 0x50, 0x06,
-	0xb7, 0x66, 0xbc, 0x2e, 0x68, 0xfb, 0xaa, 0xaf, 0xa9, 0xb5, 0x73, 0x05, 0xa4, 0x4a, 0x67, 0xfd,
-	0xcd, 0x5b, 0xab, 0x62, 0x54, 0x10, 0x06, 0x63, 0x7a, 0xab, 0xa3, 0x47, 0x65, 0x9a, 0x4b, 0x1e,
-	0x0f, 0xeb, 0xf1, 0x22, 0x98, 0x7a, 0x15, 0x7f, 0x86, 0xb5, 0xa9, 0xb5, 0x8e, 0x1e, 0x4e, 0x99,
-	0xce, 0x7c, 0x3b, 0xac, 0x47, 0x0b, 0x50, 0x8a, 0xff, 0x3b, 0x58, 0x29, 0xad, 0x69, 0x34, 0xb5,
-	0x52, 0x66, 0x3d, 0x1c, 0xd6, 0x83, 0xb9, 0x18, 0xc5, 0xdc, 0x1e, 0x2f, 0x84, 0xbb, 0x73, 0xb6,
-	0x94, 0x75, 0x6f, 0xb6, 0x52, 0x91, 0xfc, 0x04, 0xcd, 0x62, 0x43, 0xa3, 0xfb, 0x0b, 0x67, 0xc9,
-	0xb2, 0xe7, 0x41, 0xa6, 0x0a, 0xf8, 0x9b, 0x06, 0xe6, 0x65, 0x9d, 0x86, 0x3e, 0x9e, 0xea, 0xff,
-	0xf9, 0xf3, 0x63, 0x39, 0x57, 0x85, 0x97, 0x7d, 0xb0, 0x9a, 0x6f, 0xde, 0x5a, 0x0d, 0xa8, 0xe6,
-	0x6b, 0xdd, 0xd0, 0xf6, 0x3e, 0xfb, 0xe1, 0x49, 0x40, 0xc7, 0x23, 0xe2, 0xd0, 0x2c, 0x68, 0x15,
-	0xfe, 0xe0, 0x86, 0x49, 0x3f, 0xc3, 0x2d, 0xf1, 0xf7, 0xb6, 0x15, 0xd0, 0x56, 0xf1, 0xff, 0x72,
-	0xaf, 0x2e, 0xc4, 0x9f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x8a, 0x5b, 0xba, 0x8b, 0x0b,
+	// 1074 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdb, 0x6e, 0xdb, 0x46,
+	0x13, 0xfe, 0x25, 0xcb, 0xb2, 0x32, 0x94, 0x65, 0x66, 0x13, 0xdb, 0xfc, 0x99, 0x00, 0x76, 0xe8,
+	0x24, 0xb5, 0x5b, 0x94, 0x02, 0x5c, 0x20, 0x2d, 0x02, 0x14, 0x68, 0x2c, 0x3b, 0xa9, 0x5b, 0x24,
+	0x11, 0x28, 0xb9, 0xe7, 0x96, 0x58, 0xd1, 0x2b, 0x8a, 0x30, 0xc9, 0x65, 0xb9, 0x6b, 0x15, 0xba,
+	0xec, 0x7d, 0x2f, 0xfb, 0x18, 0xbd, 0x68, 0xd1, 0x37, 0xc8, 0xfb, 0xe4, 0x1d, 0x0a, 0xee, 0xae,
+	0x24, 0x52, 0x96, 0x65, 0x3b, 0xed, 0x95, 0xb8, 0x33, 0xdf, 0x7c, 0x3b, 0x33, 0x3b, 0x07, 0xc1,
+	0xa6, 0x37, 0x48, 0x69, 0x14, 0x70, 0xd2, 0xc4, 0x49, 0xd0, 0xe4, 0x84, 0x71, 0x3b, 0x49, 0x29,
+	0xa7, 0xa8, 0x3e, 0x56, 0xd8, 0x38, 0x09, 0xcc, 0xfb, 0x05, 0x58, 0xef, 0x3c, 0x08, 0x4f, 0x5d,
+	0x9c, 0x04, 0x12, 0x6b, 0x9a, 0x05, 0x2d, 0x1b, 0xb1, 0x94, 0x52, 0xc5, 0x63, 0xaa, 0x0b, 0xce,
+	0x23, 0xca, 0x9a, 0x1e, 0x8d, 0x22, 0x1a, 0x2b, 0x85, 0x91, 0x53, 0x44, 0x84, 0xa7, 0x81, 0xc7,
+	0xa4, 0xc6, 0xfa, 0x6d, 0x09, 0xcc, 0x83, 0xec, 0x8a, 0x2e, 0x4e, 0x7d, 0xc2, 0x4f, 0xe2, 0x80,
+	0x77, 0x09, 0xe3, 0x0e, 0xf9, 0xf9, 0x9c, 0x30, 0x8e, 0x9e, 0x42, 0x5d, 0x3a, 0xc0, 0x85, 0xda,
+	0x28, 0x6d, 0x97, 0x76, 0xb5, 0xfd, 0x4d, 0x7b, 0xca, 0x67, 0xe7, 0xac, 0x1d, 0xad, 0x37, 0x3d,
+	0xa0, 0x2d, 0xd0, 0x52, 0xc2, 0xce, 0x43, 0xee, 0x26, 0x98, 0x0f, 0x8c, 0xf2, 0x76, 0x69, 0xf7,
+	0x96, 0x03, 0x52, 0xd4, 0xc6, 0x7c, 0x80, 0xde, 0x87, 0x6a, 0xc6, 0x43, 0xb9, 0xb1, 0x24, 0x68,
+	0x51, 0x9e, 0xb6, 0x25, 0x34, 0x8e, 0x42, 0xa0, 0x43, 0x58, 0xee, 0x87, 0xd8, 0x67, 0x46, 0x45,
+	0x40, 0x6d, 0x3b, 0x9f, 0x32, 0xfb, 0xf2, 0x08, 0xec, 0xe7, 0x99, 0x95, 0x23, 0x8d, 0xd1, 0x21,
+	0xdc, 0x4e, 0xb0, 0x77, 0x86, 0x7d, 0xe2, 0xf6, 0x42, 0xec, 0x9d, 0x85, 0x01, 0xe3, 0xc6, 0xf2,
+	0xf6, 0xd2, 0x6c, 0x4c, 0x6d, 0x09, 0x3a, 0x8e, 0xfb, 0xd4, 0xd1, 0x95, 0xc5, 0xc1, 0xd8, 0xc0,
+	0xfc, 0x16, 0x96, 0x05, 0x2b, 0xda, 0x81, 0x55, 0x12, 0x25, 0x7c, 0xe4, 0xaa, 0x67, 0x10, 0xe9,
+	0xa9, 0x39, 0x75, 0x21, 0xec, 0x48, 0x19, 0xfa, 0x00, 0x6e, 0x73, 0x4a, 0x43, 0x6f, 0x80, 0x83,
+	0xd8, 0xf5, 0x06, 0x38, 0xf6, 0xc9, 0xa9, 0x48, 0x46, 0xcd, 0xd1, 0x27, 0x8a, 0x96, 0x94, 0x5b,
+	0x7f, 0x97, 0xe0, 0xde, 0xdc, 0x60, 0x58, 0x42, 0x63, 0x46, 0xd0, 0x03, 0xa8, 0x73, 0x9c, 0xf6,
+	0x70, 0x18, 0xca, 0xa4, 0x96, 0x44, 0x52, 0x35, 0x25, 0x13, 0x59, 0xfd, 0x0c, 0xd6, 0xfa, 0x38,
+	0x08, 0xc9, 0xa9, 0xab, 0x1c, 0x67, 0x46, 0x79, 0x71, 0x84, 0x0d, 0x89, 0x57, 0x22, 0x86, 0x9a,
+	0x50, 0x25, 0x43, 0x12, 0x73, 0x66, 0x2c, 0x5d, 0x34, 0x7c, 0x29, 0xca, 0xe7, 0x28, 0xd3, 0x3b,
+	0x0a, 0x66, 0x1d, 0xc1, 0x66, 0x4b, 0x3d, 0xc7, 0x6c, 0x01, 0x4d, 0xdf, 0xb8, 0x74, 0xd5, 0x1b,
+	0x5b, 0x26, 0x18, 0x17, 0x69, 0x64, 0xe0, 0x56, 0x0b, 0xd6, 0xc7, 0xba, 0xf6, 0x88, 0xbf, 0xe3,
+	0x05, 0x06, 0x6c, 0xcc, 0x92, 0x28, 0xfa, 0x43, 0xd8, 0x68, 0xa5, 0x94, 0x75, 0x02, 0x3f, 0x0e,
+	0x62, 0xff, 0x5d, 0x03, 0xf8, 0x3f, 0x6c, 0x5e, 0x60, 0x51, 0x17, 0x30, 0xb8, 0x7b, 0x48, 0x7a,
+	0xe7, 0x7e, 0x96, 0xf0, 0x3c, 0x7d, 0x13, 0x56, 0xf2, 0xc5, 0xa3, 0xed, 0xaf, 0x17, 0x2b, 0x5b,
+	0x55, 0x91, 0x33, 0x46, 0xe5, 0xfc, 0x29, 0x5f, 0xe9, 0xcf, 0x26, 0xac, 0xcf, 0x5c, 0xaa, 0xbc,
+	0xf9, 0xb3, 0x02, 0xab, 0x5f, 0x45, 0xff, 0x55, 0xa3, 0xdf, 0xc0, 0x25, 0xb4, 0x07, 0x2b, 0xc3,
+	0x48, 0xd6, 0xae, 0x6c, 0x7a, 0xbd, 0x58, 0x95, 0x7c, 0xe0, 0x54, 0x87, 0x91, 0x28, 0xe4, 0x17,
+	0xa0, 0x31, 0x36, 0x70, 0x69, 0xc2, 0x03, 0x1a, 0x8f, 0x1b, 0xff, 0x71, 0x31, 0x3d, 0x85, 0x20,
+	0xec, 0x0e, 0x1b, 0xbc, 0x96, 0x68, 0x07, 0xd8, 0xe4, 0x1b, 0x7d, 0x01, 0xf5, 0xec, 0xb1, 0xdd,
+	0x01, 0x4e, 0x63, 0xc2, 0x98, 0xb1, 0xbc, 0x5d, 0xda, 0x6d, 0xec, 0xbf, 0xb7, 0x88, 0x29, 0xfb,
+	0xfe, 0x5c, 0xc2, 0x1d, 0x8d, 0x4f, 0x0f, 0xe8, 0x53, 0xa8, 0x0d, 0x23, 0x37, 0x93, 0x30, 0xa3,
+	0x2a, 0xba, 0xc3, 0x5a, 0xc4, 0xa3, 0x4e, 0x2b, 0x43, 0xf1, 0xcb, 0xcc, 0x1f, 0x00, 0xa6, 0x4e,
+	0xa2, 0xa7, 0xa0, 0x27, 0x69, 0x30, 0xc4, 0x9c, 0xb8, 0x67, 0x64, 0x34, 0xed, 0xe8, 0x79, 0x59,
+	0x69, 0x28, 0xe4, 0x97, 0x64, 0x24, 0xb2, 0x83, 0xa0, 0x92, 0xd0, 0x54, 0xa6, 0x7c, 0xd9, 0x11,
+	0xdf, 0xa6, 0x05, 0x55, 0x79, 0x21, 0x32, 0x60, 0x25, 0xc1, 0x9c, 0x93, 0x34, 0x56, 0x23, 0x62,
+	0x7c, 0xb4, 0x9e, 0x80, 0x96, 0x0b, 0x0e, 0xad, 0x81, 0x76, 0xf2, 0xaa, 0xd3, 0x3e, 0x6a, 0x1d,
+	0x3f, 0x3f, 0x3e, 0x3a, 0xd4, 0xff, 0x87, 0x6a, 0x50, 0xe9, 0x3e, 0xeb, 0x74, 0xf5, 0x12, 0xaa,
+	0x43, 0xed, 0xd9, 0x49, 0xf7, 0x75, 0xf7, 0xa8, 0xd3, 0xd5, 0xcb, 0x96, 0x0e, 0x8d, 0x71, 0x68,
+	0xaa, 0x88, 0x7e, 0x2f, 0xc3, 0x9d, 0x97, 0xb4, 0x17, 0xe2, 0x5e, 0xb1, 0x94, 0x6e, 0xd0, 0x31,
+	0xe8, 0x15, 0xac, 0x06, 0x51, 0x36, 0x8e, 0x13, 0x3c, 0x0a, 0x29, 0x3e, 0x55, 0x15, 0xb4, 0x57,
+	0xcc, 0xe9, 0x9c, 0x5b, 0xec, 0xb6, 0x34, 0x70, 0xea, 0xc2, 0x5e, 0x9d, 0x50, 0x1b, 0x1a, 0x1e,
+	0xf6, 0x06, 0x13, 0xbe, 0xf1, 0x08, 0xbb, 0x01, 0xe1, 0xaa, 0x20, 0x50, 0x27, 0x66, 0x36, 0x61,
+	0x65, 0x4c, 0xfe, 0x10, 0x2a, 0x0b, 0x9f, 0x48, 0x68, 0xad, 0x0d, 0xb8, 0x5b, 0xa4, 0x57, 0xe9,
+	0xfa, 0xa3, 0x04, 0x5b, 0x9d, 0x20, 0x4a, 0x42, 0x22, 0x66, 0x10, 0xf9, 0x9a, 0xa6, 0x67, 0xfd,
+	0x90, 0xfe, 0xf2, 0xaf, 0xa6, 0xc1, 0x16, 0x68, 0x02, 0x40, 0xdc, 0x49, 0xff, 0xdd, 0x72, 0x40,
+	0x8a, 0x9c, 0x0c, 0xf0, 0x31, 0x68, 0x3e, 0x8d, 0xb0, 0xeb, 0xd1, 0xb8, 0x1f, 0xf8, 0xaa, 0xe7,
+	0x36, 0xf2, 0xae, 0xbf, 0xa0, 0x11, 0x6e, 0x09, 0xad, 0x03, 0xfe, 0xe4, 0xdb, 0xb2, 0x60, 0xfb,
+	0x72, 0x6f, 0x65, 0x48, 0xfb, 0x7f, 0x55, 0x65, 0x31, 0x75, 0x48, 0x3a, 0x0c, 0x3c, 0x82, 0x52,
+	0xb8, 0x33, 0x67, 0x79, 0xa1, 0xdd, 0xeb, 0x2e, 0x6b, 0x73, 0xef, 0x1a, 0x48, 0x95, 0xce, 0xea,
+	0x9b, 0xb7, 0x66, 0x59, 0x2f, 0x23, 0x0c, 0xfa, 0xec, 0xd2, 0x40, 0x8f, 0x8a, 0x34, 0x97, 0xec,
+	0x26, 0xf3, 0xf1, 0x55, 0x30, 0xb5, 0x74, 0xbf, 0x87, 0x46, 0x71, 0x6d, 0xa0, 0x9d, 0xf9, 0x96,
+	0x85, 0xcd, 0x64, 0x3e, 0x5c, 0x0c, 0x52, 0xe4, 0x3f, 0xc1, 0xda, 0xcc, 0xce, 0x40, 0xb3, 0x86,
+	0x73, 0x17, 0x93, 0xf9, 0xe8, 0x0a, 0x94, 0xe2, 0xff, 0x06, 0x56, 0x0b, 0x3b, 0x00, 0xcd, 0xcc,
+	0xab, 0x79, 0x5b, 0xc9, 0xdc, 0x59, 0x88, 0x51, 0xcc, 0xad, 0xc9, 0xb4, 0xb9, 0xb7, 0x60, 0x04,
+	0x9a, 0xf7, 0xe7, 0x2b, 0x15, 0xc9, 0x8f, 0x50, 0xcf, 0x77, 0x0b, 0x7a, 0x70, 0x65, 0xa3, 0x9a,
+	0xd6, 0x22, 0xc8, 0x4c, 0x75, 0xfc, 0x5a, 0x02, 0xe3, 0xb2, 0x32, 0x46, 0x1f, 0xce, 0x34, 0xd7,
+	0xe2, 0xe6, 0x34, 0xed, 0xeb, 0xc2, 0x8b, 0x3e, 0x98, 0xf5, 0x37, 0x6f, 0xcd, 0x1a, 0x54, 0xb2,
+	0x57, 0xd7, 0x4b, 0x07, 0x9f, 0x7c, 0xf7, 0xc4, 0xa7, 0x93, 0xfe, 0xb3, 0x69, 0xea, 0x37, 0x73,
+	0x7f, 0xce, 0x83, 0xb8, 0x9f, 0xe2, 0xa6, 0xf8, 0x6b, 0xde, 0xf4, 0x69, 0x33, 0xff, 0x5f, 0xbf,
+	0x57, 0x15, 0xe2, 0x8f, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x23, 0xee, 0xba, 0x7a, 0x47, 0x0c,
 	0x00, 0x00,
 }
 
@@ -1005,6 +1080,8 @@
 	BuildTargetUnitTest(ctx context.Context, in *BuildTargetUnitTestRequest, opts ...grpc.CallOption) (*BuildTargetUnitTestResponse, error)
 	// Run the chromite unit tests.
 	ChromiteUnitTest(ctx context.Context, in *ChromiteUnitTestRequest, opts ...grpc.CallOption) (*ChromiteUnitTestResponse, error)
+	// Run Pytest in chromite.
+	ChromitePytest(ctx context.Context, in *ChromitePytestRequest, opts ...grpc.CallOption) (*ChromitePytestResponse, error)
 	// Run the cros-signing unit tests.
 	CrosSigningTest(ctx context.Context, in *CrosSigningTestRequest, opts ...grpc.CallOption) (*CrosSigningTestResponse, error)
 	// Run the debug info tests on a sysroot.
@@ -1043,6 +1120,15 @@
 	return out, nil
 }
 
+func (c *testServiceClient) ChromitePytest(ctx context.Context, in *ChromitePytestRequest, opts ...grpc.CallOption) (*ChromitePytestResponse, error) {
+	out := new(ChromitePytestResponse)
+	err := c.cc.Invoke(ctx, "/chromite.api.TestService/ChromitePytest", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *testServiceClient) CrosSigningTest(ctx context.Context, in *CrosSigningTestRequest, opts ...grpc.CallOption) (*CrosSigningTestResponse, error) {
 	out := new(CrosSigningTestResponse)
 	err := c.cc.Invoke(ctx, "/chromite.api.TestService/CrosSigningTest", in, out, opts...)
@@ -1094,6 +1180,8 @@
 	BuildTargetUnitTest(context.Context, *BuildTargetUnitTestRequest) (*BuildTargetUnitTestResponse, error)
 	// Run the chromite unit tests.
 	ChromiteUnitTest(context.Context, *ChromiteUnitTestRequest) (*ChromiteUnitTestResponse, error)
+	// Run Pytest in chromite.
+	ChromitePytest(context.Context, *ChromitePytestRequest) (*ChromitePytestResponse, error)
 	// Run the cros-signing unit tests.
 	CrosSigningTest(context.Context, *CrosSigningTestRequest) (*CrosSigningTestResponse, error)
 	// Run the debug info tests on a sysroot.
@@ -1116,6 +1204,9 @@
 func (*UnimplementedTestServiceServer) ChromiteUnitTest(ctx context.Context, req *ChromiteUnitTestRequest) (*ChromiteUnitTestResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ChromiteUnitTest not implemented")
 }
+func (*UnimplementedTestServiceServer) ChromitePytest(ctx context.Context, req *ChromitePytestRequest) (*ChromitePytestResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ChromitePytest not implemented")
+}
 func (*UnimplementedTestServiceServer) CrosSigningTest(ctx context.Context, req *CrosSigningTestRequest) (*CrosSigningTestResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method CrosSigningTest not implemented")
 }
@@ -1172,6 +1263,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _TestService_ChromitePytest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ChromitePytestRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TestServiceServer).ChromitePytest(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/chromite.api.TestService/ChromitePytest",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TestServiceServer).ChromitePytest(ctx, req.(*ChromitePytestRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _TestService_CrosSigningTest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(CrosSigningTestRequest)
 	if err := dec(in); err != nil {
@@ -1275,6 +1384,10 @@
 			Handler:    _TestService_ChromiteUnitTest_Handler,
 		},
 		{
+			MethodName: "ChromitePytest",
+			Handler:    _TestService_ChromitePytest_Handler,
+		},
+		{
 			MethodName: "CrosSigningTest",
 			Handler:    _TestService_CrosSigningTest_Handler,
 		},
diff --git a/src/chromite/api/test.proto b/src/chromite/api/test.proto
index 8ab346b..ac8e491 100644
--- a/src/chromite/api/test.proto
+++ b/src/chromite/api/test.proto
@@ -48,6 +48,14 @@
 message ChromiteUnitTestResponse {
 }
 
+message ChromitePytestRequest {
+  // The chroot to use to execute the endpoint.
+  chromiumos.Chroot chroot = 1;
+}
+
+message ChromitePytestResponse {
+}
+
 message CrosSigningTestRequest {
   // Required if not in default location.
   // The chroot where the tests should be executed.
@@ -174,6 +182,9 @@
   // Run the chromite unit tests.
   rpc ChromiteUnitTest(ChromiteUnitTestRequest) returns (ChromiteUnitTestResponse);
 
+  // Run Pytest in chromite.
+  rpc ChromitePytest(ChromitePytestRequest) returns (ChromitePytestResponse);
+
   // Run the cros-signing unit tests.
   rpc CrosSigningTest(CrosSigningTestRequest) returns (CrosSigningTestResponse);
 
