diff --git a/test-server/CHANGES.md b/test-server/CHANGES.md
index e71e9d0b..0a11e2ca 100644
--- a/test-server/CHANGES.md
+++ b/test-server/CHANGES.md
@@ -2,11 +2,13 @@
 
 ## Unreleased - 2020-xx-xx
 
+* add ability to set address for `TestServer` [#1645]
+
+[#1645]: https://github.com/actix/actix-web/pull/1645
 
 ## 2.0.0 - 2020-09-11
 * Update actix-codec and actix-utils dependencies.
 
-
 ## 2.0.0-alpha.1 - 2020-05-23
 * Update the `time` dependency to 0.2.7
 * Update `actix-connect` dependency to 2.0.0-alpha.2
diff --git a/test-server/src/lib.rs b/test-server/src/lib.rs
index 5d575027..4159c8d8 100644
--- a/test-server/src/lib.rs
+++ b/test-server/src/lib.rs
@@ -44,12 +44,20 @@ pub use actix_testing::*;
 /// }
 /// ```
 pub async fn test_server<F: ServiceFactory<TcpStream>>(factory: F) -> TestServer {
+    let tcp = net::TcpListener::bind("127.0.0.1:0").unwrap();
+    test_server_with_addr(tcp, factory).await
+}
+
+/// Start [`test server`](./fn.test_server.html) on a concrete Address
+pub async fn test_server_with_addr<F: ServiceFactory<TcpStream>>(
+    tcp: net::TcpListener,
+    factory: F,
+) -> TestServer {
     let (tx, rx) = mpsc::channel();
 
     // run server in separate thread
     thread::spawn(move || {
         let sys = System::new("actix-test-server");
-        let tcp = net::TcpListener::bind("127.0.0.1:0").unwrap();
         let local_addr = tcp.local_addr().unwrap();
 
         Server::build()