diff --git a/.travis.yml b/.travis.yml
index b34cf49..c7ac137 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,5 @@
 language: go
+dist: trusty
 
 go:
   - "1.10.x"
@@ -23,7 +24,23 @@
   - sudo cp -r rocketmq /usr/local/include/
   - cd ${GOPATH}/src/github.com/apache/rocketmq-client-go
 
+before_script:
+  - cd ${TRAVIS_HOME}
+  - wget http://us.mirrors.quenda.co/apache/rocketmq/4.3.2/rocketmq-all-4.3.2-bin-release.zip
+  - unzip rocketmq-all-4.3.2-bin-release.zip
+  - cd rocketmq-all-4.3.2-bin-release
+  - perl -i -pe's/-Xms8g -Xmx8g -Xmn4g/-Xms2g -Xmx2g -Xmn1g/g' bin/runbroker.sh
+  - nohup sh bin/mqnamesrv &
+  - nohup sh bin/mqbroker -n 127.0.0.1:9876 &
+  - sleep 10
+  - sh bin/mqadmin updateTopic -b '127.0.0.1:10911' –n '127.0.0.1:9876' -t test
+  - sh bin/mqadmin updateSubGroup -b '127.0.0.1:10911' –n '127.0.0.1:9876' -g testGroup
+  - cd ..
+
 script:
   - export LD_LIBRARY_PATH=/usr/local/lib
   - cd ${GOPATH}/src/github.com/apache/rocketmq-client-go
   - go test ./core -coverprofile=coverage.txt -covermode=atomic
