[英]Cannot change consistency using “goapp test”
Google的AppEngine服務提供了一個最終一致的數據庫,用於存儲生產中的應用程序數據。 為了進行測試,Google提供了一個類似的數據庫,可以模擬生產數據庫的一致性特征。 測試要求可能會有所不同,因此Google會向其測試服務器dev_appserver.py
提供命令行參數,以便根據測試需要修改一致性特征。
我正在使用goapp
工具來運行我的AppEngine開發的自動化測試環境。 goapp test
負責運行我們的自動服務器API測試。 與dev_appserver.py
不同, goapp test
似乎沒有辦法通過命令行參數設置數據存儲的一致性級別,即使goapp test
在測試過程中的某個時刻啟動了dev_appserver.py
。
有沒有辦法從goapp test
將命令行參數傳遞給dev_appserver.py
? 如果沒有,是否有另一種方法可以從命令行設置一致性?
我認為你正在使用aetest包 。 如果是這種情況,則應相應地設置aetest.Options
結構的StronglyConsistentDatastore成員 。
這是一個例子:
hello.go
package hello
import (
"fmt"
"net/http"
"time"
"appengine"
datastore "appengine/datastore"
)
type Employee struct {
FirstName string
LastName string
HireDate time.Time
}
func init() {
http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request) {
ctx := appengine.NewContext(r)
q := datastore.NewQuery("Employee").Filter("FirstName =", "Antonio")
var people []Employee
if _, err := q.GetAll(ctx, &people); err != nil {
fmt.Fprintf(w, "Error %v", err)
}
fmt.Fprintf(w, "Matches %v", len(people))
}
hello_test.go
package hello
import (
"time"
"testing"
"net/http/httptest"
"appengine"
"appengine/aetest"
datastore "appengine/datastore"
)
const consistency_strong = true; // set to false and the test will fail
func TestMyHandler(t *testing.T) {
options := &aetest.Options{StronglyConsistentDatastore: consistency_strong}
inst, err := aetest.NewInstance(options)
if err != nil {
t.Fatalf("Failed to create instance: %v", err)
}
defer inst.Close()
req, err := inst.NewRequest("GET", "/", nil)
if err != nil {
t.Fatalf("Failed to create req1: %v", err)
}
ctx := appengine.NewContext(req)
employee := &Employee{
FirstName: "Antonio",
LastName: "Salieri",
HireDate: time.Now(),
}
key := datastore.NewIncompleteKey(ctx, "Employee", nil)
_, err = datastore.Put(ctx, key, employee)
if err != nil {
t.Fatalf("Error setting test data: %v", err)
}
w := httptest.NewRecorder()
handler(w, req)
if w.Body.String() != "Matches 1" {
t.Fatalf("Expected 1 record got %v", w.Body)
}
}
正如您所提到的,go工具只包裝dev_appserver.py。 這意味着如果您不使用aetest
您可以隨時使用所選的一致性策略運行您的應用程序,如下所示:
/usr/local/go_appengine/dev_appserver.py --datastore_consistency_policy consistent .
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.