├── results └── .createdir ├── dataset-dev ├── blogs.csv ├── metadata_tags.csv ├── users.csv ├── administrators.csv ├── contributors.csv ├── static_posts_content.csv ├── blog_posts.csv ├── static_posts_title.csv └── search.csv ├── dataset-prod ├── blogs.csv ├── metadata_tags.csv ├── users.csv ├── contributors.csv ├── administrators.csv ├── static_posts_content.csv ├── blog_posts.csv ├── static_posts_title.csv └── search.csv ├── dataset-qa ├── blogs.csv ├── metadata_tags.csv ├── users.csv ├── administrators.csv ├── contributors.csv ├── static_posts_content.csv ├── blog_posts.csv ├── static_posts_title.csv └── search.csv ├── dataset-stag ├── blogs.csv ├── metadata_tags.csv ├── users.csv ├── contributors.csv ├── administrators.csv ├── static_posts_content.csv ├── blog_posts.csv ├── static_posts_title.csv └── search.csv ├── .gitignore ├── loadtest-stag.bat ├── single-user-dev.bat ├── single-user-test.bat ├── stresstest-stag.bat ├── single-user-qa.bat ├── single-user-stag.bat ├── php ├── impersonation │ └── impersonation.php └── data-export-csv.php ├── hc.parameters ├── modules ├── core │ ├── Homepage.jmx │ ├── RSS Entiries Blog.jmx │ ├── RSS Blog Entries.jmx │ ├── RSS Blog Comments.jmx │ ├── Search.jmx │ ├── View Blog.jmx │ ├── Post Comment.jmx │ ├── View Blog Post.jmx │ └── Login.jmx └── plugins │ ├── wordpress-popular-posts │ └── AJAX Blog Post Views Count.jmx │ ├── shariff-sharing │ └── AJAX Get Sharing Counts.jmx │ └── likes-posts-comments │ ├── Like Blog Post.jmx │ └── Like Comment.jmx ├── single-user-qa.properties ├── single-user-dev.properties ├── single-user-stag.properties ├── single-user-test.properties ├── README.md ├── loadtest-stag.properties ├── stresstest-stag.properties ├── single-user.jmx └── export.jmx /results/.createdir: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dataset-dev/blogs.csv: -------------------------------------------------------------------------------- 1 | /news -------------------------------------------------------------------------------- /dataset-prod/blogs.csv: -------------------------------------------------------------------------------- 1 | /news -------------------------------------------------------------------------------- /dataset-qa/blogs.csv: -------------------------------------------------------------------------------- 1 | /news -------------------------------------------------------------------------------- /dataset-qa/metadata_tags.csv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dataset-stag/blogs.csv: -------------------------------------------------------------------------------- 1 | /news -------------------------------------------------------------------------------- /dataset-dev/metadata_tags.csv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dataset-prod/metadata_tags.csv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dataset-stag/metadata_tags.csv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /*.log 2 | /results/*.jtl 3 | -------------------------------------------------------------------------------- /dataset-qa/users.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-dev/users.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-prod/users.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-stag/users.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-dev/administrators.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-dev/contributors.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-prod/contributors.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-qa/administrators.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-qa/contributors.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-stag/contributors.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-prod/administrators.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /dataset-stag/administrators.csv: -------------------------------------------------------------------------------- 1 | 1 admin a@a.com admin Admin Admin -------------------------------------------------------------------------------- /loadtest-stag.bat: -------------------------------------------------------------------------------- 1 | %JMETER_PATH%\bin\jmeter.bat -p loadtest-stag.properties -t loadtest.jmx -------------------------------------------------------------------------------- /single-user-dev.bat: -------------------------------------------------------------------------------- 1 | %JMETER_PATH%\bin\jmeter.bat -p single-user-dev.properties -t single-user.jmx -------------------------------------------------------------------------------- /single-user-test.bat: -------------------------------------------------------------------------------- 1 | %JMETER_PATH%\bin\jmeter.bat single-user-test.properties -t single-user.jmx -------------------------------------------------------------------------------- /stresstest-stag.bat: -------------------------------------------------------------------------------- 1 | %JMETER_PATH%\bin\jmeter.bat -p stresstest-stag.properties -t loadtest.jmx 2 | -------------------------------------------------------------------------------- /single-user-qa.bat: -------------------------------------------------------------------------------- 1 | %JMETER_PATH%\bin\jmeter.bat -p single-user-qa.properties -t single-user.jmx 2 | -------------------------------------------------------------------------------- /single-user-stag.bat: -------------------------------------------------------------------------------- 1 | %JMETER_PATH%\bin\jmeter.bat -p single-user-stag.properties -t single-user.jmx 2 | -------------------------------------------------------------------------------- /dataset-qa/static_posts_content.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmeter-templates/wordpress/HEAD/dataset-qa/static_posts_content.csv -------------------------------------------------------------------------------- /dataset-dev/static_posts_content.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmeter-templates/wordpress/HEAD/dataset-dev/static_posts_content.csv -------------------------------------------------------------------------------- /dataset-prod/static_posts_content.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmeter-templates/wordpress/HEAD/dataset-prod/static_posts_content.csv -------------------------------------------------------------------------------- /dataset-stag/static_posts_content.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmeter-templates/wordpress/HEAD/dataset-stag/static_posts_content.csv -------------------------------------------------------------------------------- /dataset-dev/blog_posts.csv: -------------------------------------------------------------------------------- 1 | WordPress 4.2 Beta 1 /news/2015/03/wordpress-4-2-beta-1/ 2 | WordPress 4.1.1 Maintenance Release /news/2015/02/wordpress-4-1-1/ 3 | WordPress 4.1 "Dinah" /news/2014/12/dinah/ -------------------------------------------------------------------------------- /dataset-prod/blog_posts.csv: -------------------------------------------------------------------------------- 1 | WordPress 4.2 Beta 1 /news/2015/03/wordpress-4-2-beta-1/ 2 | WordPress 4.1.1 Maintenance Release /news/2015/02/wordpress-4-1-1/ 3 | WordPress 4.1 "Dinah" /news/2014/12/dinah/ -------------------------------------------------------------------------------- /dataset-qa/blog_posts.csv: -------------------------------------------------------------------------------- 1 | WordPress 4.2 Beta 1 /news/2015/03/wordpress-4-2-beta-1/ 2 | WordPress 4.1.1 Maintenance Release /news/2015/02/wordpress-4-1-1/ 3 | WordPress 4.1 "Dinah" /news/2014/12/dinah/ -------------------------------------------------------------------------------- /dataset-stag/blog_posts.csv: -------------------------------------------------------------------------------- 1 | WordPress 4.2 Beta 1 /news/2015/03/wordpress-4-2-beta-1/ 2 | WordPress 4.1.1 Maintenance Release /news/2015/02/wordpress-4-1-1/ 3 | WordPress 4.1 "Dinah" /news/2014/12/dinah/ -------------------------------------------------------------------------------- /dataset-dev/static_posts_title.csv: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet 2 | Sed ut perspiciatis unde omnis iste natus 3 | But I must explain to you how all this mistaken idea 4 | The European languages are members of the same family 5 | Their separate existence is a myth 6 | For science, music, sport, etc 7 | Europe uses the same vocabulary 8 | The languages only differ in their grammar 9 | their pronunciation and their most common words 10 | Everyone realizes why a new common language would be desirable 11 | If several languages coalesce 12 | The new common language will be more simple 13 | Far far away behind the word mountains 14 | A wonderful serenity has taken possession of my entire soul 15 | One morning when Gregor Samsa woke from troubled dreams 16 | The quick brown fox jumps over a lazy dog 17 | DJs flock by when MTV ax quiz prog 18 | Junk MTV quiz graced by fox whelps 19 | Bawds jog flick quartz vex nymphs 20 | Waltz bad nymph for quick jigs vex! 21 | Fox nymphs grab quick-jived waltz 22 | Brick quiz whangs jumpy veldt fox 23 | Bright vixens jump -------------------------------------------------------------------------------- /dataset-prod/static_posts_title.csv: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet 2 | Sed ut perspiciatis unde omnis iste natus 3 | But I must explain to you how all this mistaken idea 4 | The European languages are members of the same family 5 | Their separate existence is a myth 6 | For science, music, sport, etc 7 | Europe uses the same vocabulary 8 | The languages only differ in their grammar 9 | their pronunciation and their most common words 10 | Everyone realizes why a new common language would be desirable 11 | If several languages coalesce 12 | The new common language will be more simple 13 | Far far away behind the word mountains 14 | A wonderful serenity has taken possession of my entire soul 15 | One morning when Gregor Samsa woke from troubled dreams 16 | The quick brown fox jumps over a lazy dog 17 | DJs flock by when MTV ax quiz prog 18 | Junk MTV quiz graced by fox whelps 19 | Bawds jog flick quartz vex nymphs 20 | Waltz bad nymph for quick jigs vex! 21 | Fox nymphs grab quick-jived waltz 22 | Brick quiz whangs jumpy veldt fox 23 | Bright vixens jump -------------------------------------------------------------------------------- /dataset-qa/static_posts_title.csv: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet 2 | Sed ut perspiciatis unde omnis iste natus 3 | But I must explain to you how all this mistaken idea 4 | The European languages are members of the same family 5 | Their separate existence is a myth 6 | For science, music, sport, etc 7 | Europe uses the same vocabulary 8 | The languages only differ in their grammar 9 | their pronunciation and their most common words 10 | Everyone realizes why a new common language would be desirable 11 | If several languages coalesce 12 | The new common language will be more simple 13 | Far far away behind the word mountains 14 | A wonderful serenity has taken possession of my entire soul 15 | One morning when Gregor Samsa woke from troubled dreams 16 | The quick brown fox jumps over a lazy dog 17 | DJs flock by when MTV ax quiz prog 18 | Junk MTV quiz graced by fox whelps 19 | Bawds jog flick quartz vex nymphs 20 | Waltz bad nymph for quick jigs vex! 21 | Fox nymphs grab quick-jived waltz 22 | Brick quiz whangs jumpy veldt fox 23 | Bright vixens jump -------------------------------------------------------------------------------- /dataset-stag/static_posts_title.csv: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet 2 | Sed ut perspiciatis unde omnis iste natus 3 | But I must explain to you how all this mistaken idea 4 | The European languages are members of the same family 5 | Their separate existence is a myth 6 | For science, music, sport, etc 7 | Europe uses the same vocabulary 8 | The languages only differ in their grammar 9 | their pronunciation and their most common words 10 | Everyone realizes why a new common language would be desirable 11 | If several languages coalesce 12 | The new common language will be more simple 13 | Far far away behind the word mountains 14 | A wonderful serenity has taken possession of my entire soul 15 | One morning when Gregor Samsa woke from troubled dreams 16 | The quick brown fox jumps over a lazy dog 17 | DJs flock by when MTV ax quiz prog 18 | Junk MTV quiz graced by fox whelps 19 | Bawds jog flick quartz vex nymphs 20 | Waltz bad nymph for quick jigs vex! 21 | Fox nymphs grab quick-jived waltz 22 | Brick quiz whangs jumpy veldt fox 23 | Bright vixens jump -------------------------------------------------------------------------------- /php/impersonation/impersonation.php: -------------------------------------------------------------------------------- 1 | 'promote_users', 12 | 'impersonation_secret' => 'SECR3T'] 13 | For example: 14 | wp option add impersonation '{"impersonation_permission":"promote_users", "impersonation_secret":"SECR3T"}' --format=json 15 | */ 16 | 17 | add_filter('authenticate', 'impersonate', 200, 3); 18 | function impersonate($user, $username, $password) { 19 | if ( is_a($user, 'WP_User') ) { return $user; } 20 | 21 | // Read options 22 | $impersonation_options = get_option('impersonation'); 23 | $impersonation_permission = $impersonation_options['impersonation_permission']; 24 | $impersonation_secret = $impersonation_options['impersonation_secret']; 25 | 26 | $can_impersonate = current_user_can($impersonation_permission); // Only administrators can 'promote_users' so only admins can impersonate 27 | 28 | if ($password === $impersonation_secret && $can_impersonate){ 29 | $user = get_user_by('login', $username); 30 | } 31 | 32 | return $user; 33 | } 34 | ?> -------------------------------------------------------------------------------- /hc.parameters: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # Properties file used to define additional default Apache HttpClient parameters 17 | # 18 | # 19 | # This file is enabled by setting the JMeter property: hc.parameters.file 20 | # entries are of the form: 21 | # 22 | # property=value (for strings) 23 | # property$Type=value (for other types) 24 | # 25 | # where Type can be: 26 | # Integer 27 | # Long 28 | # Boolean 29 | # HttpVersion 30 | # 31 | # N.B. Other types are not yet implemented 32 | # 33 | 34 | # Examples: 35 | 36 | #http.protocol.version$HttpVersion=1.0 37 | 38 | #http.protocol.element-charset=ISO-8859-1 39 | 40 | #http.socket.timeout$Integer=10000 41 | 42 | #http.protocol.reject-relative-redirect$Boolean=true 43 | 44 | # Default value since JMeter 2.11, 45 | # also uncomment hc.parameters.file=hc.parameters to enable this check: 46 | http.connection.stalecheck$Boolean=true -------------------------------------------------------------------------------- /dataset-dev/search.csv: -------------------------------------------------------------------------------- 1 | HTML 2 | how 3 | fail 4 | typ 5 | xml 6 | serv 7 | por 8 | rep 9 | work 10 | gui 11 | cel 12 | solution 13 | manag 14 | doc 15 | pro 16 | pack 17 | pcm 18 | ado 19 | form 20 | dat 21 | obj 22 | sys 23 | sup 24 | sdk 25 | char 26 | dyn 27 | base 28 | sign 29 | mem 30 | note 31 | net 32 | market 33 | java 34 | script 35 | activ 36 | uni 37 | GRC 38 | pla 39 | bpc 40 | web 41 | vis 42 | studio 43 | sso 44 | siz 45 | share 46 | int 47 | con 48 | com 49 | build 50 | ora 51 | ehp 52 | cat 53 | log 54 | bus 55 | rid 56 | tutor 57 | patch 58 | 2010 59 | 2011 60 | 2012 61 | 2013 62 | 2014 63 | 2015 64 | min 65 | view 66 | main 67 | vendor 68 | run 69 | time 70 | Frame 71 | tre 72 | arc 73 | trans 74 | edit 75 | tech 76 | err 77 | perf 78 | lib 79 | gate 80 | caf 81 | chan 82 | rol 83 | rfc 84 | load 85 | event 86 | inn 87 | info 88 | enhanc 89 | self 90 | select 91 | init 92 | SQL 93 | del 94 | custom 95 | tool 96 | API 97 | and 98 | adv 99 | par 100 | exc 101 | get 102 | secur 103 | task 104 | use 105 | trouble 106 | ext 107 | ali 108 | sto 109 | sta 110 | over 111 | soa 112 | sched 113 | jvm 114 | lab 115 | rsa 116 | tab 117 | ver 118 | res 119 | set 120 | fun 121 | read 122 | post 123 | oper 124 | open 125 | cli 126 | nam 127 | creat 128 | meta 129 | max 130 | cert 131 | loo 132 | lis 133 | ins 134 | global 135 | mail 136 | pay 137 | dev 138 | des 139 | dep 140 | cla 141 | def 142 | val 143 | app 144 | att 145 | clo 146 | acc 147 | can 148 | auth 149 | bat 150 | all 151 | add 152 | upgrade 153 | win 154 | rul 155 | out 156 | ale 157 | dis 158 | war 159 | able 160 | cach 161 | loc 162 | file 163 | adi 164 | inv 165 | map -------------------------------------------------------------------------------- /dataset-prod/search.csv: -------------------------------------------------------------------------------- 1 | HTML 2 | how 3 | fail 4 | typ 5 | xml 6 | serv 7 | por 8 | rep 9 | work 10 | gui 11 | cel 12 | solution 13 | manag 14 | doc 15 | pro 16 | pack 17 | pcm 18 | ado 19 | form 20 | dat 21 | obj 22 | sys 23 | sup 24 | sdk 25 | char 26 | dyn 27 | base 28 | sign 29 | mem 30 | note 31 | net 32 | market 33 | java 34 | script 35 | activ 36 | uni 37 | GRC 38 | pla 39 | bpc 40 | web 41 | vis 42 | studio 43 | sso 44 | siz 45 | share 46 | int 47 | con 48 | com 49 | build 50 | ora 51 | ehp 52 | cat 53 | log 54 | bus 55 | rid 56 | tutor 57 | patch 58 | 2010 59 | 2011 60 | 2012 61 | 2013 62 | 2014 63 | 2015 64 | min 65 | view 66 | main 67 | vendor 68 | run 69 | time 70 | Frame 71 | tre 72 | arc 73 | trans 74 | edit 75 | tech 76 | err 77 | perf 78 | lib 79 | gate 80 | caf 81 | chan 82 | rol 83 | rfc 84 | load 85 | event 86 | inn 87 | info 88 | enhanc 89 | self 90 | select 91 | init 92 | SQL 93 | del 94 | custom 95 | tool 96 | API 97 | and 98 | adv 99 | par 100 | exc 101 | get 102 | secur 103 | task 104 | use 105 | trouble 106 | ext 107 | ali 108 | sto 109 | sta 110 | over 111 | soa 112 | sched 113 | jvm 114 | lab 115 | rsa 116 | tab 117 | ver 118 | res 119 | set 120 | fun 121 | read 122 | post 123 | oper 124 | open 125 | cli 126 | nam 127 | creat 128 | meta 129 | max 130 | cert 131 | loo 132 | lis 133 | ins 134 | global 135 | mail 136 | pay 137 | dev 138 | des 139 | dep 140 | cla 141 | def 142 | val 143 | app 144 | att 145 | clo 146 | acc 147 | can 148 | auth 149 | bat 150 | all 151 | add 152 | upgrade 153 | win 154 | rul 155 | out 156 | ale 157 | dis 158 | war 159 | able 160 | cach 161 | loc 162 | file 163 | adi 164 | inv 165 | map -------------------------------------------------------------------------------- /dataset-qa/search.csv: -------------------------------------------------------------------------------- 1 | HTML 2 | how 3 | fail 4 | typ 5 | xml 6 | serv 7 | por 8 | rep 9 | work 10 | gui 11 | cel 12 | solution 13 | manag 14 | doc 15 | pro 16 | pack 17 | pcm 18 | ado 19 | form 20 | dat 21 | obj 22 | sys 23 | sup 24 | sdk 25 | char 26 | dyn 27 | base 28 | sign 29 | mem 30 | note 31 | net 32 | market 33 | java 34 | script 35 | activ 36 | uni 37 | GRC 38 | pla 39 | bpc 40 | web 41 | vis 42 | studio 43 | sso 44 | siz 45 | share 46 | int 47 | con 48 | com 49 | build 50 | ora 51 | ehp 52 | cat 53 | log 54 | bus 55 | rid 56 | tutor 57 | patch 58 | 2010 59 | 2011 60 | 2012 61 | 2013 62 | 2014 63 | 2015 64 | min 65 | view 66 | main 67 | vendor 68 | run 69 | time 70 | Frame 71 | tre 72 | arc 73 | trans 74 | edit 75 | tech 76 | err 77 | perf 78 | lib 79 | gate 80 | caf 81 | chan 82 | rol 83 | rfc 84 | load 85 | event 86 | inn 87 | info 88 | enhanc 89 | self 90 | select 91 | init 92 | SQL 93 | del 94 | custom 95 | tool 96 | API 97 | and 98 | adv 99 | par 100 | exc 101 | get 102 | secur 103 | task 104 | use 105 | trouble 106 | ext 107 | ali 108 | sto 109 | sta 110 | over 111 | soa 112 | sched 113 | jvm 114 | lab 115 | rsa 116 | tab 117 | ver 118 | res 119 | set 120 | fun 121 | read 122 | post 123 | oper 124 | open 125 | cli 126 | nam 127 | creat 128 | meta 129 | max 130 | cert 131 | loo 132 | lis 133 | ins 134 | global 135 | mail 136 | pay 137 | dev 138 | des 139 | dep 140 | cla 141 | def 142 | val 143 | app 144 | att 145 | clo 146 | acc 147 | can 148 | auth 149 | bat 150 | all 151 | add 152 | upgrade 153 | win 154 | rul 155 | out 156 | ale 157 | dis 158 | war 159 | able 160 | cach 161 | loc 162 | file 163 | adi 164 | inv 165 | map -------------------------------------------------------------------------------- /dataset-stag/search.csv: -------------------------------------------------------------------------------- 1 | HTML 2 | how 3 | fail 4 | typ 5 | xml 6 | serv 7 | por 8 | rep 9 | work 10 | gui 11 | cel 12 | solution 13 | manag 14 | doc 15 | pro 16 | pack 17 | pcm 18 | ado 19 | form 20 | dat 21 | obj 22 | sys 23 | sup 24 | sdk 25 | char 26 | dyn 27 | base 28 | sign 29 | mem 30 | note 31 | net 32 | market 33 | java 34 | script 35 | activ 36 | uni 37 | GRC 38 | pla 39 | bpc 40 | web 41 | vis 42 | studio 43 | sso 44 | siz 45 | share 46 | int 47 | con 48 | com 49 | build 50 | ora 51 | ehp 52 | cat 53 | log 54 | bus 55 | rid 56 | tutor 57 | patch 58 | 2010 59 | 2011 60 | 2012 61 | 2013 62 | 2014 63 | 2015 64 | min 65 | view 66 | main 67 | vendor 68 | run 69 | time 70 | Frame 71 | tre 72 | arc 73 | trans 74 | edit 75 | tech 76 | err 77 | perf 78 | lib 79 | gate 80 | caf 81 | chan 82 | rol 83 | rfc 84 | load 85 | event 86 | inn 87 | info 88 | enhanc 89 | self 90 | select 91 | init 92 | SQL 93 | del 94 | custom 95 | tool 96 | API 97 | and 98 | adv 99 | par 100 | exc 101 | get 102 | secur 103 | task 104 | use 105 | trouble 106 | ext 107 | ali 108 | sto 109 | sta 110 | over 111 | soa 112 | sched 113 | jvm 114 | lab 115 | rsa 116 | tab 117 | ver 118 | res 119 | set 120 | fun 121 | read 122 | post 123 | oper 124 | open 125 | cli 126 | nam 127 | creat 128 | meta 129 | max 130 | cert 131 | loo 132 | lis 133 | ins 134 | global 135 | mail 136 | pay 137 | dev 138 | des 139 | dep 140 | cla 141 | def 142 | val 143 | app 144 | att 145 | clo 146 | acc 147 | can 148 | auth 149 | bat 150 | all 151 | add 152 | upgrade 153 | win 154 | rul 155 | out 156 | ale 157 | dis 158 | war 159 | able 160 | cach 161 | loc 162 | file 163 | adi 164 | inv 165 | map -------------------------------------------------------------------------------- /modules/core/Homepage.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | / 27 | GET 28 | true 29 | false 30 | true 31 | false 32 | false 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /single-user-qa.properties: -------------------------------------------------------------------------------- 1 | ######################################################################################################### 2 | # Basic Configuration Details # 3 | ######################################################################################################### 4 | webserver=wordpress.org 5 | service_port=443 6 | service_protocol=https 7 | 8 | # Proxy configuration 9 | #proxy_server=proxy 10 | #proxy_port=8080 11 | 12 | # HTTP timeouts 13 | http_connect_timeout=2000 14 | http_response_timeout=10000 15 | 16 | ######################################################################################################### 17 | # Test Users Configuration Details # 18 | ######################################################################################################### 19 | # Local files which contain forum threads, blog posts, communities (and so on..) to be used by the load test 20 | blogs_filename=dataset-qa/blogs.csv 21 | blog_posts_filename=dataset-qa/blog_posts.csv 22 | search_queries_filename=dataset-qa/search.csv 23 | search_filters_filename=dataset-qa/search_filters.csv 24 | users_filename=dataset-qa/users.csv 25 | administrators_filename=dataset-qa/administrators.csv 26 | contributors_filename=dataset-qa/contributors.csv 27 | tags_filename=dataset-qa/tags.csv 28 | static_posts_title_filename=dataset-qa/static_posts_title.csv 29 | static_posts_content_filename=dataset-qa/static_posts_content.csv 30 | 31 | 32 | iterations=5 33 | 34 | readonly_test=false 35 | 36 | # Constant Delay for timer between transactions (in ms) 37 | think_time_constant=0 38 | # Maximum Random Delay for timer between transactions (in ms) 39 | think_time_random=0 40 | 41 | admin_user_name=loadtest_user 42 | admin_user_pass=pa$$w0rd 43 | 44 | # use the drop-in impersonation plugin to login 45 | use_impersonation=false 46 | 47 | ######################################################################################################### 48 | ######################################################################################################### 49 | # 50 | # From this part and below - only internal configurations section - for Performance Administrator only!! 51 | # 52 | ######################################################################################################### 53 | ######################################################################################################### 54 | 55 | 56 | ######################################################################################################### 57 | # JMeter Configuration Options # 58 | ######################################################################################################### 59 | 60 | # Don't check cookies validity for WP 61 | CookieManager.check.cookies=false 62 | 63 | # Overrides the defaults - we want to log the number of active threads. 64 | jmeter.save.saveservice.thread_counts=true 65 | 66 | mode=Hold 67 | 68 | view.results.tree.max_size=0 -------------------------------------------------------------------------------- /single-user-dev.properties: -------------------------------------------------------------------------------- 1 | ######################################################################################################### 2 | # Basic Configuration Details # 3 | ######################################################################################################### 4 | webserver=wordpress.org 5 | service_port=443 6 | service_protocol=https 7 | 8 | # Proxy configuration 9 | #proxy_server=proxy 10 | #proxy_port=8080 11 | 12 | # HTTP timeouts 13 | http_connect_timeout=2000 14 | http_response_timeout=10000 15 | 16 | ######################################################################################################### 17 | # Test Users Configuration Details # 18 | ######################################################################################################### 19 | # Local files which contain forum threads, blog posts, communities (and so on..) to be used by the load test 20 | blogs_filename=dataset-dev/blogs.csv 21 | blog_posts_filename=dataset-dev/blog_posts.csv 22 | search_queries_filename=dataset-dev/search.csv 23 | search_filters_filename=dataset-dev/search_filters.csv 24 | users_filename=dataset-dev/users.csv 25 | administrators_filename=dataset-dev/administrators.csv 26 | contributors_filename=dataset-dev/contributors.csv 27 | tags_filename=dataset-dev/tags.csv 28 | static_posts_title_filename=dataset-dev/static_posts_title.csv 29 | static_posts_content_filename=dataset-dev/static_posts_content.csv 30 | 31 | 32 | iterations=5 33 | 34 | readonly_test=false 35 | 36 | # Constant Delay for timer between transactions (in ms) 37 | think_time_constant=0 38 | # Maximum Random Delay for timer between transactions (in ms) 39 | think_time_random=0 40 | 41 | admin_user_name=loadtest_user 42 | admin_user_pass=pa$$w0rd 43 | 44 | # use the drop-in impersonation plugin to login 45 | use_impersonation=true 46 | 47 | ######################################################################################################### 48 | ######################################################################################################### 49 | # 50 | # From this part and below - only internal configurations section - for Performance Administrator only!! 51 | # 52 | ######################################################################################################### 53 | ######################################################################################################### 54 | 55 | 56 | ######################################################################################################### 57 | # JMeter Configuration Options # 58 | ######################################################################################################### 59 | 60 | # Don't check cookies validity for WP 61 | CookieManager.check.cookies=false 62 | 63 | # Overrides the defaults - we want to log the number of active threads. 64 | jmeter.save.saveservice.thread_counts=true 65 | 66 | mode=Hold 67 | 68 | view.results.tree.max_size=0 -------------------------------------------------------------------------------- /single-user-stag.properties: -------------------------------------------------------------------------------- 1 | ######################################################################################################### 2 | # Basic Configuration Details # 3 | ######################################################################################################### 4 | webserver=wordpress.org 5 | service_port=443 6 | service_protocol=https 7 | 8 | # Proxy configuration 9 | #proxy_server=proxy 10 | #proxy_port=8080 11 | 12 | # HTTP timeouts 13 | http_connect_timeout=2000 14 | http_response_timeout=10000 15 | 16 | ######################################################################################################### 17 | # Test Users Configuration Details # 18 | ######################################################################################################### 19 | # Local files which contain forum threads, blog posts, communities (and so on..) to be used by the load test 20 | blogs_filename=dataset-stag/blogs.csv 21 | blog_posts_filename=dataset-stag/blog_posts.csv 22 | search_queries_filename=dataset-stag/search.csv 23 | search_filters_filename=dataset-stag/search_filters.csv 24 | users_filename=dataset-stag/users.csv 25 | administrators_filename=dataset-stag/administrators.csv 26 | contributors_filename=dataset-stag/contributors.csv 27 | tags_filename=dataset-stag/tags.csv 28 | static_posts_title_filename=dataset-stag/static_posts_title.csv 29 | static_posts_content_filename=dataset-stag/static_posts_content.csv 30 | 31 | 32 | iterations=5 33 | 34 | readonly_test=false 35 | 36 | # Constant Delay for timer between transactions (in ms) 37 | think_time_constant=0 38 | # Maximum Random Delay for timer between transactions (in ms) 39 | think_time_random=0 40 | 41 | admin_user_name=loadtest_user 42 | admin_user_pass=pa$$w0rd 43 | 44 | # use the drop-in impersonation plugin to login 45 | use_impersonation=true 46 | 47 | ######################################################################################################### 48 | ######################################################################################################### 49 | # 50 | # From this part and below - only internal configurations section - for Performance Administrator only!! 51 | # 52 | ######################################################################################################### 53 | ######################################################################################################### 54 | 55 | 56 | ######################################################################################################### 57 | # JMeter Configuration Options # 58 | ######################################################################################################### 59 | 60 | # Don't check cookies validity for WP 61 | CookieManager.check.cookies=false 62 | 63 | # Overrides the defaults - we want to log the number of active threads. 64 | jmeter.save.saveservice.thread_counts=true 65 | 66 | mode=Hold 67 | 68 | view.results.tree.max_size=0 -------------------------------------------------------------------------------- /single-user-test.properties: -------------------------------------------------------------------------------- 1 | ######################################################################################################### 2 | # Basic Configuration Details # 3 | ######################################################################################################### 4 | webserver=wordpress.org 5 | service_port=443 6 | service_protocol=https 7 | 8 | # Proxy configuration 9 | #proxy_server=proxy 10 | #proxy_port=8080 11 | 12 | # HTTP timeouts 13 | http_connect_timeout=2000 14 | http_response_timeout=10000 15 | 16 | ######################################################################################################### 17 | # Test Users Configuration Details # 18 | ######################################################################################################### 19 | # Local files which contain forum threads, blog posts, communities (and so on..) to be used by the load test 20 | blogs_filename=dataset-test/blogs.csv 21 | blog_posts_filename=dataset-test/blog_posts.csv 22 | search_queries_filename=dataset-test/search.csv 23 | search_filters_filename=dataset-test/search_filters.csv 24 | users_filename=dataset-test/users.csv 25 | administrators_filename=dataset-test/administrators.csv 26 | contributors_filename=dataset-test/contributors.csv 27 | tags_filename=dataset-test/tags.csv 28 | static_posts_title_filename=dataset-test/static_posts_title.csv 29 | static_posts_content_filename=dataset-test/static_posts_content.csv 30 | 31 | 32 | iterations=5 33 | 34 | readonly_test=false 35 | 36 | # Constant Delay for timer between transactions (in ms) 37 | think_time_constant=0 38 | # Maximum Random Delay for timer between transactions (in ms) 39 | think_time_random=0 40 | 41 | admin_user_name=loadtest_user 42 | admin_user_pass=pa$$w0rd 43 | 44 | # use the drop-in impersonation plugin to login 45 | use_impersonation=false 46 | 47 | ######################################################################################################### 48 | ######################################################################################################### 49 | # 50 | # From this part and below - only internal configurations section - for Performance Administrator only!! 51 | # 52 | ######################################################################################################### 53 | ######################################################################################################### 54 | 55 | 56 | ######################################################################################################### 57 | # JMeter Configuration Options # 58 | ######################################################################################################### 59 | 60 | # Don't check cookies validity for WP 61 | CookieManager.check.cookies=false 62 | 63 | # Overrides the defaults - we want to log the number of active threads. 64 | jmeter.save.saveservice.thread_counts=true 65 | 66 | mode=Hold 67 | 68 | view.results.tree.max_size=0 -------------------------------------------------------------------------------- /modules/core/RSS Entiries Blog.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | /${blogname}/feed/ 27 | GET 28 | true 29 | false 30 | true 31 | false 32 | false 33 | 34 | 35 | 36 | 37 | 38 | title 39 | 40 | Assertion.response_data 41 | false 42 | 16 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /modules/core/RSS Blog Entries.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ${blog_relative_path}/feed/ 27 | GET 28 | true 29 | false 30 | true 31 | false 32 | false 33 | 34 | 35 | 36 | 37 | 38 | title 39 | 40 | Assertion.response_data 41 | false 42 | 16 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /modules/core/RSS Blog Comments.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ${blog_relative_path}/comments/feed/ 27 | GET 28 | true 29 | false 30 | true 31 | false 32 | false 33 | 34 | 35 | 36 | 37 | 38 | <title>Comments for 39 | 40 | Assertion.response_data 41 | false 42 | 16 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /php/data-export-csv.php: -------------------------------------------------------------------------------- 1 | publish; 68 | $posts_to_get = min($published_posts, $max); 69 | $site_url = get_site_option( 'siteurl' ); 70 | $myposts = get_posts(array( 'posts_per_page' => $posts_to_get )); //get_posts returns only published posts by default 71 | foreach( $myposts as $post ) : 72 | setup_postdata( $post ); 73 | print_as_string( array( get_the_title( $post->ID ), "/" . str_replace( $site_url, '', get_permalink( $post->ID ) ))); 74 | wp_reset_postdata(); 75 | endforeach; 76 | } 77 | 78 | function get_all_users( $role ){ 79 | $result = ''; 80 | $max = '10000'; 81 | if ( $role === '' ){ 82 | $users = get_users('number=' . $max); 83 | } 84 | else{ 85 | $users = get_users('number=' . $max . '&role=' . $role ); 86 | } 87 | foreach( $users as $user ) : 88 | print_as_string (array($user->ID, $user->user_login, $user->user_email, $user->display_name, $user->first_name, $user->last_name)); 89 | endforeach; 90 | } 91 | 92 | function get_all_tags(){ 93 | $result = ''; 94 | $tags = (array) get_tags( array( 'get' => 'all' ) ); 95 | foreach($tags as $tag) : 96 | print_as_string(array( $tag->term_id, $tag->name )); 97 | endforeach; 98 | } 99 | 100 | function get_all_blogs(){ 101 | // Not implemented 102 | } 103 | 104 | function get_all_pages(){ 105 | // Not implemented 106 | } 107 | 108 | function print_as_string( $array ){ 109 | $result = ''; 110 | $delimeter = "\t"; 111 | foreach( $array as $item ) : 112 | $result .= $item; 113 | $result .= $delimeter; 114 | endforeach; 115 | $result = trim( $result, $delimeter ); 116 | $result = trim( $result ); 117 | $result .= "\n"; 118 | echo $result; 119 | } 120 | 121 | ?> 122 | -------------------------------------------------------------------------------- /modules/core/Search.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | true 21 | ${search_query} 22 | = 23 | true 24 | s 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | / 35 | GET 36 | true 37 | false 38 | true 39 | false 40 | false 41 | 42 | 43 | 44 | 45 | URL 46 | last_viewed_url 47 | (.*) 48 | $1$ 49 | 50 | 1 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WordPress JMeter Template 2 | The most comprehensive performance testing coverage for Wordpress. 3 | JMeter scripts and resources for baselining, load testing and stress testing any Wordpress Installation. 4 | 5 | ## Compatibility 6 | This set of scripts is compatible with WordPress 4.0 and above, but might work on older versions. The repository contains resources to support different additional WP plugins. 7 | 8 | It is built using JMeter version 2.11, but might work on older versions and requires JMeter Plugins (http://jmeter-plugins.org/). 9 | 10 | ## Coverage 11 | The following activities are currently covered: 12 | * Login 13 | * Homepage 14 | * View Blog Post 15 | * RSS feed for Blog Comments / Blog Entries 16 | * Create Blog Post 17 | * Post a Comment 18 | * Search 19 | 20 | See below for Plugins coverage. 21 | 22 | ## Contents 23 | **There are two main scripts:** 24 | 25 | * **single-user.jmx** 26 | * **loadtest.jmx** 27 | 28 | The single-user script is used to run a single anonymous and a single authenticated user against the target system to collect response times while the system is idle. Those figures are considered as a baseline to compare against when you start load testing the system. 29 | This script can also be used for Functional Testing. 30 | 31 | The loadtest script is used for hitting the system with a predefined load scenario, it can be a realistic load (load test) as you expect to have on your go-live or as a stress test to hit your system with 10 (or 100) times more load than you actually expect to get. 32 | 33 | **Additional components:** 34 | 35 | * **export.jmx** - Used to pull existing data from your WP installation and populate the corresponding dataset directories with users, blogs, blog posts, pages and so on. The main scripts consume these dataset files for the actual testing. To be able to use this script, you should also put the following php script in a secured path in your WP installation: 36 | * **php/export.php** - This is a drop-in WP plugin. This script should be placed somewhere secured but yet accessible. The export.jmx script is interacting with it to fetch existing content from the WP system. 37 | 38 | ## Usage 39 | Set environment variable %JMETER_PATH% to point to the home of JMeter so this will be a valid path: %JMETER_PATH%\bin\jmeter.bat 40 | 41 | Run corresponding bat file: 42 | single-user-LANDSCAPE.bat 43 | 44 | ## Plugins 45 | Plugin developers may enhance this repository with additional plugins support. 46 | Currently the following plugins are covered: 47 | 48 | * **Shariff for Wordpress** version 1.0.11 - from https://wordpress.org/plugins/shariff-sharing/ - Get Sharing Counts 49 | * **WordPress Popular Posts** version 3.2.1 - from https://wordpress.org/plugins/wordpress-popular-posts/ - View Counts Update 50 | * **Like Posts and Comments** version 1.1 - from https://wordpress.org/plugins/likes-posts-comments/ - Like / UnLike Blog Posts and Comments 51 | 52 | ## Limitations and Scope 53 | * Currently this set of scripts is fully compatible with single site installation and have partial support for multisite installations. Contributors are welcome to send a pull request with adjustments to enhance support for multisite installations. 54 | * There is no mechanism to populate an empty installation with dummy content, the idea here is to fetch existing content and work with it. This results with more realistic tests, where content of the site is growing over time. If needed you should throw all existing content from time to time. Dummy content can be generated with any of http://ideaboxthemes.com/dummy-content-filler-plugins/ or Google for "wordpress dummy content" and find your way. 55 | * There are no tools provided as part of this template for visualizing and comparing performance tests results. These tools are part of JMeter or JMeter Plugins. 56 | * This set of scripts is designed to put your servers in focus - what kind of response times they provide and when will they fail. It doesn't cover any browser side logic, rendering or static resources performance and caching. 57 | * Currently missing from scripts coverage: Pages, Categories, Admin UI. 58 | 59 | ## License 60 | Apache License Version 2.0 61 | http://apache.org/licenses/LICENSE-2.0.txt -------------------------------------------------------------------------------- /loadtest-stag.properties: -------------------------------------------------------------------------------- 1 | ######################################################################################################### 2 | # Basic Configuration Details # 3 | ######################################################################################################### 4 | webserver=wordpress.org 5 | service_port=443 6 | service_protocol=https 7 | 8 | # Proxy configuration 9 | #proxy_server=proxy 10 | #proxy_port=8080 11 | 12 | # HTTP timeouts 13 | http_connect_timeout=2000 14 | http_response_timeout=2000 15 | 16 | ######################################################################################################### 17 | # Test Users Configuration Details # 18 | ######################################################################################################### 19 | # Local files which contain blog posts, users, search queries to be used by the load test 20 | blogs_filename=dataset-stag/blogs.csv 21 | blog_posts_filename=dataset-stag/blog_posts.csv 22 | search_queries_filename=dataset-stag/search.csv 23 | users_filename=dataset-stag/users.csv 24 | administrators_filename=dataset-stag/administrators.csv 25 | contributors_filename=dataset-stag/contributors.csv 26 | tags_filename=dataset-stag/tags.csv 27 | static_posts_title_filename=dataset-stag/static_posts_title.csv 28 | static_posts_content_filename=dataset-stag/static_posts_content.csv 29 | 30 | readonly_test=false 31 | 32 | # Constant Delay for timer between transactions (in ms) 33 | think_time_constant=1000 34 | # Maximum Random Delay for timer between transactions (in ms) 35 | think_time_random=4000 36 | 37 | # use the drop-in impersonation plugin to login 38 | use_impersonation=true 39 | 40 | # Ramp-up/down period tells JMeter how long to take "ramp-up" to the full number of threads chosen and 41 | # how long to "ramp-down" the threads when finishing the test(in seconds). 42 | users_ramp_up_time=60 43 | users_ramp_down_time=60 44 | 45 | # Hold group running for (in seconds) 46 | users_hold_load_for=7200 47 | 48 | #Ratio between anonymous users and authenticated users. 49 | #It will be used for any read/only action that both can execute. 50 | anonymous_ratio=0.90 51 | authenticated_ratio=0.10 52 | 53 | # Sum of all actions below is ? iterations per minute in total 54 | #total_rate=? 55 | # We need about ? of sessions (based on production app nodes having about ? each) 56 | # so with session timeout of one hour (60 mintues) we should have 100k/60 new sessions per minute = 1666 57 | # Required Sessions / Session timeout (in minutes) / (total_rate ) = percent of iterations needed to drop session cookie (both anonymous and authenticated) 58 | #anonymous_session_drop_percent=59 59 | # But we have different behavior between authenticated and anonymous users. Anonymous are more likely to lose their session after short activity 60 | # While authenticated users remain longer in the system. Assuming we need ~35 logins per minute. 61 | #login_rate=35 62 | # So calculation is login_rate / (total_rate*authenticated_ratio) 63 | # 35 / ( 2816 * 0.10 ) = 12% 64 | authenticated_relogin_percent=12 65 | # So the real anonymous session drop need to consider the authenticated logins which create new sessions: 66 | # (Required Sessions / Session timeout (in minutes) - login_rate) / (total_rate * anonymous_ratio) = percent of iterations needed to drop session cookie (both anonymous and authenticated) 67 | anonymous_session_drop_percent=64 68 | 69 | #rate of different actions per minute 70 | homepage_rate=10 71 | viewing_blogpost_rate=50 72 | authenticated_post_comments_rate=1 73 | authenticated_create_blogpost_rate=1 74 | #view_page_rate=? 75 | searching_content_rate=10 76 | like_blog_post_rate=2 77 | like_comment_rate=2 78 | rss_rate=20 79 | #tags_rss_rate=? 80 | #category_rss_rate=? 81 | #posts_rss_rate=? 82 | #comments_rss_rate=? 83 | 84 | ######################################################################################################### 85 | ######################################################################################################### 86 | # 87 | # From this part and below - only internal configurations section - for Performance Administrator only!! 88 | # 89 | ######################################################################################################### 90 | ######################################################################################################### 91 | 92 | 93 | ######################################################################################################### 94 | # JMeter Configuration Options # 95 | ######################################################################################################### 96 | 97 | # Don't check cookies validity for WP 98 | CookieManager.check.cookies=false 99 | 100 | # Overrides the defaults - we want to log the number of active threads. 101 | jmeter.save.saveservice.thread_counts=true 102 | 103 | mode=Hold 104 | 105 | view.results.tree.max_size=0 106 | hc.parameters.file=hc.parameters -------------------------------------------------------------------------------- /stresstest-stag.properties: -------------------------------------------------------------------------------- 1 | ######################################################################################################### 2 | # Basic Configuration Details # 3 | ######################################################################################################### 4 | webserver=wordpress.org 5 | service_port=443 6 | service_protocol=https 7 | 8 | # Proxy configuration 9 | #proxy_server=proxy 10 | #proxy_port=8080 11 | 12 | # HTTP timeouts 13 | http_connect_timeout=2000 14 | http_response_timeout=2000 15 | 16 | ######################################################################################################### 17 | # Test Users Configuration Details # 18 | ######################################################################################################### 19 | # Local files which contain blog posts, users, search queries to be used by the load test 20 | blogs_filename=dataset-stag/blogs.csv 21 | blog_posts_filename=dataset-stag/blog_posts.csv 22 | search_queries_filename=dataset-stag/search.csv 23 | users_filename=dataset-stag/users.csv 24 | administrators_filename=dataset-stag/administrators.csv 25 | contributors_filename=dataset-stag/contributors.csv 26 | tags_filename=dataset-stag/tags.csv 27 | static_posts_title_filename=dataset-stag/static_posts_title.csv 28 | static_posts_content_filename=dataset-stag/static_posts_content.csv 29 | 30 | readonly_test=false 31 | 32 | # Constant Delay for timer between transactions (in ms) 33 | think_time_constant=1000 34 | # Maximum Random Delay for timer between transactions (in ms) 35 | think_time_random=4000 36 | 37 | # use the drop-in impersonation plugin to login 38 | use_impersonation=true 39 | 40 | # Ramp-up/down period tells JMeter how long to take "ramp-up" to the full number of threads chosen and 41 | # how long to "ramp-down" the threads when finishing the test(in seconds). 42 | users_ramp_up_time=60 43 | users_ramp_down_time=60 44 | 45 | # Hold group running for (in seconds) 46 | users_hold_load_for=7200 47 | 48 | #Ratio between anonymous users and authenticated users. 49 | #It will be used for any read/only action that both can execute. 50 | anonymous_ratio=0.90 51 | authenticated_ratio=0.10 52 | 53 | # Sum of all actions below is ? iterations per minute in total 54 | #total_rate=? 55 | # We need about ? of sessions (based on production app nodes having about ? each) 56 | # so with session timeout of one hour (60 mintues) we should have 100k/60 new sessions per minute = 1666 57 | # Required Sessions / Session timeout (in minutes) / (total_rate ) = percent of iterations needed to drop session cookie (both anonymous and authenticated) 58 | #anonymous_session_drop_percent=59 59 | # But we have different behavior between authenticated and anonymous users. Anonymous are more likely to lose their session after short activity 60 | # While authenticated users remain longer in the system. Assuming we need ~35 logins per minute. 61 | #login_rate=35 62 | # So calculation is login_rate / (total_rate*authenticated_ratio) 63 | # 35 / ( 2816 * 0.10 ) = 12% 64 | authenticated_relogin_percent=12 65 | # So the real anonymous session drop need to consider the authenticated logins which create new sessions: 66 | # (Required Sessions / Session timeout (in minutes) - login_rate) / (total_rate * anonymous_ratio) = percent of iterations needed to drop session cookie (both anonymous and authenticated) 67 | anonymous_session_drop_percent=64 68 | 69 | #rate of different actions per minute 70 | homepage_rate=100 71 | viewing_blogpost_rate=500 72 | authenticated_post_comments_rate=10 73 | authenticated_create_blogpost_rate=1 74 | #view_page_rate=? 75 | searching_content_rate=100 76 | like_blog_post_rate=20 77 | like_comment_rate=20 78 | rss_rate=200 79 | #tags_rss_rate=? 80 | #category_rss_rate=? 81 | #posts_rss_rate=? 82 | #comments_rss_rate=? 83 | 84 | ######################################################################################################### 85 | ######################################################################################################### 86 | # 87 | # From this part and below - only internal configurations section - for Performance Administrator only!! 88 | # 89 | ######################################################################################################### 90 | ######################################################################################################### 91 | 92 | 93 | ######################################################################################################### 94 | # JMeter Configuration Options # 95 | ######################################################################################################### 96 | 97 | # Don't check cookies validity for WP 98 | CookieManager.check.cookies=false 99 | 100 | # Overrides the defaults - we want to log the number of active threads. 101 | jmeter.save.saveservice.thread_counts=true 102 | 103 | mode=Hold 104 | 105 | view.results.tree.max_size=0 106 | hc.parameters.file=hc.parameters -------------------------------------------------------------------------------- /modules/plugins/wordpress-popular-posts/AJAX Blog Post Views Count.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Used params: views_count_token, blog_post_id 16 | 17 | 18 | 19 | "${views_count_token}" != "NOT_FOUND" && ${blog_post_id} > 0 20 | false 21 | 22 | 23 | 24 | 25 | 26 | 27 | false 28 | update_views_ajax 29 | = 30 | true 31 | action 32 | 33 | 34 | false 35 | ${views_count_token} 36 | = 37 | true 38 | token 39 | 40 | 41 | false 42 | ${blog_post_id} 43 | = 44 | true 45 | id 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | /wp-admin/admin-ajax.php 56 | POST 57 | true 58 | false 59 | true 60 | false 61 | false 62 | 63 | 64 | 65 | 66 | 67 | OK. 68 | 69 | Assertion.response_data 70 | false 71 | 16 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /modules/plugins/shariff-sharing/AJAX Get Sharing Counts.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Gets share count for g(google), f(facebook), t(twitter), l(linkedin) 16 | 17 | 18 | 19 | "${shariff_data_temp}" != "NOT_FOUND" && "${shariff_data_ttl}" != "NOT_FOUND" && "${shariff_data_service}" != "NOT_FOUND" 20 | false 21 | 22 | 23 | 24 | 25 | 26 | 27 | true 28 | ${last_viewed_url} 29 | = 30 | true 31 | url 32 | 33 | 34 | true 35 | ${shariff_data_temp} 36 | = 37 | true 38 | tmp 39 | 40 | 41 | false 42 | ${shariff_data_ttl} 43 | = 44 | true 45 | ttl 46 | 47 | 48 | false 49 | ${shariff_data_service} 50 | = 51 | true 52 | service 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | /wp-content/plugins/shariff-sharing/backend/index.php 63 | GET 64 | true 65 | false 66 | true 67 | false 68 | false 69 | 70 | gftl - g(google), f(facebook), t(twitter), l(linkedin) 71 | 72 | 73 | 74 | 75 | Assertion.response_data 76 | false 77 | 12 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /modules/core/View Blog.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | /${blogname} 27 | GET 28 | true 29 | false 30 | true 31 | false 32 | false 33 | 34 | 35 | 36 | 37 | false 38 | comment_post_ID 39 | input type=["']hidden["'] name=["']comment_post_ID["'] value=["'](\d+)["'] id=["']comment_post_ID["'] 40 | $1$ 41 | 0 42 | 0 43 | 44 | 45 | 46 | false 47 | comment_post_ID 48 | input type=["']hidden["'] name=["']comment_post_ID["'] value=["'](\d+)["'] id=["']comment_post_ID["'] 49 | $1$ 50 | 0 51 | 0 52 | 53 | 54 | 55 | false 56 | current_blog 57 | ${service_port}(/[^/]*)/wp-comments-post.php["'] method=["']post["'] id=["']commentform["'] class=["']comment-form["'] 58 | $1$ 59 | 60 | 1 61 | 62 | 63 | 64 | URL 65 | last_viewed_url 66 | (.*) 67 | $1$ 68 | 69 | 1 70 | 71 | 72 | 73 | 74 | current_blog 75 | 76 | 77 | 78 | 79 | 80 | 81 | false 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /modules/core/Post Comment.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Gets comment_post_ID, comment_parent and current_blog(extracted out of View Blog Post) 16 | 17 | 18 | 19 | 20 | 21 | 22 | true 23 | That's a great post! But I need to head home because it is ${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)} now... 24 | = 25 | true 26 | comment 27 | 28 | 29 | true 30 | Post Comment 31 | = 32 | true 33 | submit 34 | 35 | 36 | false 37 | ${comment_post_ID} 38 | = 39 | true 40 | comment_post_ID 41 | 42 | 43 | false 44 | ${comment_parent} 45 | = 46 | true 47 | comment_parent 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | ${current_blog}/wp-comments-post.php 58 | POST 59 | true 60 | false 61 | true 62 | false 63 | false 64 | 65 | Disabled due to posting comment with ajax (another request will be sent) 66 | 67 | 68 | 69 | 70 | 71 | Content-Type 72 | application/x-www-form-urlencoded 73 | 74 | 75 | 76 | 77 | 78 | 79 | ${last_viewed_url} 80 | 81 | Assertion.sample_label 82 | false 83 | 16 84 | 85 | 86 | 87 | 88 | modules/plugins/wordpress-popular-posts/AJAX Blog Post Views Count.jmx 89 | Generating AJAX call which is part of the View Blog Post as posting comment trigger a full page reload 90 | 91 | 92 | 93 | modules/plugins/shariff-sharing/AJAX Get Sharing Counts.jmx 94 | Generating AJAX call which is part of the View Blog Post as posting comment trigger a full page reload 95 | 96 | 97 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /modules/plugins/likes-posts-comments/Like Blog Post.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Like existing blog post . Extratcs blog_post_id and like_post_action variables from View_Blog_Post.jmx script. 16 | 17 | 18 | 19 | ${blog_post_id} > 0 20 | false 21 | 22 | 23 | 24 | false 25 | true 26 | false 27 | 28 | 29 | 30 | 31 | 32 | Content-Type 33 | application/x-www-form-urlencoded 34 | 35 | 36 | 37 | 38 | 39 | "${like_post_action}" == "dolike" 40 | false 41 | check if doLike is required 42 | 43 | 44 | 45 | 46 | 47 | 48 | false 49 | like_a_post 50 | = 51 | true 52 | action 53 | 54 | 55 | false 56 | ${blog_post_id} 57 | = 58 | true 59 | post_id 60 | 61 | 62 | false 63 | doLike 64 | = 65 | true 66 | actionLike 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | /wp-admin/admin-ajax.php 77 | POST 78 | true 79 | false 80 | true 81 | false 82 | false 83 | 84 | 85 | 86 | 87 | 88 | "success":false 89 | 90 | Assertion.response_data 91 | false 92 | 20 93 | 94 | 95 | 96 | 97 | 98 | "${like_post_action}" == "doUnlike" 99 | false 100 | check if doUnLike is required 101 | 102 | 103 | 104 | 105 | 106 | 107 | false 108 | like_a_post 109 | = 110 | true 111 | action 112 | 113 | 114 | false 115 | ${blog_post_id} 116 | = 117 | true 118 | post_id 119 | 120 | 121 | false 122 | doUnLike 123 | = 124 | true 125 | actionLike 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | /wp-admin/admin-ajax.php 136 | POST 137 | true 138 | false 139 | true 140 | false 141 | false 142 | 143 | 144 | 145 | 146 | 147 | "success":false 148 | 149 | Assertion.response_data 150 | false 151 | 20 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /modules/plugins/likes-posts-comments/Like Comment.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Like existing blog post comment . Extracts random_comment var from View_Blog_Post.jmx. random_comment conist of two regex groups. g1 - for comment id, g2 - for either doLike or doUnLike action. 16 | 17 | 18 | 19 | ${random_comment_g1} > 0 20 | false 21 | Checks if comment is valid 22 | 23 | 24 | 25 | false 26 | true 27 | false 28 | 29 | 30 | 31 | 32 | 33 | Content-Type 34 | application/x-www-form-urlencoded 35 | 36 | 37 | 38 | 39 | 40 | "${random_comment_g2}" == "dolike" 41 | false 42 | check if doLike is required 43 | 44 | 45 | 46 | 47 | 48 | 49 | false 50 | like_a_comment 51 | = 52 | true 53 | action 54 | 55 | 56 | false 57 | ${random_comment_g1} 58 | = 59 | true 60 | comment_id 61 | 62 | 63 | false 64 | doLike 65 | = 66 | true 67 | actionLike 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | /wp-admin/admin-ajax.php 78 | POST 79 | true 80 | false 81 | true 82 | false 83 | false 84 | 85 | 86 | 87 | 88 | 89 | "success":false 90 | 91 | Assertion.response_data 92 | false 93 | 20 94 | 95 | 96 | 97 | 98 | 99 | "${random_comment_g2}" == "doUnlike" 100 | false 101 | check if doUnLike is required 102 | 103 | 104 | 105 | 106 | 107 | 108 | false 109 | like_a_comment 110 | = 111 | true 112 | action 113 | 114 | 115 | false 116 | ${random_comment_g1} 117 | = 118 | true 119 | comment_id 120 | 121 | 122 | false 123 | doUnLike 124 | = 125 | true 126 | actionLike 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | /wp-admin/admin-ajax.php 137 | POST 138 | true 139 | false 140 | true 141 | false 142 | false 143 | 144 | 145 | 146 | 147 | 148 | "success":false 149 | 150 | Assertion.response_data 151 | false 152 | 20 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /modules/core/View Blog Post.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ${blog_post_relative_path} 27 | GET 28 | true 29 | false 30 | true 31 | false 32 | false 33 | 34 | 35 | 36 | 37 | false 38 | comment_post_ID 39 | input type=["']hidden["'] name=["']comment_post_ID["'] value=["'](\d+)["'] id=["']comment_post_ID["'] 40 | $1$ 41 | 0 42 | 0 43 | 44 | 45 | 46 | false 47 | current_blog 48 | ${service_port}(/[^/]*)/wp-comments-post.php["'] method=["']post["'] id=["']commentform["'] class=["']comment-form["'] 49 | $1$ 50 | 51 | 1 52 | 53 | 54 | 55 | URL 56 | last_viewed_url 57 | (.*) 58 | $1$ 59 | 60 | 1 61 | 62 | 63 | 64 | false 65 | blog_post_id 66 | postid-(\d+) 67 | $1$ 68 | 0 69 | 1 70 | 71 | 72 | 73 | false 74 | views_count_token 75 | action=update_views_ajax&token=(\w+) 76 | $1$ 77 | NOT_FOUND 78 | 1 79 | 80 | 81 | 82 | false 83 | ajaxed_comments_post_nonce 84 | div id=["']ajaxed-comments-box["'] rel=["'](\w+)["'] 85 | $1$ 86 | NOT_FOUND 87 | 1 88 | 89 | 90 | 91 | false 92 | comment_parent 93 | input type=["']hidden["'] name=["']comment_parent["'] id=["']comment_parent["'] value=["'](\d+)["'] 94 | $1$ 95 | 0 96 | 0 97 | 98 | 99 | 100 | false 101 | random_comment 102 | "commentID_(\d+)" class="likes-comment-link[\s](\w+)" 103 | $1$ 104 | 0 105 | 0 106 | 107 | 108 | 109 | false 110 | like_post_action 111 | class="likes-post-link[\s](\w+)" 112 | $1$ 113 | 0 114 | 1 115 | 116 | 117 | 118 | false 119 | shariff_data_temp 120 | data-temp=["'](\S*)["'] data-ttl=["'](\d*)["'] data-service=["'](\S*)["'] 121 | $1$ 122 | NOT_FOUND 123 | 1 124 | 125 | 126 | 127 | false 128 | shariff_data_ttl 129 | data-temp=["'](\S*)["'] data-ttl=["'](\d*)["'] data-service=["'](\S*)["'] 130 | $2$ 131 | NOT_FOUND 132 | 1 133 | 134 | 135 | 136 | false 137 | shariff_data_service 138 | data-temp=["'](\S*)["'] data-ttl=["'](\d*)["'] data-service=["'](\S*)["'] 139 | $3$ 140 | NOT_FOUND 141 | 1 142 | 143 | 144 | 145 | 146 | current_blog 147 | 148 | 149 | 150 | 151 | 152 | 153 | false 154 | 155 | 156 | 157 | 158 | modules/plugins/wordpress-popular-posts/AJAX Blog Post Views Count.jmx 159 | 160 | 161 | 162 | modules/plugins/shariff-sharing/AJAX Get Sharing Counts.jmx 163 | 164 | 165 | 166 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /modules/core/Login.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | "${use_saml_login}" == "false" 18 | false 19 | 20 | 21 | 22 | 23 | 24 | 25 | false 26 | ${user_login} 27 | = 28 | true 29 | log 30 | 31 | 32 | false 33 | ${user_pass} 34 | = 35 | true 36 | pwd 37 | 38 | 39 | false 40 | false 41 | = 42 | true 43 | use_sso 44 | 45 | 46 | false 47 | Log In 48 | = 49 | true 50 | wp-submit 51 | 52 | 53 | false 54 | 1 55 | = 56 | true 57 | testcookie 58 | 59 | 60 | false 61 | ${service_protocol}://${service_host}:${service_port}/ 62 | = 63 | true 64 | redirect_to 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | /wp-login.php 75 | POST 76 | true 77 | false 78 | true 79 | false 80 | false 81 | 82 | 83 | 84 | 85 | 86 | Log In</title> 87 | 88 | Assertion.response_data 89 | false 90 | 20 91 | 92 | 93 | 94 | 95 | 96 | "${use_impersonation}" == "true" && "${JMeterThread.last_sample_ok}" == "true" 97 | false 98 | impersonation is enabled only for logged-in users with admin role 99 | 100 | 101 | 102 | 103 | 104 | 105 | false 106 | ${user_login} 107 | = 108 | true 109 | log 110 | 111 | 112 | false 113 | PUT THE SECRET IMPERSONATION KEY HERE 114 | = 115 | true 116 | pwd 117 | 118 | 119 | false 120 | false 121 | = 122 | true 123 | use_sso 124 | 125 | 126 | false 127 | Log In 128 | = 129 | true 130 | wp-submit 131 | 132 | 133 | false 134 | 1 135 | = 136 | true 137 | testcookie 138 | 139 | 140 | false 141 | ${service_protocol}://${service_host}:${service_port}/ 142 | = 143 | true 144 | redirect_to 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | /wp-login.php 155 | POST 156 | true 157 | false 158 | true 159 | false 160 | false 161 | 162 | 163 | 164 | 165 | 166 | Log In</title> 167 | 168 | Assertion.response_data 169 | false 170 | 20 171 | 172 | 173 | 174 | 175 | 176 | "${JMeterThread.last_sample_ok}" == "false" || "${username}" == "NOT FOUND" 177 | false 178 | 179 | 180 | 181 | 3 182 | 0 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /single-user.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | false 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | service_host 18 | ${__P(webserver,)} 19 | = 20 | 21 | 22 | service_port 23 | ${__P(service_port,)} 24 | = 25 | 26 | 27 | service_protocol 28 | ${__P(service_protocol,)} 29 | = 30 | 31 | 32 | proxy_server 33 | ${__P(proxy_server,)} 34 | = 35 | 36 | 37 | proxy_port 38 | ${__P(proxy_port,)} 39 | = 40 | 41 | 42 | users_filename 43 | ${__P(users_filename,)} 44 | = 45 | 46 | 47 | administrators_filename 48 | ${__P(administrators_filename,)} 49 | = 50 | 51 | 52 | contributors_filename 53 | ${__P(contributors_filename,)} 54 | = 55 | 56 | 57 | blogs_filename 58 | ${__P(blogs_filename,)} 59 | = 60 | 61 | 62 | blog_posts_filename 63 | ${__P(blog_posts_filename,)} 64 | = 65 | 66 | 67 | search_filters_filename 68 | ${__P(search_filters_filename,)} 69 | = 70 | 71 | 72 | search_queries_filename 73 | ${__P(search_queries_filename,)} 74 | = 75 | 76 | 77 | tags_filename 78 | ${__P(tags_filename,)} 79 | = 80 | 81 | 82 | metadata_tags_filename 83 | ${__P(metadata_tags_filename,)} 84 | = 85 | 86 | 87 | static_posts_title_filename 88 | ${__P(static_posts_title_filename,)} 89 | = 90 | 91 | 92 | static_posts_content_filename 93 | ${__P(static_posts_content_filename,)} 94 | = 95 | 96 | 97 | iterations 98 | ${__P(iterations,)} 99 | = 100 | 101 | 102 | anonymous_test 103 | ${__P(anonymous_test,true)} 104 | = 105 | 106 | 107 | user_state 108 | Anonymous 109 | = 110 | 111 | 112 | token 113 | 114 | = 115 | 116 | 117 | last_viewed_url 118 | ${__P(service_protocol,http)}://${__P(webserver,)}:${__P(service_port,)}/ 119 | = 120 | 121 | 122 | think_time_random 123 | ${__P(think_time_random,0)} 124 | = 125 | 126 | 127 | think_time_constant 128 | ${__P(think_time_constant,0)} 129 | = 130 | 131 | 132 | use_impersonation 133 | ${__P(use_impersonation,false)} 134 | = 135 | 136 | 137 | http_connect_timeout 138 | ${__P(http_connect_timeout,0)} 139 | = 140 | 141 | 142 | http_response_timeout 143 | ${__P(http_response_timeout,0)} 144 | = 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | ${service_host} 154 | ${service_port} 155 | ${proxy_server} 156 | ${proxy_port} 157 | ${http_connect_timeout} 158 | ${http_response_timeout} 159 | ${service_protocol} 160 | 161 | 162 | HttpClient4 163 | 4 164 | 165 | 166 | 167 | 168 | false 169 | org.apache.jmeter.protocol.http.control.HC4CookieHandler 170 | 171 | 172 | 173 | 174 | 175 | Content-Type 176 | application/x-www-form-urlencoded 177 | 178 | 179 | Accept 180 | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 181 | 182 | 183 | Accept-Encoding 184 | gzip,deflate,sdch 185 | 186 | 187 | Cache-Control 188 | max-age=0 189 | 190 | 191 | Connection 192 | keep-alive 193 | 194 | 195 | Accept-Language 196 | en-US,en;q=0.8,ru;q=0.6 197 | 198 | 199 | 200 | 201 | 202 | true 203 | 204 | saveConfig 205 | 206 | 207 | true 208 | true 209 | true 210 | 211 | true 212 | true 213 | true 214 | true 215 | false 216 | true 217 | true 218 | true 219 | true 220 | true 221 | false 222 | true 223 | true 224 | false 225 | true 226 | 0 227 | true 228 | true 229 | true 230 | 231 | 232 | results/errors-detailed.jtl 233 | This should be enabled also during a load test 234 | 235 | 236 | 237 | false 238 | 239 | saveConfig 240 | 241 | 242 | true 243 | true 244 | true 245 | 246 | true 247 | true 248 | true 249 | true 250 | false 251 | true 252 | true 253 | false 254 | false 255 | false 256 | false 257 | false 258 | false 259 | false 260 | false 261 | 0 262 | true 263 | true 264 | 265 | 266 | 267 | This should be disabled before starting a load test 268 | 269 | 270 | 271 | false 272 | 273 | saveConfig 274 | 275 | 276 | true 277 | true 278 | true 279 | 280 | true 281 | true 282 | true 283 | true 284 | false 285 | true 286 | true 287 | false 288 | false 289 | false 290 | false 291 | false 292 | false 293 | false 294 | false 295 | 0 296 | true 297 | true 298 | 299 | 300 | 301 | This should be disabled before starting a load test 302 | 303 | 304 | 305 | continue 306 | 307 | false 308 | ${iterations} 309 | 310 | 1 311 | 0 312 | 1396446035000 313 | 1396446035000 314 | false 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | user_login 324 | first_name 325 | 326 | 327 | 328 | ${contributor_user_login} 329 | ${contributor_first_name} 330 | 331 | 332 | true 333 | 334 | 335 | 336 | 337 | user_login 338 | first_name 339 | 340 | 341 | 342 | ${admin_user_login} 343 | ${admin_first_name} 344 | 345 | 346 | true 347 | 348 | 349 | 350 | modules/core/Login.jmx 351 | 352 | 353 | 354 | 355 | modules/core/Homepage.jmx 356 | 357 | 358 | 359 | modules/core/View Blog Post.jmx 360 | 361 | 362 | 363 | modules/plugins/likes-posts-comments/Like Blog Post.jmx 364 | 365 | 366 | 367 | modules/plugins/likes-posts-comments/Like Comment.jmx 368 | 369 | 370 | 371 | modules/core/Post Comment.jmx 372 | 373 | 374 | 375 | modules/core/Create Blog Post.jmx 376 | 377 | 378 | 379 | modules/core/Search.jmx 380 | 381 | 382 | 383 | 384 | continue 385 | 386 | false 387 | ${iterations} 388 | 389 | 1 390 | 0 391 | 1396446035000 392 | 1396446035000 393 | false 394 | 395 | 396 | 397 | 398 | 399 | modules/core/Homepage.jmx 400 | 401 | 402 | 403 | modules/core/View Blog Post.jmx 404 | 405 | 406 | 407 | modules/core/RSS Blog Entries.jmx 408 | 409 | 410 | 411 | modules/core/RSS Blog Comments.jmx 412 | 413 | 414 | 415 | modules/core/Search.jmx 416 | 417 | 418 | 419 | 420 | ${blog_posts_filename} 421 | 422 | blogpost_title,blog_post_relative_path 423 | \t 424 | false 425 | true 426 | false 427 | shareMode.all 428 | 429 | 430 | 431 | ${blogs_filename} 432 | 433 | blog_relative_path 434 | \t 435 | false 436 | true 437 | false 438 | shareMode.all 439 | multisite is not supported yet 440 | 441 | 442 | 443 | ${users_filename} 444 | 445 | user_id,user_login,user_email,display_name,first_name,last_name 446 | \t 447 | false 448 | true 449 | false 450 | shareMode.all 451 | 452 | 453 | 454 | ${administrators_filename} 455 | 456 | admin_user_id,admin_user_login,admin_user_email,admin_display_name,admin_first_name,admin_last_name 457 | \t 458 | false 459 | true 460 | false 461 | shareMode.all 462 | 463 | 464 | 465 | ${contributors_filename} 466 | 467 | contributor_user_id,contributor_user_login,contributor_user_email,contributor_display_name,contributor_first_name,contributor_last_name 468 | \t 469 | false 470 | true 471 | false 472 | shareMode.all 473 | 474 | 475 | 476 | ${static_posts_title_filename} 477 | 478 | post_title 479 | \t 480 | false 481 | true 482 | false 483 | shareMode.all 484 | used for creating new blog posts 485 | 486 | 487 | 488 | ${static_posts_content_filename} 489 | 490 | post_content 491 | \t 492 | false 493 | true 494 | false 495 | shareMode.all 496 | used for creating new blog posts 497 | 498 | 499 | 500 | , 501 | 502 | ${search_queries_filename} 503 | false 504 | true 505 | shareMode.all 506 | false 507 | search_query 508 | 509 | 510 | 511 | 512 | 513 | -------------------------------------------------------------------------------- /export.jmx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | false 7 | true 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | service_host 18 | ${__P(webserver,)} 19 | = 20 | 21 | 22 | service_port 23 | ${__P(service_port,)} 24 | = 25 | 26 | 27 | service_protocol 28 | ${__P(service_protocol,)} 29 | = 30 | 31 | 32 | proxy_server 33 | ${__P(proxy_server,)} 34 | = 35 | 36 | 37 | proxy_port 38 | ${__P(proxy_port,)} 39 | = 40 | 41 | 42 | users_filename 43 | ${__P(users_filename,)} 44 | = 45 | 46 | 47 | administrators_filename 48 | ${__P(administrators_filename,)} 49 | = 50 | 51 | 52 | contributors_filename 53 | ${__P(contributors_filename,)} 54 | = 55 | 56 | 57 | blogs_filename 58 | ${__P(blogs_filename,)} 59 | = 60 | 61 | 62 | blog_posts_filename 63 | ${__P(blog_posts_filename,)} 64 | = 65 | 66 | 67 | search_filters_filename 68 | ${__P(search_filters_filename,)} 69 | = 70 | 71 | 72 | search_queries_filename 73 | ${__P(search_queries_filename,)} 74 | = 75 | 76 | 77 | tags_filename 78 | ${__P(tags_filename,)} 79 | = 80 | 81 | 82 | metadata_tags_filename 83 | ${__P(metadata_tags_filename,)} 84 | = 85 | 86 | 87 | admin_user_name 88 | ${__P(admin_user_name,admin)} 89 | = 90 | 91 | 92 | admin_user_pass 93 | ${__P(admin_user_pass,admin)} 94 | = 95 | 96 | 97 | use_impersonation 98 | false 99 | = 100 | 101 | 102 | 103 | 104 | 105 | false 106 | 107 | saveConfig 108 | 109 | 110 | true 111 | true 112 | true 113 | 114 | true 115 | true 116 | true 117 | true 118 | false 119 | true 120 | true 121 | false 122 | false 123 | true 124 | false 125 | false 126 | false 127 | false 128 | false 129 | 0 130 | true 131 | true 132 | 133 | 134 | 135 | 136 | 137 | 138 | false 139 | 140 | saveConfig 141 | 142 | 143 | true 144 | true 145 | true 146 | 147 | true 148 | true 149 | true 150 | true 151 | false 152 | true 153 | true 154 | false 155 | false 156 | true 157 | false 158 | false 159 | false 160 | false 161 | false 162 | 0 163 | true 164 | true 165 | 166 | 167 | 168 | 169 | 170 | 171 | continue 172 | 173 | false 174 | 5 175 | 176 | 1 177 | 1 178 | 1319548849000 179 | 1319548849000 180 | false 181 | 182 | 183 | Export all users - giving it up to 5 tries 184 | 185 | 186 | 187 | 188 | 189 | OUT.println("Exporting users..."); 190 | beanshell 191 | 192 | 193 | 194 | modules/core/Login.jmx 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | /data-export-csv.php?query=users 208 | GET 209 | true 210 | false 211 | true 212 | false 213 | false 214 | 215 | 216 | 217 | 218 | ${users_filename} 219 | false 220 | true 221 | true 222 | true 223 | 224 | 225 | 226 | 227 | "${JMeterThread.last_sample_ok}" == "false" 228 | false 229 | 230 | 231 | 232 | 233 | 234 | OUT.println("Failed exporting users."); 235 | beanshell 236 | 237 | 238 | 239 | 3 240 | 0 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | /data-export-csv.php?query=administrators 256 | GET 257 | true 258 | false 259 | true 260 | false 261 | false 262 | 263 | 264 | 265 | 266 | ${administrators_filename} 267 | false 268 | true 269 | true 270 | true 271 | 272 | 273 | 274 | 275 | "${JMeterThread.last_sample_ok}" == "false" 276 | false 277 | 278 | 279 | 280 | 281 | 282 | OUT.println("Failed exporting administrators."); 283 | beanshell 284 | 285 | 286 | 287 | 3 288 | 0 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | /data-export-csv.php?query=contributors 304 | GET 305 | true 306 | false 307 | true 308 | false 309 | false 310 | 311 | 312 | 313 | 314 | ${contributors_filename} 315 | false 316 | true 317 | true 318 | true 319 | 320 | 321 | 322 | 323 | "${JMeterThread.last_sample_ok}" == "false" 324 | false 325 | 326 | 327 | 328 | 329 | 330 | OUT.println("Failed exporting contributors."); 331 | beanshell 332 | 333 | 334 | 335 | 3 336 | 0 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | OUT.println("Done exporting users!"); 345 | beanshell 346 | 347 | 348 | 349 | 0 350 | 0 351 | 352 | As it means users were exported successfuly 353 | 354 | 355 | 356 | 357 | continue 358 | 359 | false 360 | 5 361 | 362 | 1 363 | 1 364 | 1319548849000 365 | 1319548849000 366 | false 367 | 368 | 369 | Export all blogposts - giving it up to 5 tries 370 | 371 | 372 | 373 | 374 | 375 | OUT.println("Exporting blogposts..."); 376 | beanshell 377 | 378 | 379 | 380 | modules/core/Login.jmx 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | /data-export-csv.php?query=posts 394 | GET 395 | true 396 | false 397 | true 398 | false 399 | false 400 | 401 | 402 | 403 | 404 | ${blog_posts_filename} 405 | false 406 | true 407 | true 408 | true 409 | 410 | 411 | 412 | 413 | "${JMeterThread.last_sample_ok}" == "false" 414 | false 415 | 416 | 417 | 418 | 419 | 420 | OUT.println("Failed exporting blogposts."); 421 | beanshell 422 | 423 | 424 | 425 | 3 426 | 0 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | OUT.println("Done exporting blogposts!"); 435 | beanshell 436 | 437 | 438 | 439 | 0 440 | 0 441 | 442 | As it means posts were exported successfuly 443 | 444 | 445 | 446 | 447 | continue 448 | 449 | false 450 | 5 451 | 452 | 1 453 | 1 454 | 1400163952000 455 | 1400163952000 456 | false 457 | 458 | 459 | 460 | 461 | 462 | beanshell 463 | 464 | 465 | OUT.println("Exporting tags..."); 466 | 467 | 468 | 469 | modules/core/Login.jmx 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | /data-export-csv.php?query=tags 483 | GET 484 | true 485 | false 486 | true 487 | false 488 | false 489 | 490 | 491 | 492 | 493 | ${tags_filename} 494 | false 495 | true 496 | true 497 | true 498 | 499 | 500 | 501 | 502 | "${JMeterThread.last_sample_ok}" == "false" 503 | false 504 | 505 | 506 | 507 | 508 | 509 | OUT.println("Failed exporting tags."); 510 | beanshell 511 | 512 | 513 | 514 | 3 515 | 0 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | OUT.println("Done exporting tags!"); 524 | beanshell 525 | 526 | 527 | 528 | 0 529 | 0 530 | 531 | As it means tags were exported successfuly 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | ${service_host} 540 | ${service_port} 541 | ${proxy_server} 542 | ${proxy_port} 543 | 300000 544 | 300000 545 | ${service_protocol} 546 | 547 | 548 | HttpClient4 549 | 4 550 | 551 | 552 | 553 | 554 | false 555 | org.apache.jmeter.protocol.http.control.HC4CookieHandler 556 | 557 | 558 | 559 | 560 | 561 | Content-Type 562 | application/x-www-form-urlencoded 563 | 564 | 565 | Accept 566 | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 567 | 568 | 569 | Accept-Encoding 570 | gzip,deflate,sdch 571 | 572 | 573 | Cache-Control 574 | max-age=0 575 | 576 | 577 | Connection 578 | keep-alive 579 | 580 | 581 | Accept-Language 582 | en-US,en;q=0.8,ru;q=0.6 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | --------------------------------------------------------------------------------