Autoscalable open API testing
-
Upload
evgeniya-tymoschuk -
Category
Engineering
-
view
292 -
download
0
Transcript of Autoscalable open API testing
Autoscalable open API testing
Yevgeniia Tymoshchuk
About me
About me
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
...?category=WEATHER - 9+
Problem
http://somesite.com/info - 4+
GET:
...?category=WEATHER&target=ADULTS - 29+
Problem
...?category=WEATHER - 9+
http://somesite.com/info - 4+
GET:
Approach
Approach
Java: TestNG -> data providers
Approach
Java: TestNG -> data providers
Java: JUnit -> @Parameterized
Approach
Java: TestNG -> data providers
Java: JUnit -> @Parameterized
Python: nose-parameterized
Approach
Java: TestNG -> data providers
Java: JUnit -> @Parameterized
Python: nose-parameterized
Scala: scalatest
Java: TestNG -> data providers
Approach
Java: JUnit -> @Parameterized
Python: nose-parameterized
Scala: scalatest
.Net: NUnit -> [Combinatorial]
@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
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
Run:[KIDS WEATHER][KIDS EDUCATION][KIDS RACING][ADULTS WEATHER][ADULTS EDUCATION][ADULTS RACING][DINOSAURUS WEATHER][DINOSAURUS EDUCATION][DINOSAURUS RACING]
Approach in action
Evolution
@Parameterized.Parameters
Evolution
@Parameterized.Parameters
@ConcurrentParametrized.Parameters
Evolution
@Parameterized.Parameters
@ConcurrentParametrized.Parameters
@ConcurrentParametrized.Parameters(threads = 4)
Evolution
@ConcurrentParametrizedDependent.Parameters(threads = 4)
@Parameterized.Parameters
@ConcurrentParametrized.Parameters
@ConcurrentParametrized.Parameters(threads = 4)
Evolution
@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
+/-
+● 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
Tools
● Allure report
● Rest-assured
● Junit
● TeamCity
● Java 8 with lambdas
Tools
● Allure report
● Rest-assured
● Junit
● TeamCity
● Java 8 with lambdas
Thank you
Q&A