JMeter學習-014-JMeter 配置元件實例之 - 用戶定義的變量 參數化配置


前文講述了通過 CSV Data Set Config 實現參數化配置(詳情敬請參閱:JMeter學習-010-JMeter 配置元件實例之 - CSV Data Set Config 參數化配置),在 JMeter 的配置元件中還有一個元件:用戶定義的變量,通過 用戶定義的變量,也可實現參數化的配置,通常用戶定義的變量一般作為全局變量使用。下面就以 用戶定義的變量 替換之前博文中的配置文件實現單一循環的參數化配置。

 

用戶定義的變量添加路徑:【 添加 / 配置元件 / 用戶定義的變量 】,其對應的配置頁面如下所示:

配置參數說明:

名稱:對用戶定義變量的簡述

注釋:對用戶定義變量的詳細概述

名稱:定義變量的引用名稱

值:變量的值

描述:對定義變量的描述信息

 

參數化腳本修改方法:

第一步:刪除原 配置元件/CSV Data Set Config 參數文件

第二步:通過 【 添加 / 配置元件 / 用戶定義的變量 】添加用戶定義的變量組件

第三步:配置用戶定義的變量

將之前 CSV Data Set Config 參數文件中配置的變量配置到添加的組件 用戶定義的變量中,配置好的用戶定義的變量如下所示:

第四步:執行腳本

腳本執行結果如下圖所示:

由上圖我們可以看到,實際腳本中配置了兩個用戶定義的變量組件(分別為不同的商品,且變量中的名稱均相同),從執行結果我們可以看出,當變量名稱相同時,腳本優先引用最近的可使用的變量。若在日后的腳本編寫調試過程中,發現變量的值不是期望的值,除了獲取變量獲取錯誤或配置錯誤之外,還存在一種可能就是就近變量覆蓋。

 

