diff --git a/admin/tool/generator/classes/testplan_backend.php b/admin/tool/generator/classes/testplan_backend.php index 6b3c2e447dd..d4bde532a4a 100644 --- a/admin/tool/generator/classes/testplan_backend.php +++ b/admin/tool/generator/classes/testplan_backend.php @@ -100,10 +100,12 @@ class tool_generator_testplan_backend extends tool_generator_backend { * * @param int $courseid The target course id * @param bool $updateuserspassword Updates the course users password to $CFG->tool_generator_users_password + * @param int|null $size of the test plan. Used to limit the number of users exported + * to match the threads in the plan. For BC, defaults to null that means all enrolled users. * @return stored_file */ - public static function create_users_file($courseid, $updateuserspassword) { - $csvcontents = self::generate_users_file($courseid, $updateuserspassword); + public static function create_users_file($courseid, $updateuserspassword, ?int $size = null) { + $csvcontents = self::generate_users_file($courseid, $updateuserspassword, $size); $fs = get_file_storage(); $filerecord = self::get_file_record('users', 'csv'); @@ -171,14 +173,18 @@ class tool_generator_testplan_backend extends tool_generator_backend { * * @param int $targetcourseid * @param bool $updateuserspassword Updates the course users password to $CFG->tool_generator_users_password + * @param int|null $size of the test plan. Used to limit the number of users exported + * to match the threads in the plan. For BC, defaults to null that means all enrolled users. * @return string The users csv file contents. */ - protected static function generate_users_file($targetcourseid, $updateuserspassword) { + protected static function generate_users_file($targetcourseid, $updateuserspassword, ?int $size = null) { global $CFG; $coursecontext = context_course::instance($targetcourseid); - $users = get_enrolled_users($coursecontext, '', 0, 'u.id, u.username, u.auth', 'u.username ASC'); + // If requested, get the number of users (threads) to use in the plan. We only need those in the exported file. + $planusers = self::$users[$size] ?? 0; + $users = get_enrolled_users($coursecontext, '', 0, 'u.id, u.username, u.auth', 'u.username ASC', 0, $planusers); if (!$users) { print_error('coursewithoutusers', 'tool_generator'); } diff --git a/admin/tool/generator/cli/maketestplan.php b/admin/tool/generator/cli/maketestplan.php index 1dbb2ae1498..89a616a68ee 100644 --- a/admin/tool/generator/cli/maketestplan.php +++ b/admin/tool/generator/cli/maketestplan.php @@ -98,7 +98,7 @@ if (empty($CFG->tool_generator_users_password) || is_bool($CFG->tool_generator_u // Create files. $courseid = $DB->get_field('course', 'id', array('shortname' => $shortname)); -$usersfile = tool_generator_testplan_backend::create_users_file($courseid, !empty($options['updateuserspassword'])); +$usersfile = tool_generator_testplan_backend::create_users_file($courseid, !empty($options['updateuserspassword']), $size); $testplanfile = tool_generator_testplan_backend::create_testplan_file($courseid, $size); // One file path per line so other CLI scripts can easily parse the output. diff --git a/admin/tool/generator/maketestplan.php b/admin/tool/generator/maketestplan.php index fe2965ae225..eac66ea80f1 100644 --- a/admin/tool/generator/maketestplan.php +++ b/admin/tool/generator/maketestplan.php @@ -51,7 +51,7 @@ if ($data = $mform->get_data()) { // Creating both test plan and users files. $testplanfile = tool_generator_testplan_backend::create_testplan_file($data->courseid, $data->size); - $usersfile = tool_generator_testplan_backend::create_users_file($data->courseid, $data->updateuserspassword); + $usersfile = tool_generator_testplan_backend::create_users_file($data->courseid, $data->updateuserspassword, $data->size); // Test plan link. $testplanurl = moodle_url::make_pluginfile_url( diff --git a/admin/tool/generator/upgrade.txt b/admin/tool/generator/upgrade.txt index 4d5b19fb4b3..21e87ab3a7f 100644 --- a/admin/tool/generator/upgrade.txt +++ b/admin/tool/generator/upgrade.txt @@ -1,6 +1,13 @@ This files describes API changes in core libraries and APIs, information provided here is intended especially for developers. +=== 3.10.8 === + +* Function tool_generator_testplan_backend::create_users_file() now supports to pass the size of the testing plan, + that needs to be equal or smaller than the size of the generated site. That's used to effectively restrict the + exported number of users to the number of threads the jmeter plan will have (previously all the enrolled users + were being exported, with that leading to "false" loops (users not really looping X times). + === 3.7 === * Function tool_generator_testplan_backend::get_course_options() is removed, the 'course' form element is used instead.