Как правильно параметризировать скрипт?
#1
Отправлено 16 декабря 2008 - 16:06
Система выглядит так - упращённое предстваление:
Web портал:
1. Пользователь вводит уникальный код(ID) по маске 111ххххх, к примеру 11122233
2. Кликает "Login"
3. Открывается страница с набором контролов, пусть будут радиобаттноны и кнопкой "OK"
3.1 Если пользователь с ID уже был, то система показывает страницу с текстом "Выбор сделан"
4. Пользователь выбирает радиобатон и кликает "OK"
5. Показывается страница с текстом "Выбор сделан"
На Ajax(Click&Script) написал скрипт для тестирования производительности. Для параметра ID сделал раметризацию, настройки параметризации:
Parametr type: File
Select next row: Sequential
Update value on: Each iteration
Запуская сценарий на 1 пользователе в контроллере "выполнять до конца скрипт" - всё работает отлично.
Ещё раз запускаю сценарий на 1 пользователе в контроллере "выполнять до конца скрипт" - ошибка: не находит контролы, смотрю в логах приложения оказывается, скрипт запустился и из файла был использован тот же ID, что и в первом случае.
Удалил из файла параметром первый ID, запустил заново работает. Но это неудобно.
Если запускать на 2 и более пользователей сразу, то выполняется скрипт только для первого пользователя, для остальных ситуация описанная выше.
Подскажите как решить данныую проблему. Предпологаю, что можно брать ID рандомно, но нет гарантии, что ID не совпадут. Мне кажется должно быть более красивое решение проблемы, чтоб все виртуальные пользователи знали, как ID уже были использованы.
#2
Отправлено 16 декабря 2008 - 22:12
Виртуальным пользователям все по барабану, они не будут знать ничего более того, что вы им сами скажете делать. Если речь идет о наборе ID в течение одного тестового прогона, то Data Assignment Method должен быть Unique, а не Sequential. При этом вам самому придется позаботиться о том, чтобы уникальных ID хватило всем виртуальным пользователям на все время теста. Для примера - при 3 пользователях, выполняющих скрипт 5 итераций, ваш файл параметров должен содержать, как минимум, 15 уникальных ID.Подскажите как решить данныую проблему. Предпологаю, что можно брать ID рандомно, но нет гарантии, что ID не совпадут. Мне кажется должно быть более красивое решение проблемы, чтоб все виртуальные пользователи знали, как ID уже были использованы.
Что касается повторного использования этих же ID для последующих прогонов, то это опять же ваша головная боль. Если приложение "запоминает" все ранее использованные ID (неважно введенные вручную или во время нагрузочного теста), то вам надо либо делать reset БД (или где эти ID запоминаются приложением?) перед каждым новым тестом, либо каждый раз обновлять файл параметров в скрипте новой порцией уникальных ID.
#3
Отправлено 17 декабря 2008 - 10:00
Было решено, что сценарий будет такой прогоняться последовательно на 20, 30 и 60 пользователей выполняют скрипт до конца, т.е. по 1 итерации.
1.Поставил как советовали "Data Assignment Method должен быть Unique" - непомогло, все пользователи берут первый ID из файла.
Заменил "Each iteration" на "Each occurrence" - помогло.
2. Остался вопрос "как обнавлять файл параметров уникальными ID". В моём файле почти 30 000 ID. Хочу сделать, что бы в скрипте был функционал: удалять из файла параметров параметр который был взят виртуальным пользователем.
У меня есть скрипт AJAX(Click&Script) - вот его начало:
Action() { web_browser("TIMSSLogin.aspx", DESCRIPTION, ACTION, "Navigate=http://100.100.100.100/ECTS/Anonymous/TIMSSLogin.aspx", LAST); lr_think_time(2); web_edit_field("lStudentLogin$UserName", "Snapshot=t1.inf", DESCRIPTION, "Type=text", "Name=lStudentLogin$UserName", ACTION, "SetValue={TimssID}", LAST); //---------------- //Сюда хочу вставить код редактирования файла параметров //---------------- ...
И код редактирвоания код делает следующие: открывает файл ищет ID удаляет его, сохраняет файл.
typedef long time_t; char *filename = "c:\\timssid.dat"; char *filenameTmp = "c:\\tmp.dat"; Action() { long file, fileTmp, thetime; int id, id2; time_t t; char s[32]; /* Create a new file */ if ((file = fopen(filename, "r" )) == NULL) { lr_output_message("Unable to create %s", filename); return -1; } if ((fileTmp = fopen(filenameTmp, "w" )) == NULL) { lr_output_message("Unable to create %s", filenameTmp); return -1; } /* Write the Vuser id and time */ lr_whoami(&id, NULL, NULL); fprintf(file, "Vuser %d %ld", id, time(&t)); /* Now read what we've just written. Rewind to start of file */ fseek(file, 0, 0); /* 0 is SEEK_SET */ while(!feof(file)) { fscanf(file, "%s", &s); if(strcmp(s, "11122256")!=0) fprintf(fileTmp, "%s\n", &s); //lr_output_message("%s ", s ); } fclose(file); fclose(fileTmp); remove (filename); rename (filenameTmp, filename); remove (filenameTmp); return 0; }
Я не знаю как за место "11122256" подставить TimssID.
Я не знаю как правильно вставить этот код в тело скрипта. Если вставляю код где это указано компилятор ругается.
#4
Отправлено 17 декабря 2008 - 23:39
Зачем вам такие сложности? Вместо одного огроменного файла сделайте набор мелких по 20/30/60 записей и работайте с ними. Сделать copy/paste намного быстрее, чем писать и отлаживать такой fancy код. Ну если уж совсем хочется все автоматизировать ради автоматизации, то делайте эти pre-test приготовления отдельно, а не в самом VuGen скрипте. Иначе у вас во время работы нагрузочного сценария расходуется куча времени на вещи, абсолютно не относящиеся к самому предмету тестирования.2. Остался вопрос "как обнавлять файл параметров уникальными ID". В моём файле почти 30 000 ID. Хочу сделать, что бы в скрипте был функционал: удалять из файла параметров параметр который был взят виртуальным пользователем.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных