View
262
Download
3
Category
Preview:
Citation preview
WITH GOSMOKE TESTING
GO
GO WAS CONCEIVED WHILE WAITING FOR C++ TO COMPILE
it is said that
“BORN OUT OF FRUSTRATION WITH EXISTING LANGUAGES AND
ENVIRONMENTS FOR SYSTEMS PROGRAMMING”
2007
OPEN-SOURCED BY GOOGLE 2009
COMPILED
STATICALLY-TYPED SOMETIMES THE TYPE IS INFERRED FROM THE CONTEXT
FOCUS ON READABILITY AND PERFORMANCE
DESIGNED FOR GOOGLE-SCALE CODEBASES
GARBAGE-COLLECTED
NATIVE CONCURRENCY SUPPORT COROUTINES, CHANNELS
SYNTAX ENFORCES READABILITY NO TERNARY OPERATOR
VAR++ DOES NOT RETURN VALUE
SMART DEPENDENCY LINKING FAST COMPILATION
WHAT DOES IT LOOK LIKE?
GAINING POPULARITY:
TESTING FRAMEWORKS
GINGKO TEST STRUCTURE
▸ Describe()
▸ Context()
▸ It()
▸ By()
▸ Describe()
▸ …
THE USUAL
▸ BeforeSuite()
▸ BeforeEach()
▸ AfterEach()
▸ AfterSuite()
FOCUSED SPECS
▸ FDescribe()
▸ FContext()
▸ FIt()
RUNNING TEST SUITE
go test
MAKING ASSERTIONS
‣ Expect(ACTUAL).To(Equal(EXPECTED))
‣ Expect(ACTUAL).NotTo(Equal(EXPECTED))
‣ Expect(ACTUAL).ToNot(Equal(EXPECTED))
ASSERTING EQUIVALENCE
‣ Equal(...)
‣ BeEquivalentTo(...)
‣ BeAssignableToTypeOf(...)
ASSERTING PRESENCE
‣ BeNil()
‣ BeZero()
ASSERTING TRUTHINESS
‣ BeTrue()
‣ BeFalse()
ASSERTING ON ERRORS
‣ HaveOccurred()
‣ Succeed()
‣ MatchError(...)
MAKING ASYNCHRONOUS ASSERTIONS
▸ Eventually()
▸ Consistently()
EVENTUALLY
Eventually(func() []int {
return thing.SliceImMonitoring
}, TIMEOUT, POLLING_INTERVAL).Should(HaveLen(2))
CONSISTENTLY
Consistently(func() []int {
return thing.MemoryUsage()
}).Should(BeNumerically("<", 10))
PROCESS
‣ Connect to the web driver
‣ Create page object
‣ Find / select elements on the page to interact with
‣ Interact (click, fill in text, submit form, …)
‣ Make assertions about the expected result
‣ Destroy page object
CONNECTING TO THE WEB DRIVER
var err error
capabilities := agouti.NewCapabilities().Browser("firefox").Platform("linux").With("javascriptEnabled")
page, err = agouti.NewPage("http://selenium:4444/wd/hub", agouti.Desired(capabilities))
Expect(err).NotTo(HaveOccurred())
page.Size(1360, 768)
FINDING ELEMENTS
‣ page.First(“#project-toggle")
‣ page.FindByLabel(“Password")
MORE FINDERS
‣ FindByButton(text string) *Selection
‣ FindByLabel(text string) *Selection
‣ FindByLink(text string) *Selection
‣ FindByName(name string) *Selection
‣ FindByXPath(selector string) *Selection
‣ and many more…
THINGS TO DO WITH THE PAGE‣ GetCookies() ([]*http.Cookie, error)
‣ Navigate(url string) error
‣ RunScript(body string, arguments map[string]interface{}, result interface{}) error
‣ Screenshot(filename string) error
‣ SetCookie(cookie *http.Cookie) error
‣ Size(width, height int) error
‣ and so on…
THINGS TO DO WITH THE SELECTION
‣ Check() error
‣ Click() error
‣ Fill(text string) error
‣ Submit() error
‣ UploadFile(filename string) error
‣ FlickFinger(xOffset, yOffset int, speed uint) error
‣ and so on…
OUR SETUP
DOCKER COMPOSE
SELENIUM
HEADLESS FIREFOX
GO RUNTIME
LIBRARIES
TEST SUITE
CAMATO
ENVIRONMENT VARIABLES
‣ ENV: {staging, review, integration, www}
‣ which server to test against
‣ SCREENSHOT: {yes, no}
‣ whether or not to record screenshots
IN DOCKER-COMPOSE.YML
kitten:
<<: *smoketests
command: go test -test.timeout 15m -ginkgo.progress -ginkgo.v -ginkgo.focus Kitten
campaign_management:
<<: *smoketests
command: go test -test.timeout 15m -ginkgo.progress -ginkgo.v -ginkgo.focus Campaign
FROM THE COMMAND LINE
docker-compose run -e ENV=staging -e SCREENSHOT=yes all
docker-compose run -e ENV=staging -e SCREENSHOT=yes kitten
docker-compose run -e ENV=staging -e SCREENSHOT=yes campaign_management
DEMO
THANKS!
Recommended