autoscalable open api testing

30
Autoscalable open API testing Yevgeniia Tymoshchuk

Upload: evgeniya-tymoschuk

Post on 12-Apr-2017

300 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Autoscalable open API testing

Autoscalable open API testing

Yevgeniia Tymoshchuk

Page 2: Autoscalable open API testing

About me

Page 3: Autoscalable open API testing

About me

Page 4: Autoscalable open API testing

About me

https://www.linkedin.com/in/yevgeniia-tymoshchuk-72451a63

jtymoschuk

[email protected]

&

Page 5: Autoscalable open API testing

Open API - process that uses sets of

technologies that enable websites to

interact with each other by using REST,

SOAP, JavaScript and other web

technologies.

Subject

Page 6: Autoscalable open API testing

Problem

http://somesite.com/info

GET:

Page 7: Autoscalable open API testing

Problem

http://somesite.com/info - 4+

GET:

Page 8: Autoscalable open API testing

...?category=WEATHER - 9+

Problem

http://somesite.com/info - 4+

GET:

Page 9: Autoscalable open API testing

...?category=WEATHER&target=ADULTS - 29+

Problem

...?category=WEATHER - 9+

http://somesite.com/info - 4+

GET:

Page 10: Autoscalable open API testing

Approach

Page 11: Autoscalable open API testing

Approach

Java: TestNG -> data providers

Page 12: Autoscalable open API testing

Approach

Java: TestNG -> data providers

Java: JUnit -> @Parameterized

Page 13: Autoscalable open API testing

Approach

Java: TestNG -> data providers

Java: JUnit -> @Parameterized

Python: nose-parameterized

Page 14: Autoscalable open API testing

Approach

Java: TestNG -> data providers

Java: JUnit -> @Parameterized

Python: nose-parameterized

Scala: scalatest

Page 15: Autoscalable open API testing

Java: TestNG -> data providers

Approach

Java: JUnit -> @Parameterized

Python: nose-parameterized

Scala: scalatest

.Net: NUnit -> [Combinatorial]

Page 16: Autoscalable open API testing

@RunWith(Parameterized.class)public class InfoPositive { @Parameterized.Parameter public Target target;

@Parameterized.Parameter(1) public Category category;

@Parameterized.Parameters(name = "{0} {1}") public static List<Object[]> data() { return Arrays.asList(Target.values()).stream().map(target -> Arrays.asList(Category.values()).stream().map(category -> new Object[]{target, category}).collect(Collectors.toList())) .flatMap(Collection::stream).collect(Collectors.toList());

}

Approach

Page 17: Autoscalable open API testing

private static final String endpoint = "http://somesite.com/info";

@Test public void get() { given().param("target", target) .param("category", category) .expect().statusCode(Matchers.equalTo(200)) .when().get(endpoint); }

Approach

Page 18: Autoscalable open API testing

Run:[KIDS WEATHER][KIDS EDUCATION][KIDS RACING][ADULTS WEATHER][ADULTS EDUCATION][ADULTS RACING][DINOSAURUS WEATHER][DINOSAURUS EDUCATION][DINOSAURUS RACING]

Approach in action

Page 19: Autoscalable open API testing

Evolution

@Parameterized.Parameters

Page 20: Autoscalable open API testing

Evolution

@Parameterized.Parameters

@ConcurrentParametrized.Parameters

Page 21: Autoscalable open API testing

Evolution

@Parameterized.Parameters

@ConcurrentParametrized.Parameters

@ConcurrentParametrized.Parameters(threads = 4)

Page 22: Autoscalable open API testing

Evolution

@ConcurrentParametrizedDependent.Parameters(threads = 4)

@Parameterized.Parameters

@ConcurrentParametrized.Parameters

@ConcurrentParametrized.Parameters(threads = 4)

Page 23: Autoscalable open API testing

Evolution

Page 24: Autoscalable open API testing

@RunWith(SmokeRunner.class)public class SmokeSuite { @ConcurrentParametrized.Parameters(threads = 25) public static Collection dataProvider() { return Arrays.asList(new Object[][]{ {ConcurrentParametrizedDependentTest.class, data(10)}, {ConcurrentParametrizedDependentTest.class, all()}, {ConcurrentParametrizedDependentTest.class, method("test1")}, }); }}

Smoke

Page 25: Autoscalable open API testing

+/-

+● Flexible smoke suite● Automatically extendable regression● Human readable results● Happy team

-● Time● Test method for a specific data set (not

implemented)● Not clear data() method signature

Page 26: Autoscalable open API testing

Tools

● Allure report

● Rest-assured

● Junit

● TeamCity

● Java 8 with lambdas

Page 27: Autoscalable open API testing

Tools

● Allure report

● Rest-assured

● Junit

● TeamCity

● Java 8 with lambdas

Page 28: Autoscalable open API testing
Page 29: Autoscalable open API testing

Thank you

Page 30: Autoscalable open API testing

Q&A