Specify file with username:password rather than specifying the username:password directly on the command line.
diff --git a/api/api.go b/api/api.go
index 6289bef..5cca4d8 100644
--- a/api/api.go
+++ b/api/api.go
@@ -22,11 +22,13 @@
 	"encoding/base64"
 	"errors"
 	"fmt"
+	"io/ioutil"
 	"log"
 	"math/rand"
 	"net/http"
 	"sort"
 	"strconv"
+	"strings"
 	"time"
 
 	"github.com/golang/protobuf/jsonpb"
@@ -56,14 +58,23 @@
 
 // InitHTTPConnection creates and returns a new HTTPConnection object
 // with a given server address and username/password.
-func InitHTTPConnection(serverAddr string, usernamePassword string) *HTTPConnection {
+func InitHTTPConnection(serverAddr string, credentialsFile string) (*HTTPConnection, error) {
+	usernamePassword := ""
+	if credentialsFile != "" {
+		// Set up username/password.
+		data, err := ioutil.ReadFile(credentialsFile)
+		if err != nil {
+			return nil, err
+		}
+		usernamePassword = strings.Replace(string(data), "\n", "", -1)
+	}
 	return &HTTPConnection{
 		client:      &http.Client{Timeout: time.Duration(1 * time.Second)},
 		credentials: "Basic " + base64.StdEncoding.EncodeToString([]byte(usernamePassword)),
 		marshaler:   &jsonpb.Marshaler{OrigName: true},
 		// TODO(wsilberm): Use https
 		baseURL: "http://" + serverAddr,
-	}
+	}, nil
 }
 
 func (h HTTPConnection) getURL(rpcName string) string {
diff --git a/testclient/main.go b/testclient/main.go
index eabfbef..b7610e2 100644
--- a/testclient/main.go
+++ b/testclient/main.go
@@ -34,7 +34,7 @@
 
 var (
 	serverAddr        = flag.String("server_addr", "example.com:80", "Your http server's address in the format of host:port")
-	usernamePassword  = flag.String("username_password", "", "(eg 'username:password') credentials for your server. Leave blank to bypass authentication.")
+	credentialsFile   = flag.String("credentials_file", "", "File containing credentials for your server. Leave blank to bypass authentication.")
 	testSlots         = flag.Int("num_test_slots", 10, "Maximum number of slots to test from availability_feed. Slots will be selected randomly")
 	allFlows          = flag.Bool("all_tests", false, "Whether to test all endpoints.")
 	healthFlow        = flag.Bool("health_check_test", false, "Whether to test the Health endpoint.")
@@ -171,7 +171,10 @@
 	defer f.Close()
 	log.SetOutput(f)
 
-	conn := api.InitHTTPConnection(*serverAddr, *usernamePassword)
+	conn, err := api.InitHTTPConnection(*serverAddr, *credentialsFile)
+	if err != nil {
+		log.Fatalf("Failed to init http connection %v", err)
+	}
 
 	// Health check doesn't affect the cancel booking flow so we let it through.
 	if *cancelAllBookings && (*allFlows || *checkFlow || *bookFlow || *listFlow || *statusFlow || *rescheduleFlow) {