amsterdam selenium meetup - continuous integration with selenium at marktplaats.nl by ivan shubin
TRANSCRIPT
CONTINUOUS INTEGRATION WITH SELENIUM
AT MARKTPLAATS.NL
CONTENT
PROCESS OVERVIEW
GRID
FRAMEWORK
SMOKE TESTS
LAYOUT TESTING
JENKINS & PIPELINE
BUILD STATISTICS
SELENIUM TESTS
BUILDS A DAY
TOTAL RUNS PER DAY
DEMO DEPLOYS PER WEEK
2.000 24
48.000 11
Se
KANBAN PIPELINE
STORY TEST CASES
PM QA
READY FOR DEV QA
PD
DEMO DEPLOY
L&P DEPLOY
PROD DEPLOY
GRID
CONTINUOUS INTEGRATION WITH SELENIUM
GRID OVERVIEW
GRID
3 7
GRID MAINTENANCE
BUILDER SSH
./all.sh uptime [email protected] 10:55:25 up 39 days, 20:32, 0 users, load average: 0.27, 0.44, 0.76 [email protected] 10:54:53 up 39 days, 20:20, 2 users, load average: 0.21, 0.32, 0.69 [email protected] 10:54:37 up 39 days, 20:21, 0 users, load average: 0.17, 0.22, 0.43 [email protected] 10:56:42 up 39 days, 20:19, 0 users, load average: 0.01, 0.20, 0.58
TEST FRAMEWORK CONTINUOUS INTEGRATION WITH SELENIUM
FRAMEWORK ABSTRACTION
TEST FLOW PAGE DRIVER
FRAMEWORK FLOW
adUrn = new SyiFlow(driver)! .selectL1Category(“Boeken”)! .selectBucket(“Overige”)! .selectL2Category(“E-books”)! .typeTitle(“test ad title”)! .typeDescription("test ad description”)! .typePrice("12,00")! .uploadImage(1, new File(“test-image.jpg”))! .typePostcode(“1097DN”)! .submitAndNavigateToRyiPage()! .getAdvertisementUrn();!
FRAMEWORK PAGE MODELS
public class LoginPage extends MarktplaatsPage<LoginPage> {! public static final String LOGIN_URL = URLS.login();! private static final By USERNAME_FIELD_LOCATOR = By.xpath("//input[@name='j_username']");! private static final By PASSWORD_FIELD_LOCATOR = By.xpath("//input[@name='j_password']");! private static final By LOGIN_BUTTON_LOCATOR = By.id("account-login-button");! ! public LoginPage(WebDriver driver) {! super(driver);! }!! @Override! public LoginPage load() {! getDriver().get(LOGIN_URL);! return this;! }!! @Override! public boolean isAvailable() {! return getEmailField().isAvailable() && getPasswordField().isAvailable();! }!! !
FRAMEWORK PAGE MODELS
public void login(String username, String passwordText) {! loadAndWaitUntilAvailable();! getEmailField().inputText(username);! getPasswordField().inputText(passwordText);! loginButton().submit();! }!! public TextInput getEmailField() {! return new TextInput(getDriver(), USERNAME_FIELD_LOCATOR);! }!! public TextInput getPasswordField() {! return new TextInput(getDriver(), PASSWORD_FIELD_LOCATOR);! }! ! public WebElement loginButton() {! return getDriver().findElement(LOGIN_BUTTON_LOCATOR);! }!}!!
FRAMEWORK TEST STRATEGY
COMPONENT FLOW
POSITIVE
NEGATIVE
FIELDS
MESSAGES
XSS
SMOKE TESTS CONTINUOUS INTEGRATION WITH SELENIUM
SMOKE TESTS APPROACH
SINGLE PLATFORM
PLATFORMS INTEGRATION
SMOKE TESTS OVERVIEW
PLAT
INT
ENV
PROD
DEMO
GRID
REPORT
SMOKE TESTS REPORT EXAMPLE
LAYOUT TESTING CONTINUOUS INTEGRATION WITH SELENIUM
LAYOUT TESTING BROWSER COMPATIBILITY
GRID
PAGES BROWSERS
REPORT
LAYOUT TESTING REPORT EXAMPLE
LAYOUT TESTING REPORT EXAMPLE
JENKINS & PIPELINE CONTINUOUS INTEGRATION WITH SELENIUM
JENKINS & PIPELINE TEST JOBS
GRID MAIN
GRID PARALLEL
NO GRID
TEST ARE GREEN TRIGGER
DEMO DEPLOY
OTHER TESTS
JENKINS & PIPELINE JOBS MONITOR
JENKINS & PIPELINE REPORTING
JENKINS & PIPELINE REPORTING
PIPELINE APP
SELENIUM TEST
` DATABASE
REST
JENKINS & PIPELINE DASHBOARD
CI & SELENIUM SUMMARY
PAST PRESENT
SELENIUM FEEDBACK
FAILURE FEEDBACK
BROWSER SUPPORT
30 – 50 MIN
30 – 50 MIN
14 - 18 MIN
RIGHT AWAY
AMOUNT OF JOBS 11 3
ANY QUESTIONS ? CONTINUOUS INTEGRATION WITH SELENIUM