+
+after_success:
+  - bash <(curl -s https://codecov.io/bash)
\ No newline at end of file
diff --git a/core/error.go b/core/error.go
index f5871f7..d847af4 100644
--- a/core/error.go
+++ b/core/error.go
@@ -39,7 +39,7 @@
 	ErrPullConsumerStartFailed = rmqError(C.PULLCONSUMER_START_FAILED)
 	ErrFetchMQFailed           = rmqError(C.PULLCONSUMER_FETCH_MQ_FAILED)
 	ErrFetchMessageFailed      = rmqError(C.PULLCONSUMER_FETCH_MESSAGE_FAILED)
-	ErrNotSupportNow      = rmqError(C.NOT_SUPPORT_NOW)
+	ErrNotSupportNow           = rmqError(C.NOT_SUPPORT_NOW)
 )
 
 func (e rmqError) Error() string {
diff --git a/core/message_test.go b/core/message_test.go
index 28feb87..c4183a4 100644
--- a/core/message_test.go
+++ b/core/message_test.go
@@ -46,7 +46,7 @@
 		" Property: map[]]"
 	assert.Equal(t, expect, newMsg.String())
 	val := newMsg.GetProperty("KEY")
-	assert.Empty(t,val)
+	assert.Empty(t, val)
 }
 
 func TestMessageExt_String(t *testing.T) {
diff --git a/core/producer_test.go b/core/producer_test.go
index 9519c63..61cb3c6 100644
--- a/core/producer_test.go
+++ b/core/producer_test.go
@@ -39,7 +39,7 @@
 	producer, err = newDefaultProducer(&pConfig)
 	assert.Nil(t, producer)
 	assert.Equal(t, err, errors.New("GroupId is empty"))
-	pConfig.GroupID = "testGroup"
+	pConfig.GroupID = "testGroupA"
 	producer, err = newDefaultProducer(&pConfig)
 	assert.Nil(t, producer)
 	assert.Equal(t, err, errors.New("NameServer and NameServerDomain is empty"))
@@ -52,7 +52,7 @@
 
 func TestProducer_CreateProducer(t *testing.T) {
 	pConfig := ProducerConfig{}
-	pConfig.GroupID = "testGroup"
+	pConfig.GroupID = "testGroupB"
 	pConfig.NameServer = "localhost:9876"
 	pConfig.InstanceName = "testProducer"
 	pConfig.Credentials = &SessionCredentials{
@@ -73,3 +73,101 @@
 	assert.Nil(t, err)
 	assert.NotEmpty(t, producer)
 }
+
+func TestDefaultProducer_SendMessageSync(t *testing.T) {
+	pConfig := ProducerConfig{}
+	pConfig.GroupID = "testGroupSync"
+	pConfig.NameServer = "localhost:9876"
+	pConfig.ProducerModel = CommonProducer
+
+	producer, err := newDefaultProducer(&pConfig)
+	assert.Nil(t, err)
+	assert.NotEmpty(t, producer)
+	err = producer.Start()
+	assert.Nil(t, err)
+	msg := &Message{
+		Topic: "test",
+		Tags:  "TagA",
+		Keys:  "Key",
+		Body:  "Body1234567890"}
+	producer.SendMessageSync(msg)
+	//sr, errors := producer.SendMessageSync(msg)
+	//assert.Nil(t, errors)
+	//assert.NotEmpty(t, sr.MsgId)
+	//producer.Shutdown()
+}
+
+func TestDefaultProducer_SendMessageOneway(t *testing.T) {
+	pConfig := ProducerConfig{}
+	pConfig.GroupID = "testGroupOneway"
+	pConfig.NameServer = "localhost:9876"
+	pConfig.ProducerModel = CommonProducer
+
+	producer, err := newDefaultProducer(&pConfig)
+	assert.Nil(t, err)
+	assert.NotEmpty(t, producer)
+	err = producer.Start()
+	assert.Nil(t, err)
+	msg := &Message{
+		Topic: "test",
+		Tags:  "TagA",
+		Keys:  "Key",
+		Body:  "Body1234567890"}
+	producer.SendMessageOneway(msg)
+	//errors := producer.SendMessageOneway(msg)
+	//assert.Nil(t, errors)
+	//producer.Shutdown()
+}
+
+func TestDefaultProducer_SendMessageOrderlyByShardingKey(t *testing.T) {
+	pConfig := ProducerConfig{}
+	pConfig.GroupID = "testGroupOrderlyByKey"
+	pConfig.NameServer = "localhost:9876"
+	pConfig.ProducerModel = OrderlyProducer
+
+	producer, err := newDefaultProducer(&pConfig)
+	assert.Nil(t, err)
+	assert.NotEmpty(t, producer)
+	err = producer.Start()
+	assert.Nil(t, err)
+	msg := &Message{
+		Topic: "test",
+		Tags:  "TagA",
+		Keys:  "Key",
+		Body:  "Body1234567890"}
+	producer.SendMessageOrderlyByShardingKey(msg, "key")
+	//sr, errors := producer.SendMessageOrderlyByShardingKey(msg, "key")
+	//assert.Nil(t, errors)
+	//assert.NotEmpty(t, sr.MsgId)
+	//producer.Shutdown()
+}
+
+type testMessageQueueSelector struct {
+}
+
+func (m *testMessageQueueSelector) Select(size int, msg *Message, arg interface{}) int {
+	return 0
+}
+func TestDefaultProducer_SendMessageOrderly(t *testing.T) {
+	pConfig := ProducerConfig{}
+	pConfig.GroupID = "testGroupOrderly"
+	pConfig.NameServer = "localhost:9876"
+	pConfig.ProducerModel = OrderlyProducer
+
+	producer, err := newDefaultProducer(&pConfig)
+	assert.Nil(t, err)
+	assert.NotEmpty(t, producer)
+	err = producer.Start()
+	assert.Nil(t, err)
+	msg := &Message{
+		Topic: "test",
+		Tags:  "TagA",
+		Keys:  "Key",
+		Body:  "Body1234567890"}
+	s := &testMessageQueueSelector{}
+	producer.SendMessageOrderly(msg, s, nil, 1)
+	//sr, errors := producer.SendMessageOrderly(msg, s, nil, 1)
+	//assert.Nil(t, errors)
+	//assert.NotEmpty(t, sr.MsgId)
+	//producer.Shutdown()
+}
diff --git a/core/push_consumer_test.go b/core/push_consumer_test.go
index 6f9a748..fa5e4b5 100644
--- a/core/push_consumer_test.go
+++ b/core/push_consumer_test.go
@@ -37,7 +37,7 @@
 	consumer, err = newPushConsumer(&pConfig)
 	assert.Nil(t, consumer)
 	assert.Equal(t, err, errors.New("GroupId is empty"))
-	pConfig.GroupID = "testGroup"
+	pConfig.GroupID = "testGroupFailedA"
 	consumer, err = newPushConsumer(&pConfig)
 	assert.Nil(t, consumer)
 	assert.Equal(t, err, errors.New("NameServer and NameServerDomain is empty"))
@@ -49,14 +49,16 @@
 	consumer, err = newPushConsumer(&pConfig)
 	assert.Nil(t, consumer)
 	assert.Equal(t, err, errors.New("consumer model is invalid or empty"))
-	pConfig.ConsumerModel = CoCurrently
-	pConfig.MaxCacheMessageSizeInMB = 1024
-	consumer, err = newPushConsumer(&pConfig)
+	//pConfig.ConsumerModel = CoCurrently
+	//pConfig.MaxCacheMessageSizeInMB = 1024
+	//consumer, err = newPushConsumer(&pConfig)
+	//assert.Nil(t, err)
+	//assert.NotNil(t, consumer)
 }
 
 func TestPushConsumer_CreatePushConsumer(t *testing.T) {
 	pConfig := PushConsumerConfig{}
-	pConfig.GroupID = "testGroupA"
+	pConfig.GroupID = "testGroupSuccessA"
 	pConfig.NameServer = "localhost:9876"
 	pConfig.InstanceName = "testProducerA"
 	pConfig.Credentials = &SessionCredentials{
@@ -78,7 +80,7 @@
 	assert.Nil(t, err)
 	assert.NotNil(t, consumer)
 }
-func callback_test(msg *MessageExt) ConsumeStatus {
+func callbackTest(msg *MessageExt) ConsumeStatus {
 	return ReConsumeLater
 }
 func TestPushConsumer_CreatePushConsumerSubscribe(t *testing.T) {
@@ -106,6 +108,6 @@
 	assert.NotNil(t, consumer)
 	err = consumer.Subscribe("Topic", "exp", nil)
 	assert.Equal(t, err, errors.New("consumeFunc is nil"))
-	err = consumer.Subscribe("Topic", "exp", callback_test)
+	err = consumer.Subscribe("Topic", "exp", callbackTest)
 	assert.Nil(t, err)
 }