附錄(一):

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <jmeterTestPlan version="1.2" properties="2.7" jmeter="2.12 r1636949">
  3   <hashTree>
  4     <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="接口自動化測試實例 - 用戶定義的變量 參數化 實例" enabled="true">
  5       <stringProp name="TestPlan.comments"></stringProp>
  6       <boolProp name="TestPlan.functional_mode">false</boolProp>
  7       <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
  8       <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用戶定義的變量" enabled="true">
  9         <collectionProp name="Arguments.arguments"/>
 10       </elementProp>
 11       <stringProp name="TestPlan.user_define_classpath"></stringProp>
 12     </TestPlan>
 13     <hashTree>
 14       <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="008-搜索商品" enabled="true">
 15         <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
 16         <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循環控制器" enabled="true">
 17           <boolProp name="LoopController.continue_forever">false</boolProp>
 18           <stringProp name="LoopController.loops">1</stringProp>
 19         </elementProp>
 20         <stringProp name="ThreadGroup.num_threads">2</stringProp>
 21         <stringProp name="ThreadGroup.ramp_time">0</stringProp>
 22         <longProp name="ThreadGroup.start_time">1419232321000</longProp>
 23         <longProp name="ThreadGroup.end_time">1419232321000</longProp>
 24         <boolProp name="ThreadGroup.scheduler">false</boolProp>
 25         <stringProp name="ThreadGroup.duration"></stringProp>
 26         <stringProp name="ThreadGroup.delay"></stringProp>
 27       </ThreadGroup>
 28       <hashTree>
 29         <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="用戶定義的變量 - 商品編號 101-006-78945" enabled="true">
 30           <collectionProp name="Arguments.arguments">
 31             <elementProp name="goodsNo" elementType="Argument">
 32               <stringProp name="Argument.name">goodsNo</stringProp>
 33               <stringProp name="Argument.value">101-006-78945</stringProp>
 34               <stringProp name="Argument.desc">商品編號</stringProp>
 35               <stringProp name="Argument.metadata">=</stringProp>
 36             </elementProp>
 37             <elementProp name="districtId" elementType="Argument">
 38               <stringProp name="Argument.name">districtId</stringProp>
 39               <stringProp name="Argument.value">29313</stringProp>
 40               <stringProp name="Argument.desc">配送區域</stringProp>
 41               <stringProp name="Argument.metadata">=</stringProp>
 42             </elementProp>
 43             <elementProp name="areacode" elementType="Argument">
 44               <stringProp name="Argument.name">areacode</stringProp>
 45               <stringProp name="Argument.value">1</stringProp>
 46               <stringProp name="Argument.desc">倉庫大區</stringProp>
 47               <stringProp name="Argument.metadata">=</stringProp>
 48             </elementProp>
 49             <elementProp name="sysNo" elementType="Argument">
 50               <stringProp name="Argument.name">sysNo</stringProp>
 51               <stringProp name="Argument.value">2169256</stringProp>
 52               <stringProp name="Argument.desc">商品系統編號,用於校驗搜索結果</stringProp>
 53               <stringProp name="Argument.metadata">=</stringProp>
 54             </elementProp>
 55             <elementProp name="skuid" elementType="Argument">
 56               <stringProp name="Argument.name">skuid</stringProp>
 57               <stringProp name="Argument.value">489349159815</stringProp>
 58               <stringProp name="Argument.desc">單品SKU,用戶校驗搜索結果</stringProp>
 59               <stringProp name="Argument.metadata">=</stringProp>
 60             </elementProp>
 61             <elementProp name="appSource" elementType="Argument">
 62               <stringProp name="Argument.name">appSource</stringProp>
 63               <stringProp name="Argument.value">android</stringProp>
 64               <stringProp name="Argument.desc">平台</stringProp>
 65               <stringProp name="Argument.metadata">=</stringProp>
 66             </elementProp>
 67             <elementProp name="appVersion" elementType="Argument">
 68               <stringProp name="Argument.name">appVersion</stringProp>
 69               <stringProp name="Argument.value">45</stringProp>
 70               <stringProp name="Argument.desc">版本</stringProp>
 71               <stringProp name="Argument.metadata">=</stringProp>
 72             </elementProp>
 73           </collectionProp>
 74           <stringProp name="TestPlan.comments">,,,,,,</stringProp>
 75         </Arguments>
 76         <hashTree/>
 77         <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="用戶定義的變量 - 商品編號 101-006-78945" enabled="true">
 78           <collectionProp name="Arguments.arguments">
 79             <elementProp name="goodsNo" elementType="Argument">
 80               <stringProp name="Argument.name">goodsNo</stringProp>
 81               <stringProp name="Argument.value">101-005-31058</stringProp>
 82               <stringProp name="Argument.desc">商品編號</stringProp>
 83               <stringProp name="Argument.metadata">=</stringProp>
 84             </elementProp>
 85             <elementProp name="districtId" elementType="Argument">
 86               <stringProp name="Argument.name">districtId</stringProp>
 87               <stringProp name="Argument.value">29313</stringProp>
 88               <stringProp name="Argument.desc">配送區域</stringProp>
 89               <stringProp name="Argument.metadata">=</stringProp>
 90             </elementProp>
 91             <elementProp name="areacode" elementType="Argument">
 92               <stringProp name="Argument.name">areacode</stringProp>
 93               <stringProp name="Argument.value">1</stringProp>
 94               <stringProp name="Argument.desc">倉庫大區</stringProp>
 95               <stringProp name="Argument.metadata">=</stringProp>
 96             </elementProp>
 97             <elementProp name="sysNo" elementType="Argument">
 98               <stringProp name="Argument.name">sysNo</stringProp>
 99               <stringProp name="Argument.value">1903913</stringProp>
