diff --git a/examples/HelloWorld/README.md b/examples/HelloWorld/README.md
new file mode 100644
index 00000000..f7efe8a2
--- /dev/null
+++ b/examples/HelloWorld/README.md
@@ -0,0 +1,98 @@
+# Hello World
+
+This example shows you how to organize and run testcases in layer.
+
+## file structure
+
+According to rules, all testcase definition files should be placed in `tests` folder, and testing reports will be generated in `reports` folder.
+
+```text
+$ cd httprunner/examples/HelloWorld
+$ tree .
+.
+├── README.md
+├── reports
+│ └── smoketest
+│ └── 2018-02-09-16-25-54.html
+└── tests
+ ├── __init__.py
+ ├── api
+ │ └── basic.yml
+ ├── debugtalk.py
+ ├── suite
+ │ ├── create_and_check.yml
+ │ └── setup.yml
+ └── testcases
+ └── smoketest.yml
+```
+
+## Start server
+
+In order to run test, we need a backend service, and here we will use `api_server` located in our unittests.
+
+```bash
+$ cd httprunner
+$ export FLASK_APP=tests/api_server.py
+$ flask run
+ * Serving Flask app "tests.api_server"
+ * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
+```
+
+## run testcases
+
+When you want to run testcases, you should make sure you are in the root directory of your project. In this example, that is the HelloWorld folder path.
+
+```bash
+$ cd httprunner/examples/HelloWorld
+```
+
+Then, run the testcase with `hrun` command.
+
+```
+$ hrun tests/testcases/smoketest.yml
+Running tests...
+----------------------------------------------------------------------
+ get token ... INFO:root: Start to POST http://127.0.0.1:5000/api/get-token
+INFO:root: status_code: 200, response_time: 12 ms, response_length: 46 bytes
+OK (0.018492)s
+ reset all users ... INFO:root: Start to GET http://127.0.0.1:5000/api/reset-all
+INFO:root: status_code: 200, response_time: 5 ms, response_length: 17 bytes
+OK (0.006153)s
+ make sure user 1000 does not exist ... INFO:root: Start to GET http://127.0.0.1:5000/api/users/1000
+ERROR:root: Failed to GET http://127.0.0.1:5000/api/users/1000! exception msg: 404 Client Error: NOT FOUND for url: http://127.0.0.1:5000/api/users/1000
+OK (0.010638)s
+ create user 1000 ... INFO:root: Start to POST http://127.0.0.1:5000/api/users/1000
+INFO:root: status_code: 201, response_time: 9 ms, response_length: 54 bytes
+OK (0.010303)s
+ check if user 1000 exists ... INFO:root: Start to GET http://127.0.0.1:5000/api/users/1000
+INFO:root: status_code: 200, response_time: 11 ms, response_length: 66 bytes
+OK (0.013168)s
+ make sure user 1001 does not exist ... INFO:root: Start to GET http://127.0.0.1:5000/api/users/1001
+ERROR:root: Failed to GET http://127.0.0.1:5000/api/users/1001! exception msg: 404 Client Error: NOT FOUND for url: http://127.0.0.1:5000/api/users/1001
+OK (0.013631)s
+ create user 1001 ... INFO:root: Start to POST http://127.0.0.1:5000/api/users/1001
+INFO:root: status_code: 201, response_time: 6 ms, response_length: 54 bytes
+OK (0.007490)s
+ check if user 1001 exists ... INFO:root: Start to GET http://127.0.0.1:5000/api/users/1001
+INFO:root: status_code: 200, response_time: 9 ms, response_length: 66 bytes
+OK (0.011435)s
+
+----------------------------------------------------------------------
+Ran 8 tests in 0.092s
+
+OK
+
+
+
+Generating HTML reports...
+Template is not specified, load default template instead.
+Reports generated: /Users/debugtalk/MyProjects/HttpRunner-dev/HttpRunner/examples/HelloWorld/reports/smoketest/2018-02-09-16-38-14.html
+```
+
+After the running is over, you will get a testing report, which is in HTML format.
+
+```bash
+$ open reports/smoketest/2018-02-09-16-38-14.html
+```
+
+
diff --git a/examples/HelloWorld/reports/smoketest/2018-02-09-16-25-54.html b/examples/HelloWorld/reports/smoketest/2018-02-09-16-25-54.html
new file mode 100644
index 00000000..86ad6698
--- /dev/null
+++ b/examples/HelloWorld/reports/smoketest/2018-02-09-16-25-54.html
@@ -0,0 +1,205 @@
+
+
+
+ Test Result
+
+
+
+
+
+
+
+
+
Test Result
+
Start Time: 2018-02-09 16:25:53
+
Duration: 0.141s
+
Status: Pass: 11
+
+
+
+
+
+
+
+
smoketest
+
Status
+
+
+
+
+
+
get token
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
reset all users
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
make sure user 1000 does not exist
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
create user 1000
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
check if user 1000 exists
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
make sure user 1001 does not exist
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
create user 1001
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
check if user 1001 exists
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
make sure user 1002 does not exist
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
create user 1002
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
check if user 1002 exists
+
+
+
+ Pass
+
+
+
+
+
+
+
+
+
+ Total Test Runned: 11
+
+
+ Pass: 11
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/HelloWorld/reports/smoketest/2018-02-09-16-38-14.html b/examples/HelloWorld/reports/smoketest/2018-02-09-16-38-14.html
new file mode 100644
index 00000000..8df2409b
--- /dev/null
+++ b/examples/HelloWorld/reports/smoketest/2018-02-09-16-38-14.html
@@ -0,0 +1,166 @@
+
+
+
+ Test Result
+
+
+
+
+
+