Пример #1
0
// define testcases using teststeps
func tc1(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	c := req.NewDefaultClient()
	form := url.Values{}
	form.Add("username", "gogrinder")

	b := gg.NewBracket("01_01_login")
	{
		r, err := http.NewRequest("POST", "http://localhost:3001/login",
			strings.NewReader(form.Encode()))
		r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
		if err != nil {
			m.Error += err.Error()
			mm = &req.HttpMetric{*m, 0, 0, 400}
		}
		_, _, mm = req.DoRaw(c, r, m)
	}
	b.End(mm)

	b = gg.NewBracket("01_02_get")
	{
		r, err := http.NewRequest("GET", "http://localhost:3001/get_private", nil)
		if err != nil {
			m.Error += err.Error()
			mm = &req.HttpMetric{*m, 0, 0, 400}
		}
		_, _, mm = req.DoRaw(c, r, m)
	}
	b.End(mm)
}
Пример #2
0
func supercars_03_create(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	var resp map[string]interface{}
	c := req.NewDefaultClient()
	base := s["supercars_url"].(string)
	newCar := map[string]interface{}{"name": "Ferrari Enzo", "country": "Italy",
		"top_speed": "218", "0-60": "3.4", "power": "650", "engine": "5998",
		"weight": "1365", "description": "The Enzo Ferrari is a 12 cylinder " +
			"mid-engine berlinetta named after the company's founder, Enzo Ferrari.",
		"image": "050.png"}
	b := gg.NewBracket("03_01_supercars_create")
	r, err := req.NewPostJsonRequest(base+"/rest/supercars/", newCar)
	if err != nil {
		m.Error += err.Error()
		mm = &req.HttpMetric{*m, 0, 0, 400}
	} else {
		resp, _, mm = req.DoJson(c, r, m)
		id := resp["_id"].(string)
		if i, err := strconv.Atoi(id); err != nil || i <= RECORDS {
			m.Error += "Error: something went wrong during new record creation!"
		} else {
			redis, err := goredis.Dial(
				&goredis.DialConfig{Address: s["redis_srv"].(string)})
			if err != nil {
				// is the redis server running? correct address?
				m.Error += err.Error()
			} else {
				redis.SAdd("supercars", id) // no way this can go wrong!
			}
		}
	}
	b.End(mm)
}
Пример #3
0
func supercars_05_delete(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	c := req.NewDefaultClient()
	base := s["supercars_url"].(string)

	b := gg.NewBracket("05_01_supercars_delete")
	redis, err := goredis.Dial(&goredis.DialConfig{Address: s["redis_srv"].(string)})
	if err != nil {
		// is the redis server running? correct address?
		m.Error += err.Error()
		return
	}

	id, err := redis.SPop("supercars")
	if err != nil {
		// probably run out of data - so it does not make sense to continue
		m.Error += err.Error()
		return
	}
	r, err := http.NewRequest("DELETE", base+"/rest/supercars/"+string(id), nil)
	if err != nil {
		m.Error += err.Error()
		mm = &req.HttpMetric{*m, 0, 0, 400}
	} else {
		_, _, mm = req.DoRaw(c, r, m)
	}
	b.End(mm)
}
Пример #4
0
func main() {
	// note: this test script is structured differently so the testcase can have
	// access to the main scope
	rec := []<-chan string{
		util.XmlReader("bang_0.xml", "record"), util.XmlReader("bang_1.xml", "record")}

	// initialize the GoGrinder
	gg := gogrinder.NewTest()

	// define testcases using teststeps
	xmlcowboys_01_post := func(m *gogrinder.Meta, s gogrinder.Settings) {
		var mm *req.HttpMetric
		c := req.NewDefaultClient()
		r := rec[m.User]
		str := <-r
		//fmt.Println(str)
		base := s["server_url"].(string)
		b := gg.NewBracket("01_01_xmlcowboys_post")
		{
			r, err := http.NewRequest("POST", base+"/post_stuff",
				strings.NewReader(str))
			if err != nil {
				m.Error += err.Error()
				mm = &req.HttpMetric{*m, 0, 0, 400}
			}
			_, _, mm = req.DoRaw(c, r, m)
		}
		b.End(mm)

	}

	// this is my endurance test scenario
	endurance := func() {
		// use the tests with the loadmodel config (json file)
		gg.Schedule("xmlcowboys_01_post", xmlcowboys_01_post)
	}

	// this is my baseline test scenario
	baseline := func() {
		// use the tests with a explicit configuration
		gg.DoIterations(xmlcowboys_01_post, 5, 0, false)
	}

	// register the scenarios defined above
	gg.Testscenario("endurance", endurance)
	gg.Testscenario("baseline", baseline)
	// register the testcases as scenarios to allow single execution mode
	gg.Testscenario("xmlcowboys_01_post", xmlcowboys_01_post)

	gg.AddReportPlugin(req.NewHttpMetricReporter())
	err := gogrinder.GoGrinder(gg)
	if err != nil {
		fmt.Println(err.Error())
		os.Exit(1)
	}
}
Пример #5
0
// define testcases using teststeps
func tc1(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	c := req.NewDefaultClient()

	b := gg.NewBracket("01_01_teststep")
	{
		r, err := http.NewRequest("GET", "http://localhost:3001/get_stuff", nil)
		if err != nil {
			m.Error += err.Error()
			mm = &req.HttpMetric{*m, 0, 0, 400}
		}
		_, _, mm = req.DoRaw(c, r, m)
	}
	b.End(mm)
}
Пример #6
0
func tc2(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	c := req.NewDefaultClient()

	b := gg.NewBracket("02_01_post")
	{
		r, err := http.NewRequest("POST", "http://localhost:3001/post_stuff",
			util.NewRandReader(2000))
		if err != nil {
			m.Error += err.Error()
			mm = &req.HttpMetric{*m, 0, 0, 400}
		}
		_, _, mm = req.DoRaw(c, r, m)
	}
	b.End(mm)
}
Пример #7
0
func supercars_02_read(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	var resp map[string]interface{}
	c := req.NewDefaultClient()
	b := gg.NewBracket("02_01_supercars_read")
	id := rand.Intn(RECORDS-1) + 1
	url := fmt.Sprintf("%s/rest/supercars/%05d", s["supercars_url"].(string), id)
	r, err := http.NewRequest("GET", url, nil)
	if err != nil {
		m.Error += err.Error()
		mm = &req.HttpMetric{*m, 0, 0, 400}
	} else {
		resp, _, mm = req.DoJson(c, r, m)
		// assert record id
		i, err := strconv.Atoi(resp["_id"].(string))
		if err != nil || i != id {
			m.Error += "Error: retrived wrong record!"
		}
	}
	b.End(mm)
}
Пример #8
0
// define testcases using teststeps
func supercars_01_list(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	var resp map[string]interface{}
	c := req.NewDefaultClient()
	base := s["supercars_url"].(string)
	b := gg.NewBracket("01_01_supercars_list")
	r, err := http.NewRequest("GET", base+"/rest/supercars/", nil)
	if err != nil {
		m.Error += err.Error()
		mm = &req.HttpMetric{*m, 0, 0, 400}
	} else {
		resp, _, mm = req.DoJson(c, r, m)

		// assert record count
		count := len(resp["data"].([]interface{}))
		if count < RECORDS {
			mm.Error += "Error: less then 30 records in list response!"
		}
	}
	b.End(mm)
}
Пример #9
0
func supercars_04_update(m *gogrinder.Meta, s gogrinder.Settings) {
	var mm *req.HttpMetric
	//var resp map[string]interface{}
	c := req.NewDefaultClient()
	base := s["supercars_url"].(string)
	change := map[string]interface{}{"cylinders": "12", "name": "Ferrari Enzo",
		"country": "Italy", "top_speed": "218", "0-60": "3.4", "power": "650",
		"engine": "5998", "weight": "1365", "description": "The Enzo Ferrari " +
			"is a 12 cylinder mid-engine berlinetta named after the company's " +
			"founder, Enzo Ferrari.", "image": "050.png"}
	b := gg.NewBracket("04_01_supercars_update")
	redis, err := goredis.Dial(&goredis.DialConfig{Address: s["redis_srv"].(string)})
	if err != nil {
		// is the redis server running? correct address?
		m.Error += err.Error()
		mm = &req.HttpMetric{*m, 0, 0, 400}
	} else {
		id, err := redis.SPop("supercars")
		if err != nil {
			// probably run out of data - so it does not make sense to continue
			m.Error += err.Error()
			mm = &req.HttpMetric{*m, 0, 0, 400}
		} else {
			r, err := req.NewPutJsonRequest(base+"/rest/supercars/"+string(id),
				change)
			if err != nil {
				m.Error += err.Error()
				mm = &req.HttpMetric{*m, 0, 0, 400}
			} else {
				_, _, mm = req.DoJson(c, r, m)
				//tsUpdate(m, c, base + "/rest/supercars/" + string(id), change)

				// add the record back!
				redis.SAdd("supercars", string(id)) // no way this can go wrong!
			}
		}
	}
	b.End(mm)
}