  The Internet of Things connects a plethora of smart devices globally across
various applications like smart cities, autonomous vehicles and health
monitoring. Simulation plays a key role in the testing of IoT systems, noting
that field testing of a complete IoT product may be infeasible or prohibitively
expensive. This paper addresses a specific yet important need in
simulation-based testing for IoT: Stress testing of cloud systems. Existing
stress testing solutions for IoT demand significant computational resources,
making them ill-suited and costly. We propose a lean simulation framework
designed for IoT cloud stress testing which enables efficient simulation of a
large array of IoT and edge devices that communicate with the cloud. To
facilitate simulation construction for practitioners, we develop a
domain-specific language (DSL), named IoTECS, for generating simulators from
model-based specifications. We provide the syntax and semantics of IoTECS and
implement IoTECS using Xtext and Xtend. We assess simulators generated from
IoTECS specifications for stress testing two real-world systems: a cloud-based
IoT monitoring system and an IoT-connected vehicle system. Our empirical
results indicate that simulators created using IoTECS: (1)achieve best
performance when configured with Docker containerization; (2)effectively assess
the service capacity of our case-study systems, and (3)outperform industrial
stress-testing baseline tools, JMeter and Locust, by a factor of 3.5 in terms
of the number of IoT and edge devices they can simulate using identical
hardware resources. To gain initial insights about the usefulness of IoTECS in
practice, we interviewed two engineers from our industry partner who have
firsthand experience with IoTECS. Feedback from these interviews suggests that
IoTECS is effective in stress testing IoT cloud systems, saving significant
time and effort.
