Skip to content

Commit 29e2c12

Browse files
authoredMar 13, 2025
Merge branch 'openmrs:main' into O3-4527
2 parents fb8c019 + d324b8b commit 29e2c12

File tree

7 files changed

+71
-13
lines changed

7 files changed

+71
-13
lines changed
 

‎README.md

+9-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
This repository contains performance testing scripts and configurations for OpenMRS using Gatling.
44

55
The latest report can be found
6-
at [openmrs.github.io/openmrs-contrib-performance-test](https://openmrs.github.io/openmrs-contrib-performance-test/)
6+
at [here](https://o3-performance.openmrs.org/)
77

88
## Table of Contents
99

@@ -31,13 +31,15 @@ and easy-to-use framework for simulating user load and measuring system performa
3131

3232
To run the performance tests locally, follow these steps:
3333

34-
1. Start OpenMRS on port 80. (Use the docker file: [src/test/resources/docker-compose.yml](src/test/resources/docker-compose.yml) It contains demo patients for the test. [Learn more](#generating-demo-patient-data))
35-
36-
For using the docker file, run the following command:
37-
```bash
34+
1. Install dependencies (and compile)
35+
```bash
36+
./mvnw install -DskipTests
37+
```
38+
2. Start OpenMRS on port 80. (Use the docker file: [src/test/resources/docker-compose.yml](src/test/resources/docker-compose.yml) It contains demo patients for the test. [Learn more](#generating-demo-patient-data))
39+
```bash
3840
docker compose -f src/test/resources/docker-compose.yml up
39-
```
40-
2. Execute the following command in your terminal:
41+
```
42+
3. Execute the following command in your terminal:
4143

4244
**Standard** `export SIMULATION_PRESET='standard' && ./mvnw gatling:test` \
4345
**dev** `export SIMULATION_PRESET=dev TIER_COUNT=2 TIER_DURATION_MINUTES=1 USER_INCREMENT_PER_TIER=10 && ./mvnw gatling:test`

‎pom.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1212
<gatling.version>3.13.4</gatling.version>
13-
<gatling-maven-plugin.version>4.15.1</gatling-maven-plugin.version>
13+
<gatling-maven-plugin.version>4.16.1</gatling-maven-plugin.version>
1414
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
1515
<maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
1616
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
@@ -29,7 +29,7 @@
2929
<dependency>
3030
<groupId>com.fasterxml.jackson.core</groupId>
3131
<artifactId>jackson-databind</artifactId>
32-
<version>2.18.2</version>
32+
<version>2.18.3</version>
3333
</dependency>
3434
<dependency>
3535
<groupId>org.junit.jupiter</groupId>
@@ -40,12 +40,12 @@
4040
<dependency>
4141
<groupId>org.slf4j</groupId>
4242
<artifactId>slf4j-api</artifactId>
43-
<version>2.0.16</version>
43+
<version>2.0.17</version>
4444
</dependency>
4545
<dependency>
4646
<groupId>ch.qos.logback</groupId>
4747
<artifactId>logback-classic</artifactId>
48-
<version>1.5.16</version>
48+
<version>1.5.17</version>
4949
</dependency>
5050
</dependencies>
5151

‎src/test/java/org/openmrs/performance/Constants.java

+4
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@ public class Constants {
5353
public static final String DIABETIC_KETOSIS_CONCEPT = "123107AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
5454
public static final String DIABETIC_FOOT_ULCER_CONCEPT = "149069AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
5555

56+
// Vitals
57+
public static final String VITALS_FORM_UUID = "9f26aad4-244a-46ca-be49-1196df1a8c9a";
58+
public static final String VITALS_LOCATION_UUID = "ba685651-ed3b-4e63-9b35-78893060758a";
59+
public static final String VITALS_ENCOUNTER_TYPE_UUID = "67a71486-1a54-468f-ac3e-7091a9a79584";
5660
}

‎src/test/java/org/openmrs/performance/http/DoctorHttpService.java

+46-1
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,46 @@
77

88
import java.time.ZonedDateTime;
99
import java.time.format.DateTimeFormatter;
10+
import java.util.ArrayList;
1011
import java.util.Collections;
1112
import java.util.HashMap;
1213
import java.util.List;
1314
import java.util.Map;
1415

1516
import static io.gatling.javaapi.core.CoreDsl.StringBody;
1617
import static io.gatling.javaapi.core.CoreDsl.bodyString;
17-
import static io.gatling.javaapi.core.CoreDsl.exec;
1818
import static io.gatling.javaapi.core.CoreDsl.jsonPath;
1919
import static io.gatling.javaapi.http.HttpDsl.RawFileBodyPart;
2020
import static io.gatling.javaapi.http.HttpDsl.StringBodyPart;
2121
import static io.gatling.javaapi.http.HttpDsl.http;
2222
import static org.openmrs.performance.Constants.ALLERGY_REACTION_UUID;
23+
import static org.openmrs.performance.Constants.ARTERIAL_BLOOD_OXYGEN_SATURATION;
2324
import static org.openmrs.performance.Constants.CARE_SETTING_UUID;
2425
import static org.openmrs.performance.Constants.CLINICIAN_ENCOUNTER_ROLE;
2526
import static org.openmrs.performance.Constants.CODED_ALLERGEN_UUID;
2627
import static org.openmrs.performance.Constants.DAYS;
2728
import static org.openmrs.performance.Constants.DEFAULT_DOSING_TYPE;
29+
import static org.openmrs.performance.Constants.DIASTOLIC_BLOOD_PRESSURE;
2830
import static org.openmrs.performance.Constants.DRUG_ORDER;
31+
import static org.openmrs.performance.Constants.HEIGHT_CM;
32+
import static org.openmrs.performance.Constants.MID_UPPER_ARM_CIRCUMFERENCE;
2933
import static org.openmrs.performance.Constants.ONCE_DAILY;
3034
import static org.openmrs.performance.Constants.ORAL;
3135
import static org.openmrs.performance.Constants.ORDER;
3236
import static org.openmrs.performance.Constants.OUTPATIENT_CLINIC_LOCATION_UUID;
37+
import static org.openmrs.performance.Constants.PULSE;
38+
import static org.openmrs.performance.Constants.RESPIRATORY_RATE;
3339
import static org.openmrs.performance.Constants.SEVERITY_UUID;
40+
import static org.openmrs.performance.Constants.SYSTOLIC_BLOOD_PRESSURE;
3441
import static org.openmrs.performance.Constants.TABLET;
42+
import static org.openmrs.performance.Constants.TEMPERATURE_C;
3543
import static org.openmrs.performance.Constants.VISIT_NOTE_CONCEPT_UUID;
3644
import static org.openmrs.performance.Constants.VISIT_NOTE_ENCOUNTER_TYPE_UUID;
3745
import static org.openmrs.performance.Constants.VISIT_NOTE_FORM_UUID;
46+
import static org.openmrs.performance.Constants.VITALS_ENCOUNTER_TYPE_UUID;
47+
import static org.openmrs.performance.Constants.VITALS_FORM_UUID;
48+
import static org.openmrs.performance.Constants.VITALS_LOCATION_UUID;
49+
import static org.openmrs.performance.Constants.WEIGHT_KG;
3850

3951
public class DoctorHttpService extends HttpService {
4052

@@ -362,4 +374,37 @@ public HttpRequestActionBuilder saveDiagnosis(String patientUuid, String encount
362374
}
363375
}
364376

377+
public HttpRequestActionBuilder saveVitalsData(String patientUuid) {
378+
ZonedDateTime now = ZonedDateTime.now();
379+
String encounterDatetime = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
380+
381+
Map<String, Object> encounter = new HashMap<>();
382+
encounter.put("form", VITALS_FORM_UUID);
383+
encounter.put("patient", patientUuid);
384+
encounter.put("location", VITALS_LOCATION_UUID);
385+
encounter.put("encounterType", VITALS_ENCOUNTER_TYPE_UUID);
386+
encounter.put("encounterDatetime", encounterDatetime);
387+
388+
List<Map<String, Object>> observations = new ArrayList<>();
389+
observations.add(Map.of("concept", SYSTOLIC_BLOOD_PRESSURE, "value", 34));
390+
observations.add(Map.of("concept", DIASTOLIC_BLOOD_PRESSURE, "value", 44));
391+
observations.add(Map.of("concept", RESPIRATORY_RATE, "value", 100));
392+
observations.add(Map.of("concept", ARTERIAL_BLOOD_OXYGEN_SATURATION, "value", 20));
393+
observations.add(Map.of("concept", PULSE, "value", 120));
394+
observations.add(Map.of("concept", TEMPERATURE_C, "value", 28));
395+
observations.add(Map.of("concept", WEIGHT_KG, "value", 60));
396+
observations.add(Map.of("concept", HEIGHT_CM, "value", 121));
397+
observations.add(Map.of("concept", MID_UPPER_ARM_CIRCUMFERENCE, "value", 34));
398+
399+
encounter.put("obs", observations);
400+
401+
try {
402+
String body = new ObjectMapper().writeValueAsString(encounter); // Convert Map to JSON
403+
return http("Save Vitals").post("/openmrs/ws/rest/v1/encounter").body(StringBody(body));
404+
}
405+
catch (JsonProcessingException e) {
406+
throw new RuntimeException("Error converting visitNote to JSON", e);
407+
}
408+
}
409+
365410
}

‎src/test/java/org/openmrs/performance/http/HttpService.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.openmrs.performance.http;
22

33
import io.gatling.javaapi.http.HttpRequestActionBuilder;
4-
54
import java.util.Set;
65
import java.util.StringJoiner;
76

@@ -115,4 +114,6 @@ public HttpRequestActionBuilder getActiveOrders(String patientUuid) {
115114
return http("Get Active Orders")
116115
.get("/openmrs/ws/rest/v1/order?patient="+patientUuid+"&careSetting=6f0c9a92-6f24-11e3-af88-005056821db0&status=ACTIVE&orderType=131168f4-15f5-102d-96e4-000c29c2a5d7&v=custom:(uuid,dosingType,orderNumber,accessionNumber,patient:ref,action,careSetting:ref,previousOrder:ref,dateActivated,scheduledDate,dateStopped,autoExpireDate,orderType:ref,encounter:ref,orderer:(uuid,display,person:(display)),orderReason,orderReasonNonCoded,orderType,urgency,instructions,commentToFulfiller,drug:(uuid,display,strength,dosageForm:(display,uuid),concept),dose,doseUnits:ref,frequency:ref,asNeeded,asNeededCondition,quantity,quantityUnits:ref,numRefills,dosingInstructions,duration,durationUnits:ref,route:ref,brandName,dispenseAsWritten)");
117116
}
117+
118+
118119
}

‎src/test/java/org/openmrs/performance/registries/DoctorRegistry.java

+4
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public ChainBuilder openVitalsAndBiometricsTab(String patientUuid) {
7575
return exec(httpService.getPatientObservations(patientUuid, vitals))
7676
.exec(httpService.getPatientObservations(patientUuid, biometrics));
7777
}
78+
79+
public ChainBuilder recordVitals(String patientUuid){
80+
return exec(httpService.saveVitalsData(patientUuid));
81+
}
7882

7983
public ChainBuilder openMedicationsTab(String patientUuid) {
8084
return exec(httpService.getDrugOrders(patientUuid));

‎src/test/java/org/openmrs/performance/scenarios/VisitPatientScenario.java

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public ScenarioBuilder getScenarioBuilder() {
3030
.pause(2)
3131
.exec(registry.openVitalsAndBiometricsTab("#{patient_uuid}"))
3232
.pause(5)
33+
.exec(registry.recordVitals("#{patient_uuid}"))
34+
.pause(5)
3335
.exec(registry.openMedicationsTab("#{patient_uuid}"))
3436
.pause(5)
3537
.exec(registry.openOrdersTab("#{patient_uuid}"))

0 commit comments

Comments
 (0)
Failed to load comments.