package ${package}.user.scenario.example;
import com.griddynamics.jagger.invoker.scenario.JHttpScenarioGlobalContext;
import com.griddynamics.jagger.invoker.scenario.JHttpUserScenario;
import com.griddynamics.jagger.invoker.scenario.JHttpUserScenarioStep;
import com.griddynamics.jagger.invoker.v2.JHttpEndpoint;
import com.griddynamics.jagger.invoker.v2.JHttpQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// begin: following section is used for docu generation - User scenario provider
/**
* Example of user scenario provider
* User scenario - sequence of the test steps executed by virtual user. (E.g. sequence of http requests for singned-in user)
*/
public class UserScenarioEndpointsProvider implements Iterable {
public static final String SCENARIO_ID = "my-user-scenario";
public static final String STEP_1_ID = "step321";
public static final String STEP_2_ID = "step2";
public static final String STEP_3_ID = "step3";
private static Logger log = LoggerFactory.getLogger(UserScenarioEndpointsProvider.class);
private List<JHttpUserScenario> userScenarios = new ArrayList<>();
public UserScenarioEndpointsProvider() {
// First scenario example
JHttpUserScenario userScenario = new JHttpUserScenario(SCENARIO_ID, "My User Scenario");
userScenario
.withScenarioGlobalContext(new JHttpScenarioGlobalContext()
.withGlobalEndpoint(new JHttpEndpoint("https://httpbin.org/")))
.addStep(JHttpUserScenarioStep.builder(STEP_1_ID)
.withDisplayName("Step #321")
.withWaitAfterExecutionInSeconds(3)
.build())
.addStep(JHttpUserScenarioStep.builder(STEP_2_ID)
.withDisplayName("Step #2")
.withWaitAfterExecutionInSeconds(3)
.withQuery(new JHttpQuery().get().path("/get"))
// global context can be changed before or after step execution.
// E.g. we can add headers to all following requests in this scenario
.withPreProcessGlobalContextFunction((prevStep, context) -> {
context.withGlobalHeaders(prevStep.getResponse().getHeaders());
})
// you can decide if step was successful or not
.withPostProcessFunction(response -> {
if (response.getStatus().is2xxSuccessful()) {
log.info("Step 2 is successful!");
return true;
}
return false;
})
.build())
.addStep(JHttpUserScenarioStep.builder(STEP_3_ID)
.withDisplayName("Step #3")
.withWaitAfterExecutionInSeconds(3)
.withQuery(new JHttpQuery().get().path("/response-headers?key=val"))
// You can modify this step, based of the results of the previous one
// Here we are setting endpoint and query values
.withPreProcessFunction((prevStep, currentStep) -> {
currentStep.setEndpoint(new JHttpEndpoint("http://www.scala-lang.org"));
currentStep.setQuery(new JHttpQuery().get().path("/"));
})
.build());
// Scenario example with basic authentication
JHttpUserScenario userScenarioBasicAuthAuto = new JHttpUserScenario("my-user-scenario-basic-auth",
"Basic Auth User Scenario");
userScenarioBasicAuthAuto
// All requests in this scenario will use following basic authentication
.withScenarioGlobalContext(new JHttpScenarioGlobalContext()
.withGlobalEndpoint(new JHttpEndpoint("https://httpbin.org/"))
.withBasicAuth("userName", "userPassword")
)
.addStep(JHttpUserScenarioStep.builder("basic_auto_1")
.withQuery(new JHttpQuery().get().path("/basic-auth/userName/userPassword"))
.withDisplayName("Auth pass")
.withWaitAfterExecutionInSeconds(3)
.build())
.addStep(JHttpUserScenarioStep.builder("basic_auto_2")
.withQuery(new JHttpQuery().get().path("/basic-auth/userName/userPassword"))
.withDisplayName("Auth pass (validation)")
.withWaitAfterExecutionInSeconds(3)
.withPostProcessFunction(response -> {
if (response.getStatus().value() != 200) {
log.error("Unexpected status returned. Expected: 200. Returned: {}", response.getStatus().value());
return false;
}
return true;
})
.build())
.addStep(JHttpUserScenarioStep.builder("basic_auto_3")
.withQuery(new JHttpQuery().get().path("/basic-auth/userName/userPassword"))
.withDisplayName("Auth fail (validation)")
.withWaitAfterExecutionInSeconds(3)
.withPreProcessFunction((prevStep, currentStep) -> {
// Reset all headers => auth will fail
currentStep.getQuery().headers(null);
})
.withPostProcessFunction(response -> {
if (response.getStatus().value() != 401) {
log.error("Unexpected status returned. Expected: 401. Returned: {}", response.getStatus().value());
return false;
}
return true;
})
.build());
userScenarios.add(userScenario);
userScenarios.add(userScenarioBasicAuthAuto);
}
@Override
public Iterator<JHttpUserScenario> iterator() {
return userScenarios.iterator();
}
}
// end: following section is used for docu generation - User scenario provider