1
Wix Automation
Itay Shmool & Roi Ashkenazi
DIY -Testing BI Events
2
Introduction & key factors
• Automation developers can change the tested application itself for
the automation needs
• Programming language is not a barrier (JS in our example) -
knowledge and deep understating of the tested application code
• Don’t wait for developers to do it for you – DIY
3
BI Events Testing
• BI – Business Intelligence
• Monitoring behavior of applications
• Statistical analysis
4
How to verify? The Wrong Way
• Manually with Charles?
• Automatically Monitor network traffic and
analyze it on the fly?
• Query the server to check if event was sent as
expected?
5
How to verify? The Right Way
• Change the tested application (Wix Editor) code and “implement” bi
event method for automation needs
• Provide clear descriptive java framework to verify bi events (based
on the js implementation)
• Create events scheme automatically (not hard coded) – offline
process
6
How to verify?
if (isInTestingMode()) {
editor.biEventHandler = onBiEvent;
}
• Override client’s JS method responsible for sending BI events
7
How to verify?
function onBiEvent(e) {
window.bi.add(e);
}
• Override client’s JS method responsible for sending BI events
8
How to verify?
• Override client’s JS method responsible for sending BI events
• Helper class: bi.js
...
return {
getAll: getAll,
getById: getById,
getSize: getSize,
add: add,
clear: clear
};
9
How to verify?
• Java Framework
• Helper class: BiEvents.java
• Implementation: execute script (window.bi)
interface BiEvents {
List<BiEvent> getAll();
Optional<BiEvent> getEventById(int id);
int getSize();
void clear();
}
10
How to verify?
• Java Framework
• Helper class: BiVerifier.java
BiVerifier eventWasSent(int eventId) {
// Verify: biEvents.getEventById(eventId).isPresent()
...
}
11
How to verify?
• Java Framework
• We want:
@ExpectBiEvent(id = {17, 5000})
@Test
public void testSomething() {
…
}
12
How to verify?
• Java Framework
• New annotation: ExpectBiEvent
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface ExpectBiEvent {
int[] eventIds();
}
13
How to verify?
• Java Framework
• We need to verify events were sent – at the end of the test
14
How to verify?
• Java Framework
• Reminder -Test Observer
interface TestObserver {
…
default void ending() { }
…
}
15
How to verify?
• Java Framework
• Helper class: BiEventObserver.java
private Optional<T extends Annotation> getAnnotation(Class<T> type)
@Override
public void ending() {
getAnnotation(ExpectBiEvent.class)
.map(ExpectBiEvent::eventIds)
.map(Ints::asList)
.ifPresent(ids -> ids.forEach(biVerifier::eventWasSent));
}
16
How to verify?
• Event Scheme Creation
• Generate event schemes automatically
• Save generated schemes as resource files
• Validate as part of the verification process
17
How to verify?
• Java Framework
• Helper class: BiVerifier.java
BiVerifier eventWasSent(int eventId) {
Optional<BiEvent> biEvent = biEvents.getEventById(eventId);
// Verify: biEvent.isPresent()
biEvent.ifPresent(this::schemeIsValid);
…
}
18
How to verify?
• Java Framework
• Helper class: BiVerifier.java
BiVerifier schemeIsValid(BiEvent biEvent) {
// expectedScheme = loadBiEventScheme(biEvent.id());
// actualScheme = biEvent.scheme();
// Verify: actual vs expected
…
}
19
Thank you!
Questions?

Wix Automation - DIY - Testing BI Events

  • 1.
    1 Wix Automation Itay Shmool& Roi Ashkenazi DIY -Testing BI Events
  • 2.
    2 Introduction & keyfactors • Automation developers can change the tested application itself for the automation needs • Programming language is not a barrier (JS in our example) - knowledge and deep understating of the tested application code • Don’t wait for developers to do it for you – DIY
  • 3.
    3 BI Events Testing •BI – Business Intelligence • Monitoring behavior of applications • Statistical analysis
  • 4.
    4 How to verify?The Wrong Way • Manually with Charles? • Automatically Monitor network traffic and analyze it on the fly? • Query the server to check if event was sent as expected?
  • 5.
    5 How to verify?The Right Way • Change the tested application (Wix Editor) code and “implement” bi event method for automation needs • Provide clear descriptive java framework to verify bi events (based on the js implementation) • Create events scheme automatically (not hard coded) – offline process
  • 6.
    6 How to verify? if(isInTestingMode()) { editor.biEventHandler = onBiEvent; } • Override client’s JS method responsible for sending BI events
  • 7.
    7 How to verify? functiononBiEvent(e) { window.bi.add(e); } • Override client’s JS method responsible for sending BI events
  • 8.
    8 How to verify? •Override client’s JS method responsible for sending BI events • Helper class: bi.js ... return { getAll: getAll, getById: getById, getSize: getSize, add: add, clear: clear };
  • 9.
    9 How to verify? •Java Framework • Helper class: BiEvents.java • Implementation: execute script (window.bi) interface BiEvents { List<BiEvent> getAll(); Optional<BiEvent> getEventById(int id); int getSize(); void clear(); }
  • 10.
    10 How to verify? •Java Framework • Helper class: BiVerifier.java BiVerifier eventWasSent(int eventId) { // Verify: biEvents.getEventById(eventId).isPresent() ... }
  • 11.
    11 How to verify? •Java Framework • We want: @ExpectBiEvent(id = {17, 5000}) @Test public void testSomething() { … }
  • 12.
    12 How to verify? •Java Framework • New annotation: ExpectBiEvent @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface ExpectBiEvent { int[] eventIds(); }
  • 13.
    13 How to verify? •Java Framework • We need to verify events were sent – at the end of the test
  • 14.
    14 How to verify? •Java Framework • Reminder -Test Observer interface TestObserver { … default void ending() { } … }
  • 15.
    15 How to verify? •Java Framework • Helper class: BiEventObserver.java private Optional<T extends Annotation> getAnnotation(Class<T> type) @Override public void ending() { getAnnotation(ExpectBiEvent.class) .map(ExpectBiEvent::eventIds) .map(Ints::asList) .ifPresent(ids -> ids.forEach(biVerifier::eventWasSent)); }
  • 16.
    16 How to verify? •Event Scheme Creation • Generate event schemes automatically • Save generated schemes as resource files • Validate as part of the verification process
  • 17.
    17 How to verify? •Java Framework • Helper class: BiVerifier.java BiVerifier eventWasSent(int eventId) { Optional<BiEvent> biEvent = biEvents.getEventById(eventId); // Verify: biEvent.isPresent() biEvent.ifPresent(this::schemeIsValid); … }
  • 18.
    18 How to verify? •Java Framework • Helper class: BiVerifier.java BiVerifier schemeIsValid(BiEvent biEvent) { // expectedScheme = loadBiEventScheme(biEvent.id()); // actualScheme = biEvent.scheme(); // Verify: actual vs expected … }
  • 19.