100               <stringProp name="Argument.desc">商品系統編號,用於校驗搜索結果</stringProp>
101               <stringProp name="Argument.metadata">=</stringProp>
102             </elementProp>
103             <elementProp name="skuid" elementType="Argument">
104               <stringProp name="Argument.name">skuid</stringProp>
105               <stringProp name="Argument.value">472108827742</stringProp>
106               <stringProp name="Argument.desc">單品SKU,用戶校驗搜索結果</stringProp>
107               <stringProp name="Argument.metadata">=</stringProp>
108             </elementProp>
109             <elementProp name="appSource" elementType="Argument">
110               <stringProp name="Argument.name">appSource</stringProp>
111               <stringProp name="Argument.value">android</stringProp>
112               <stringProp name="Argument.desc">平台</stringProp>
113               <stringProp name="Argument.metadata">=</stringProp>
114             </elementProp>
115             <elementProp name="appVersion" elementType="Argument">
116               <stringProp name="Argument.name">appVersion</stringProp>
117               <stringProp name="Argument.value">45</stringProp>
118               <stringProp name="Argument.desc">版本</stringProp>
119               <stringProp name="Argument.metadata">=</stringProp>
120             </elementProp>
121           </collectionProp>
122           <stringProp name="TestPlan.comments">,,,,,,</stringProp>
123         </Arguments>
124         <hashTree/>
125         <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="008-01-搜索商品 【${goodsNo} | ${districtId}】" enabled="true">
126           <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
127             <collectionProp name="Arguments.arguments">
128               <elementProp name="q" elementType="HTTPArgument">
129                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
130                 <stringProp name="Argument.value">${goodsNo}</stringProp>
131                 <stringProp name="Argument.metadata">=</stringProp>
132                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
133                 <stringProp name="Argument.name">q</stringProp>
134               </elementProp>
135               <elementProp name="districtId" elementType="HTTPArgument">
136                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
137                 <stringProp name="Argument.value">${districtId}</stringProp>
138                 <stringProp name="Argument.metadata">=</stringProp>
139                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
140                 <stringProp name="Argument.name">districtId</stringProp>
141               </elementProp>
142               <elementProp name="areacode" elementType="HTTPArgument">
143                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
144                 <stringProp name="Argument.value">${areacode}</stringProp>
145                 <stringProp name="Argument.metadata">=</stringProp>
146                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
147                 <stringProp name="Argument.name">areacode</stringProp>
148               </elementProp>
149               <elementProp name="dtype" elementType="HTTPArgument">
150                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
151                 <stringProp name="Argument.value">list|page|classes</stringProp>
152                 <stringProp name="Argument.metadata">=</stringProp>
153                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
154                 <stringProp name="Argument.name">dtype</stringProp>
155               </elementProp>
156               <elementProp name="districtId" elementType="HTTPArgument">
157                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
158                 <stringProp name="Argument.name">districtId</stringProp>
159                 <stringProp name="Argument.value">${districtId}</stringProp>
160                 <stringProp name="Argument.metadata">=</stringProp>
161                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
162               </elementProp>
163               <elementProp name="exAppTag" elementType="HTTPArgument">
164                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
165                 <stringProp name="Argument.name">exAppTag</stringProp>
166                 <stringProp name="Argument.value">2045191607</stringProp>
167                 <stringProp name="Argument.metadata">=</stringProp>
168                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
169               </elementProp>
170               <elementProp name="appSource" elementType="HTTPArgument">
171                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
172                 <stringProp name="Argument.value">${appSource}</stringProp>
173                 <stringProp name="Argument.metadata">=</stringProp>
174                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
175                 <stringProp name="Argument.name">appSource</stringProp>
176               </elementProp>
177               <elementProp name="appVersion" elementType="HTTPArgument">
178                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
179                 <stringProp name="Argument.value">${appVersion}</stringProp>
180                 <stringProp name="Argument.metadata">=</stringProp>
181                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
182                 <stringProp name="Argument.name">appVersion</stringProp>
183               </elementProp>
184             </collectionProp>
185           </elementProp>
186           <stringProp name="HTTPSampler.domain">mb.51buy.com</stringProp>
187           <stringProp name="HTTPSampler.port"></stringProp>
188           <stringProp name="HTTPSampler.connect_timeout"></stringProp>
189           <stringProp name="HTTPSampler.response_timeout"></stringProp>
190           <stringProp name="HTTPSampler.protocol">http</stringProp>
191           <stringProp name="HTTPSampler.contentEncoding">GB2312</stringProp>
192           <stringProp name="HTTPSampler.path">/json.php?mod=Search&amp;act=page&amp;p=1&amp;pp=20</stringProp>
193           <stringProp name="HTTPSampler.method">POST</stringProp>
194           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
195           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
196           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
197           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
198           <boolProp name="HTTPSampler.monitor">false</boolProp>
199           <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
200         </HTTPSamplerProxy>
201         <hashTree>
202           <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息頭管理器" enabled="true">
203             <collectionProp name="HeaderManager.headers">
204               <elementProp name="Charset" elementType="Header">
205                 <stringProp name="Header.name">Charset</stringProp>
206                 <stringProp name="Header.value">UTF-8</stringProp>
207               </elementProp>
208               <elementProp name="Content-Type" elementType="Header">
209                 <stringProp name="Header.name">Content-Type</stringProp>
210                 <stringProp name="Header.value">application/x-www-form-urlencoded</stringProp>
211               </elementProp>
212               <elementProp name="Accept-Encoding" elementType="Header">
213                 <stringProp name="Header.name">Accept-Encoding</stringProp>
214                 <stringProp name="Header.value">gzip</stringProp>
215               </elementProp>
216               <elementProp name="User-Agent" elementType="Header">
217                 <stringProp name="Header.name">User-Agent</stringProp>
218                 <stringProp name="Header.value">Dalvik/1.6.0 (Linux; U; Android 4.4.2; GT-I9502 Build/KOT49H)</stringProp>
219               </elementProp>
220             </collectionProp>
221           </HeaderManager>
222           <hashTree/>
223           <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="響應斷言" enabled="true">
224             <collectionProp name="Asserion.test_strings">
225               <stringProp name="-781931418">${sysNo}</stringProp>
226               <stringProp name="-794775524">${skuid}</stringProp>
227             </collectionProp>
228             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
229             <boolProp name="Assertion.assume_success">false</boolProp>
230             <intProp name="Assertion.test_type">16</intProp>
231           </ResponseAssertion>
232           <hashTree/>
233         </hashTree>
234       </hashTree>
235       <ResultCollector guiclass="AssertionVisualizer" testclass="ResultCollector" testname="斷言結果" enabled="true">
236         <boolProp name="ResultCollector.error_logging">false</boolProp>
237         <objProp>
238           <name>saveConfig</name>
239           <value class="SampleSaveConfiguration">
240             <time>true</time>
241             <latency>true</latency>
242             <timestamp>true</timestamp>
243             <success>true</success>
244             <label>true</label>
245             <code>true</code>
246             <message>true</message>
247             <threadName>true</threadName>
248             <dataType>true</dataType>
249             <encoding>false</encoding>
250             <assertions>true</assertions>
251             <subresults>true</subresults>
252             <responseData>false</responseData>
253             <samplerData>false</samplerData>
254             <xml>false</xml>
255             <fieldNames>false</fieldNames>
256             <responseHeaders>false</responseHeaders>
257             <requestHeaders>false</requestHeaders>
258             <responseDataOnError>false</responseDataOnError>
259             <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
260             <assertionsResultsToSave>0</assertionsResultsToSave>
261             <bytes>true</bytes>
262             <threadCounts>true</threadCounts>
263           </value>
264         </objProp>
265         <stringProp name="filename"></stringProp>
266       </ResultCollector>
267       <hashTree/>
268       <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看結果樹" enabled="true">
269         <boolProp name="ResultCollector.error_logging">false</boolProp>
270         <objProp>
271           <name>saveConfig</name>
272           <value class="SampleSaveConfiguration">
273             <time>true</time>
274             <latency>true</latency>
275             <timestamp>true</timestamp>
276             <success>true</success>
277             <label>true</label>
278             <code>true</code>
279             <message>true</message>
280             <threadName>true</threadName>
281             <dataType>true</dataType>
282             <encoding>false</encoding>
283             <assertions>true</assertions>
284             <subresults>true</subresults>
285             <responseData>false</responseData>
286             <samplerData>false</samplerData>
287             <xml>false</xml>
288             <fieldNames>false</fieldNames>
289             <responseHeaders>false</responseHeaders>
290             <requestHeaders>false</requestHeaders>
291             <responseDataOnError>false</responseDataOnError>
292             <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
293             <assertionsResultsToSave>0</assertionsResultsToSave>
294             <bytes>true</bytes>
295             <threadCounts>true</threadCounts>
296           </value>
297         </objProp>
298         <stringProp name="filename">${__property(JmeterAuto_LogFile)}</stringProp>
299       </ResultCollector>
300       <hashTree/>
301     </hashTree>
302   </hashTree>
303 </jmeterTestPlan>
JMeter學習-014-JMeter 配置元件之 - 用戶定義的變量 參數化配置

 

至此, JMeter學習-014-JMeter 配置元件實例之 - 用戶定義的變量 參數化配置 順利完結,希望此文能夠給初學 JMeter 的您一份參考。

最后,非常感謝親的駐足,希望此文能對親有所幫助。熱烈歡迎親一起探討,共同進步。非常感謝! ^_^

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM