2015-03-04 26 views
6

Tôi hiện đang viết rất nhiều bài kiểm tra đơn vị cho gói của tôi chạy trên GAE Go. Gói được đề cập tập trung vào việc lưu trữ và tải dữ liệu đến và từ appengine/datastore. Như vậy, tôi có khoảng 20 file kiểm tra đơn vị đó nhìn một chút như thế này:Làm cách nào để tăng tốc các kiểm tra đơn vị Google App Engine Go?

package Data 

import (
    "appengine" 
    "appengine/aetest" 
    . "gopkg.in/check.v1" 
    "testing" 
) 

func TestUsers(t *testing.T) { TestingT(t) } 

type UsersSuite struct{} 

var _ = Suite(&UsersSuite{}) 

const UserID string = "UserID" 


func (s *UsersSuite) TestSaveLoad(cc *C) { 
    c, err := aetest.NewContext(nil) 
    cc.Assert(err, IsNil) 
    defer c.Close() 
    ... 

Kết quả là, mỗi tập tin thử nghiệm cá nhân dường như được bắt đầu từ phiên bản riêng của mình devappserver:

enter image description here

Lặp lại 20 lần này và thử nghiệm đơn vị của tôi chạy trong hơn 10 phút.

Tôi tự hỏi, làm cách nào để tăng tốc độ thực hiện bộ thử nghiệm của mình? Tôi có nên chỉ có một tệp tạo ra aetest.NewContext và chuyển nó trở đi hay là do tôi sử dụng các Suite riêng biệt cho mỗi bài kiểm tra đơn vị? Làm thế nào tôi có thể tăng tốc độ này lên?

+0

Bạn có thể sao chép một số nhật ký khác đặc biệt là các phần chiếm phần lớn thời gian không? Tôi không sử dụng GAE, vì vậy bạn nên thử tự mình gỡ lỗi này, nhưng có vẻ như là một số nơi có thời gian chờ đợi 15 giây chờ đợi trong https://code.google.com/p/appengine-go/source/browse/ appengine/aetest/instance.go # 156 –

+0

@EmilDavtyan Hầu hết các nhật ký trông giống như nhật ký được đính kèm. Nó chỉ là rất nhiều các bản ghi đó. Tôi đoán mỗi chức năng tạo ra bối cảnh cũng kêu gọi các bối cảnh được đóng lại, do đó có thể là những gì làm chậm nó xuống ... – ThePiachu

+0

Tại sao bạn có hiệu quả thử nghiệm một gói khác? – freeformz

Trả lời

4

Bạn có thể sử dụng một tùy chỉnh TestMain chức năng:

var ctx aetest.Context 

var c aetest.Context 

func TestMain(m *testing.M) { 
    var err error 
    ctx, err = aetest.NewContext(nil) 
    if err != nil { 
     panic(err) 
    } 
    code := m.Run() // this runs the tests 
    ctx.Close() 
    os.Exit(code) 
} 

func TestUsers(t *testing.T) { 
    // use ctx here 
} 

Bằng cách này, máy chủ dev đang bắt đầu một lần cho tất cả các bài kiểm tra. Thông tin chi tiết về TestMain có sẵn tại đây: http://golang.org/pkg/testing/#hdr-Main.

+0

Cảm ơn! Điều này làm tăng tốc độ kiểm tra của tôi lên khoảng một triệu phần trăm. –

Các vấn đề liên quan